
    6h                       S r SSKJr  SSKrSSKrSSKrSSKJr  SSKJ	r	J
r
JrJrJrJr  SSKJr  SSKJr  S	rSqSqS
 rS rS r " S S5      rS rS rS rS rS rS r \RB                  " \	S\ 5        \RB                  " \R                  S\5        \RB                  " \R                  S\5        \RB                  " \R                  S\5        \RB                  " \S\5        \RB                  " \S\5        g)a  discover and advertise repositories on the local network

The zeroconf extension will advertise :hg:`serve` instances over
DNS-SD so that they can be discovered using the :hg:`paths` command
without knowing the server's IP address.

To allow other people to discover your repository using run
:hg:`serve` in your repository::

  $ cd test
  $ hg serve

You can discover Zeroconf-enabled repositories by running
:hg:`paths`::

  $ hg paths
  zc-test = http://example.com:8000/test
    )annotationsN   )Zeroconf)dispatchencoding
extensionshgpycompatui)rcutil)servers   ships-with-hg-corec                     [         R                   " [         R                  [         R                  5      n U R                  S5        U R	                  5       S   nU$ ! [
         a     Of = f [         R                  " [         R                  " 5       5      S   S   nSU;   a  SnUR                  S5      (       d  U$ O,! [         R                  [         R                  4 a    Sn Of = f [         R                   " [         R                  [         R                  5      n U R                  S5        U R	                  5       S   nU$ ! [
         a     U$ f = f)N)1.0.0.1r   r      :z	127.0.0.1127.)r   r   )socketAF_INET
SOCK_DGRAMconnectgetsocknameOSErrorgethostbyaddrgethostname
startswithgaierrorherror)sipdumbips      9/usr/lib/python3/dist-packages/hgext/zeroconf/__init__.pygetipr"   8   s   MM&..&*;*;<			.!]]_Q	 %%f&8&8&:;A>qA&= F  ((M )OOV]]+ MM&..&*;*;<			.!]]_Q	 Ms8   AA 
A('A(,AB< <&C%$C%)AE 
EEc                b   [         (       dM  [        5       nUR                  S5      (       a  g [        R                  " U5      q[        R                  " U5      q [        R                  " 5       R                  S5      S   nUS-   nU< SU < 3n [        R                  " S[        R                  " U S-   5      UUUSU-   S	.[
        SSS
9n[         R                  U5        [        R                  " S[        R                  " U S-   5      UUUSU-   S	.[
        SSS
9n[         R                  U5        g )Nr   .r   z.local-s   _http._tcp.local.z._http._tcp.local.   /)   descriptions   path)r   port
propertiesaddressweightpriority   _hg._tcp.local.z._hg._tcp.local.)r   r"   r   r   	inet_atonlocalipr   r   splitServiceInfor
   bytestrregisterService)namedescpathr(   r   hostnamehostsvcs           r!   publishr:   X   s   6W==  ""2&""2&!!#))#.q1HhD%D 

 445$(4$;?	C 3 

 223$(4$;?	C 3    c                   U " X5      nUR                   n UR                  nUR                  R                  SSS5      R	                  S5      S-   nU H  u  pxUR                  R                  5       n	[        R                  " 5       (       a0  U	R                  [        R                  R                  USS5      5        [        R                  R                  U5      n
Xg-   R	                  S5      nU	R                  SS5      nU(       d  U
n[        XX5        M     U$ ! [         a    UR                  5        nUR                   =(       d)    [        R                  R                  UR"                  5      n
UR                  R                  SSS5      R	                  S5      nUR                  R                  SS5      nU(       d  U
nS S S 5        O! , (       d  f       O= f[        W
WWU5         U$ f = f)Ns   webs   prefixr;   r&   s   .hgs   hgrcr'   )r(   reposr   configstripcopyr   use_repo_hgrc
readconfigosr6   joinbasenamer:   AttributeError_obtainreporeponameroot)create_serverr   apphttpdr(   r=   prefixrepor6   ur4   r5   s               r!   zc_create_serverrP      s   ""E::D,		 vy#6<<TBTIJDA##%%RWW\\$@A77##D)DM((.D88FN3DD+   L-  (__$<<>277#3#3DII#>D77>>&)S9??ED77>>&.9D  	dD$' L-(s*   D G/5BG	G/
G	G/.G/c                  &    \ rS rSrS rS rS rSrg)listener   c                    0 U l         g Nfound)selfs    r!   __init__listener.__init__   s	    
r;   c                d    [        U5      U R                  ;   a  U R                  [        U5      	 g g rU   )reprrW   rX   r   typer4   s       r!   removeServicelistener.removeService   s'    :#

4:& $r;   c                R    UR                  X#5      U R                  [        U5      '   g rU   )getServiceInforW   r\   r]   s       r!   
addServicelistener.addService   s    !'!6!6t!B

4:r;   rV   N)__name__
__module____qualname____firstlineno__rY   r_   rc   __static_attributes__ r;   r!   rR   rR      s    'Cr;   rR   c            	   #  t  #    [        5       n U R                  S5      (       a  g [        R                  " U 5      n[        5       n[        R                  " USU5        [
        R                  " S5        UR                  5         UR                  R                  5        H  nUR                  S UR                  R                  S5       nS[        R                  " UR                  5      < SUR                  < UR                   R#                  SS5      < 3nS	U-   [$        R&                  " U5      4v   M     g 7f)
Nr   r-   r      .zhttp://r   r6   /   zc-)r"   r   r   rR   ServiceBrowsertimesleepcloserW   valuesr4   indexr   	inet_ntoar*   r(   r)   getr
   r2   )r   r   lvaluer4   urls         r!   
getzcpathsrz      s     	B	}}Vr"F
AF$6:JJqM
LLN!zz2EJJ,,T23U]]+JJ  -

 tmX--c222 "s   D6D8c                    US:X  a2  UR                  S5      (       a  [        5        H  u  pgXc:X  d  M  Us  $    U " XU/UQ70 UD6$ N   pathsrn   r   rz   )origrX   sectionkeyargskwargsr4   r6   s           r!   r>   r>      sI    (s~~f55$,JD{ ' s4T4V44r;   c                D    U " X/UQ70 UD6nUS:X  a  U[        5       -  nU$ )Nr}   )rz   )r   rX   r   r   r   r=   s         r!   configitemsr      s/    000E(Lr;   c                    U " XU/UQ70 UD6u  pgUS:X  a3  UR                  S5      (       a  [        5        H  u  pX:X  d  M  X4s  $    Xg4$ r|   r~   )
r   rX   r   r4   r   r   optsubzcnamezcurls
             r!   configsuboptionsr      sV    D49$9&9HC(tv66 (\MF~z! * 8Or;   c                    [        5        H+  u  p#X1:X  d  M  UR                  [        R                  5      s  $    U " U5      $ rU   )rz   encoder   )r   sourcer4   r6   s       r!   defaultdestr      s6     l
>;;x0011 # <r;   c                     U " XX45      [         (       a  [         R                  5         $ $ ! [         (       a  [         R                  5         f f = frU   )r   rr   )r   r   optionscmdcmdfuncs        r!   cleanupafterdispatchr      s:    B.
 6LLN 66LLN s	   + "A_runcommandr>   r   r   r   rJ   )"__doc__
__future__r   rC   r   rp    r   	mercurialr   r   r   r	   r
   r   uimodmercurial.configurationr   mercurial.hgwebr   	servermod
testedwithr/   r"   r:   rP   rR   rz   r>   r   r   r   r   wrapfunctionrj   r;   r!   <module>r      s   & # 	     + / #
 

@& RD	C 	C3&5   -1E F 
  (F 3 
  - = 
  "46F G 
  M; 7 
  	?4D Er;   