
    =OOf@                     z   d Z ddlZddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZmZmZ dd	lm Z  dd
l!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3 	 ddl4m5Z5 	 ddlm8Z8 dZ9 G d de:      Z;y# e6$ r	 ddl7m5Z5 Y "w xY w# e6$ r dZ9Y &w xY w)
    N)Lock)datetimeMINYEAR   )DSASCHEMAALLBASEget_config_parameterOFFLINE_EDIR_8_8_8OFFLINE_EDIR_9_1_4OFFLINE_AD_2012_R2OFFLINE_SLAPD_2_4OFFLINE_DS389_1_3_3SEQUENCE_TYPESIP_SYSTEM_DEFAULT
IP_V4_ONLY
IP_V6_ONLYIP_V4_PREFERREDIP_V6_PREFERREDSTRING_TYPES   )LDAPInvalidServerErrorLDAPDefinitionErrorLDAPInvalidPortError LDAPInvalidTlsSpecificationErrorLDAPSocketOpenErrorLDAPInfoError)format_attribute_values)LDAP_MAX_INT)
SchemaInfoDsaInfo)Tls)loglog_enabledERRORBASICPROTOCOLNETWORK)
to_unicode)
check_portcheck_port_and_port_list)unquote)AF_UNIXTFc            	           e Zd ZdZdZ e       Zdddedddedf	dZ	e
d        Zd Zd Zed	        Zd
 Zd ZddZe
d        Zd ZddZd ZddZddZed        Zed        Ze
dd       Zd Zd Zd Zd Zd Z y)Servera	  
    LDAP Server definition class

    Allowed_referral_hosts can be None (default), or a list of tuples of
    allowed servers ip address or names to contact while redirecting
    search to referrals.

    The second element of the tuple is a boolean to indicate if
    authentication to that server is allowed; if False only anonymous
    bind will be used.

    Per RFC 4516. Use [('*', False)] to allow any host with anonymous
    bind, use [('*', True)] to allow any host with same authentication of
    Server.
    r   NFc                 \   d| _         d}|j                         }|j                         j                  d      r|dd  | _        d}d}n|j                         j                  d      r|dd  | _        d}d}nh|j                         j                  d      rt
        rd| _         d}d}n7|j                         j                  d      rt
        st        d      || _        | j                   rKt        t        u r#t        |dd        j                  d	      | _        nt        |dd        | _        d | _        nd
| j                  v rV| j                  j                  d
      dk(  r8| j                  j                  d
      \  }}}	 t        |      xs |}|| _        n|r7| j                  j                  d      r| j                  dd  j                  d      \  }}}|dk7  s| j)                  |      s4t!        t"              rt%        t"        d| j                         t+               t-        |      r|j                  d
      s5t!        t"              rt%        t"        d| j                         t+        d      |dd  j/                         s5t!        t"              rt%        t"        d| j                         t'        d      t        |dd        }|| _        np|s| j)                  | j                        rnR| j                  j                  d
      dkD  r4t!        t"              rt%        t"        d| j                         t+               | j                   sf| j                  j1                  d       |s|sd}n|r|sd}t3        |      }|r*t!        t"              rt%        t"        |       t'        |      || _        |dg}t5        |t6              rOg | _        |D ]B  }t5        |t:              st5        |d   t<              s(| j8                  j?                  |       D n3t5        |t:              rt5        |d   t<              r|g| _        ng | _        |rdnd| _         |r;t5        |tB              s+t!        t"              rt%        t"        d|       tE        d      | j@                  r|s
tC               n|| _#        | j                   s| j)                  | j                        r?| j@                  rdnddz   | j                  z   dz   t        | j                        z   | _$        nF| j@                  rdnddz   | j                  z   d
z   t        | j                        z   | _$        n|| _$        || _%        d | _&        d | _'        tQ               | _)        || _*        |
| _+        g | _,        t[        t\        dd      | _/        d | _0        || _1        |	| _2        | jg                  d        t!        th              rt%        th        d |        y y # t        $ r, t!        t"              rt%        t"        d|       t'        d      w xY w)!NFzldap://   Tzldaps://   zldapi://z6LDAP over IPC not available - UNIX sockets non presentzutf-8:r   zport <%s> must be an integerzport must be an integer[]z$invalid IPv6 server address for <%s>z#invalid URL in server name for <%s>zinvalid URL in server namez port must be an integer for <%s>zinvalid server address for <%s>/i  i|  )*Tzinvalid tls specification: <%s>zinvalid Tls objectldapsldapz://[z]:z://zinstantiated Server: <%r>)5ipcstriplower
startswithhostunix_socket_availabler   strbytesr.   decodeportcount	partitionint
ValueErrorr&   r'   r%   r   _is_ipv6r   len	isdecimalrstripr,   
isinstancer   allowed_referral_hoststupleboolappendsslr$   r   tlsnameget_info	_dsa_info_schema_infor   dit_lockcustom_formattercustom_validator_address_infor   r   _address_info_resolved_timecurrent_addressconnect_timeoutmodeget_info_from_serverr(   )selfr@   rE   use_sslrO   rV   rT   	formatterr_   r`   	validator	url_givenhostname_hostportsepport_errreferral_hosts                     R/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/ldap3/core/server.py__init__zServer.__init__I   s    	zz|::<""9-QRDIGIZZ\$$Z0QRDIGIZZ\$$Z05JDHGIZZ\$$Z09N%&^__DI88e|#DH-44W=	#DH-	DIDII$))//#"6!";$(II$7$7$<!HaF8},
 !DI499//4&*iim&=&=c&B#Hc8czx!8u%EtyyQ,..8}**3/"5)E#H$))T01MNN|--/"5)E#EtyyQ./HII8AB<( DIt}}TYY7YY__S!A%5!E<diiH(**xxIIS!4!$'Hu%x(*844DI!)&1]",n=*,D'!7 JmU3!-"2D933::=IJ .603T:/E.F+*,D'"4z#s+5!E<cB23GHH HHS35cxx}}TYY'(,WfFRUYY\_`d`i`i\jj	(,WfE		QTWWZ]^b^g^gZhh	DI   ) )+3GQ+B(#.	!!$'u2D9 q  Fu%=tD*+DEEFs   W6 65X+c                     	 t        j                  t         j                  |        y# t         j                  t        t
        f$ r Y yw xY w)NFT)socket	inet_ptonAF_INET6errorAttributeErrorrI   )r@   s    rm   rJ   zServer._is_ipv6   s?    	V__d3  nj9 		s   $' AAc                     | j                   r4| j                  | j                  rdndz   | j                  rdz   }|S dz   }|S t        j                  |       }|S )Nz - sslz - cleartextz - unix socket )r@   rU   rS   r<   object__str__)rb   ss     rm   rx   zServer.__str__   s]    99		X~F^b^f^fJZoA  mooA  t$A    c                    dj                  |       }|| j                  sdndj                  |       z  }|| j                  dndj                  |       z  }|| j                  sdndj                  |       z  }|| j                  sdndj                  |       z  }|| j
                  sdndj                  |       z  }|dz  }|S )	Nz:Server(host={0.host!r}, port={0.port!r}, use_ssl={0.ssl!r}rv   z5, allowed_referral_hosts={0.allowed_referral_hosts!r}z, tls={0.tls!r}z, get_info={0.get_info!r}z', connect_timeout={0.connect_timeout!r}z, mode={0.mode!r}))formatrO   rT   rV   r_   r`   )rb   rs     rm   __repr__zServer.__repr__   s    HOOPTU	t22R8o8v8vw{8||	488#R):)A)A$)GG	t}}R*E*L*LT*RR	t++R1Z1a1abf1gg	tyyR&9&@&@&FF	Srz   c           	      B   t        d      }| j                  r/t        j                         | j                  z
  j
                  |kD  rd }	 | j                  r1t        j                  t        j                  dd | j                  d fg}n| j                  t        k(  ryt        j                  | j                  | j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  z        }n| j                  t&        k(  rxt        j                  | j                  | j                  t        j(                  t        j                  t        j                   t        j"                  t        j$                  z        }nwt        j                  | j                  | j                  t        j*                  t        j                  t        j                   t        j"                  t        j$                  z        }|s.	 | j                  t        k(  rXt        j                  | j                  | j                  t        j                  t        j                  t        j                         }n| j                  t&        k(  rXt        j                  | j                  | j                  t        j(                  t        j                  t        j                         }nWt        j                  | j                  | j                  t        j*                  t        j                  t        j                         }|r=|D cg c]  }t1        |      d d gz    c}| _        t        j                         | _        ng | _        t        t2        dd      | _        t5        t6              r&| j                  D ]  }t9        t6        d| |d d         | j                  S # t        j,                  t.        f$ r Y w xY w# t        j,                  $ r Y w xY wc c}w )NADDRESS_INFO_REFRESH_TIMEr   r   z!address for <%s> resolved as <%r>)r   r\   r   nowr]   secondsr<   rp   r/   SOCK_STREAMr@   r`   r   getaddrinforE   AF_INETIPPROTO_TCPAI_ADDRCONFIGAI_V4MAPPEDr   rr   	AF_UNSPECgaierrorrt   listr   r&   r(   r%   )rb   conf_refresh_interval	addressesaddresss       rm   address_infozServer.address_info   sq    45P Q!!hllnt7W7W&W%`%`cx%xI88"(..&2D2DatyyZ^!_ `IyyJ.$*$6$6tyy$))V^^]c]o]oqw  rD  rD  FL  FZ  FZ  ]c  ]o  ]o  Fo  %p	j0$*$6$6tyy$))V__^d^p^prx  sE  sE  GM  G[  G[  ^d  ^p  ^p  Gp  %q	$*$6$6tyy$))VM]M]_e_q_qsy  tF  tF  HN  H\  H\  _e  _q  _q  Hq  %r	 yyJ.$*$6$6tyy$))V^^]c]o]oqw  rD  rD  %E	j0$*$6$6tyy$))V__^d^p^prx  sE  sE  %F	$*$6$6tyy$))VM]M]_e_q_qsy  tF  tF  %G	 R[%\wd7mtTl&B%\"3;<<>0%'"3;GQ3J05!#11 XGBD'RUSU,WX!!!1 OO^4    &]s,   
GO# D-P P#P ?P PPc                    d}|t        | j                        k  rl| j                  |   |k(  r;|rdnd| j                  |   d<   t        j                         | j                  |   d<   y |dz  }|t        | j                        k  rky y )Nr   TF      r   )rK   r\   r   r   r   )rb   r   	availableconts       rm   update_availabilityzServer.update_availability  s    S++,,  &'16?dU""4(+.6lln""4(+AID S++,,rz   c                 :    | j                   D ]  }d |d<   d |d<    y )Nr   r   )r\   )rb   r   s     rm   reset_availabilityzServer.reset_availability  s)    )) 	GGAJGAJ	rz   c           
         t        ||      }|r*t        t              rt        t        |       t	        |      ||nd}dg}||g}n||dd }t        d      }d}| j                          | j                         D ]i  }	d}	 t        j                  |	dd  }
d}d}|D ]  }	 |
j                  ||f       d} n |s>t        t              rt        t        d	|||       t        d
j                  |||            | j                  r|
j                  | j                         n|
j                  |       	 |
j!                  |	d          	 |
j%                  t        j&                         |
j)                          	 |r6t        t,              rt        t,        d| |	       | j/                  |	d        |S | j/                  |	d       t        t              sXt        t        d| |	       l |S # t        $ r/}|}t        t              rt        t        d|||       Y d}~d}~ww xY w# t        j"                  $ r d}Y w xY w# t        j"                  $ r d}Y w xY w# |
j)                          w xY w# 	 |
j%                  t        j&                         n# t        j"                  $ r d}Y nw xY w|
j)                          w # |
j)                          w xY wxY w# t        j*                  $ r d}Y vw xY w)a  
        Tries to open, connect and close a socket to specified address and port to check availability.
        Timeout in seconds is specified in CHECK_AVAILABITY_TIMEOUT if not specified in
        the Server object.
        If specified, use a specific address, port, or list of possible ports, when attempting to check availability.
        NOTE: This will only consider multiple ports from the source port list if the first ones we try to bind to are
              already in use. This will not attempt using different ports in the list if the server is unavailable,
              as that could result in the runtime of check_availability significantly exceeding the connection timeout.
        Nrv   r   CHECK_AVAILABILITY_TIMEOUTFT   zFUnable to bind to local address <%s> with source port <%s> due to <%s>zZUnable to locally bind to local address <%s> with any of the source ports <%s> due to <%s>zUUnable to bind socket locally to address {} with any of the source ports {} due to {}   zserver <%s> available at <%r>z!server <%s> not available at <%r>)r-   r&   r'   r%   r   r   r   candidate_addressesrp   bind	Exceptionr*   r   r}   r_   
settimeoutconnectrs   shutdown	SHUT_RDWRcloser   r(   r   )rb   source_addresssource_portsource_port_listsource_port_errbind_addresscandidate_bind_portsconf_availability_timeoutr   r   temp_socketlast_bind_excsocket_bind_succeeded	bind_portbind_exs                  rm   check_availabilityzServer.check_availability   s    3;@PQ5!E?+&77 *8)C~ !"s "$/= )#3A#6 $89U$V!	!//1 9	SGI-"$mmWRa[9 !%(-%!5 	BIB#((,	)BC04-		B -"5)E#(*>O-  /F/5vlDXZg/hj j ''**4+?+?@**+DE
,''
3,#,,V-=-=> $))+ u%>gN(($7 	 ((%8u%BD'Rs9	Sv Q % B(/&w/)q ,iBB$ || & %I&
 "<< *$)	* $))+,#,,V-=-=>!<< *$)	* $))+))+?? "!	"s   K"G+7A<K4H&	I(K+	H#4$HKH##K&H>;I1=H>>I1IIIII..K1K3JJ?J+	(J?*J+	+J?.K?K	KKK0/K0c                  \   t         j                  5  t         xj                  dz  c_        t         j                  t        k\  rdt         _        t	        t
              rt        t
        dt         j                         ddd       t         j                  S # 1 sw Y   t         j                  S xY w)zM
        LDAP messageId is unique for all connections to same server
        r   znew message id <%d> generatedN)r1   _message_id_lock_message_counterr!   r&   r)   r%    rz   rm   next_message_idzServer.next_message_id~  s~    
 $$ 	X##q(#&&,6*+'8$H=v?V?VW	X &&&	X &&&s   A*BB+c                    |j                   j                  ry|j                   j                  s|j                  ddt        g dd      }|j                   j
                  r|\  }}}}n|}|j                  }|j                  }| j                  5  |j                   j                  r,|rt        |d   d   |d   d	         n| j                  | _        nO|rM|j                  |      \  }}t        |      d
k(  r+d|d   v r$d	|d   v rt        |d   d   |d   d	         | _        ddd       t        t              rt!        t        d| |       yyy# 1 sw Y   -xY w)zJ
        Retrieve DSE operational attribute as per RFC4512 (5.1).
        Nrv   (objectClass=*))	altServernamingContextssupportedControlsupportedExtensionsupportedFeaturessupportedCapabilitiessupportedLdapVersionsupportedSASLMechanisms
vendorNamevendorVersionsubschemaSubentryr9   +T)search_basesearch_filtersearch_scope
attributesget_operational_attributesr   r   raw_attributesr   zDSA info read for <%s> via <%s>)strategyno_real_dsapooledsearchr   thread_saferesultresponserY   syncr#   rW   get_responserK   r&   r(   r%   )rb   
connectionr   statusr   rh   resultss          rm   _get_dsa_infozServer._get_dsa_info  sp    **""))&&25F4838 CG! ' HF$ ""...4+!#**%.. i&&++jpWXa[-FQRTdHe%fvz  wE  wEDN!+!8!8!@JGQ7|q(\WQZ-GL\`ghi`jLj)0L1I7ST:VfKg)hi 5!E<dJO "E *4i is   BEEc                 R   |j                   j                  ryd}| j                  r|dk(  rt        | j                  j                  t
              r3| j                  j                  r| j                  j                  d   nd}n"| j                  j                  r| j                  j                  nd}n|j                  |dt        dgd      }|j                   j                  r|\  }}}}n|}|j                  }|j                  }|j                   j                  r2|rd|d   d   v r~t        |d   d   d         dkD  rg|d   d   d   d   }nX|j                  |      \  }}t        |      d	k(  r6d|d   v r/d|d   d
   v r%t        |d   d   d         dkD  r|d   d   d   d   }|ru|j                   j                  s]t        |t              rt         t        urt#        |d      }|j                  |dt        g dd      }|j                   j                  r|\  }}}}n|}|j                  }|j                  }| j$                  5  d| _        |r|j                   j                  rt)        ||d   d
   |d   d         | _        nN|j                  |      \  }}t        |      d	k(  r,d
|d   v r%d|d   v rt)        ||d   d
   |d   d         | _        | j&                  r!| j&                  j+                         sd| _        | j&                  r| j&                  j,                  D ]R  }	t/        | j&                  |	| j&                  j0                  |	   | j2                        | j&                  j,                  |	<   T | j                  rk| j                  j,                  D ]R  }	t/        | j&                  |	| j                  j0                  |	   | j2                        | j                  j,                  |	<   T ddd       t5        t6              rt9        t6        d| |       yyyy# 1 sw Y   .xY w)z
        Retrieve schema from subschemaSubentry DSE attribute, per RFC
        4512 (4.4 and 5.1); entry = '' means DSE.
        Nrv   r   r   r   T)r   r   r   r   r   )from_serverz(objectClass=subschema))objectClassesattributeTypesldapSyntaxesmatchingRulesmatchingRuleUsedITContentRulesdITStructureRules	nameFormscreateTimestampmodifyTimestampr9   )r   r   r   r   zschema read for <%s> via <%s>)r   r   rW   rN   schema_entryr   r   r   r   r   r   r   rK   r   r   rC   rB   r+   rY   rX   r"   is_validotherr    rawrZ   r&   r(   r%   )
rb   r   entryr   r   r   r   rh   r   	attributes
             rm   _get_schema_infozServer._get_schema_info  sq   
 **>>erk$..55~FAEA\A\t~~::1=bf>Bnn>Y>Yt~~::_c&&u.?SfRg  EI&  JF""...4+!#**%..""''1Xa[AQ5RR8A;'789LMNQRR'/{3C'DEX'YZ['\'44V<
w<1$)9WQZ)GL_cjklcmnzc{L{71:&678KLMPQQ'.qz2B'CDW'XYZ'[
 3 3 : :,.3e3C),DI&&|5N48
38 CG ' )F  ""...4+!#**%.. n$(!!**//,6|Xa[Q]E^`hij`kl|`},~)*4*A*A&*Iw<1,1KP`dklmdnPn0:<QRT`Iacjklcmn~c  1AD-((1B1B1K1K1M,0)(()-):):)@)@ pIAXY]YjYjluw{  xI  xI  xM  xM  NW  xX  Z^  Zo  Zo  BpD--33I>p>>-1^^-A-A n	BYZ^ZkZkmvx|  yG  yG  yK  yK  LU  yV  X\  Xm  Xm  Cn 4 4Y ?nn" 5!E:D*M "U !;<2n ns   F)PP&c                    |r`|j                   sT| j                  t        t        fv r| j	                  |       | j                  t
        t        fv r| j                  |       yy| j                  t        k(  rQddlm	}m
} | j                  t        j                  |             | j                  t        j                  |             y| j                  t         k(  rQddlm}m} | j                  t        j                  |             | j                  t        j                  |             y| j                  t(        k(  rQddlm}m} | j                  t        j                  |             | j                  t        j                  |             y| j                  t0        k(  rQddlm}m}	 | j                  t        j                  |             | j                  t        j                  |	             y| j                  t8        k(  rQddlm}
m} | j                  t        j                  |
             | j                  t        j                  |             yy)z8
        reads info from DSE and from subschema
        r   )edir_8_8_8_schemaedir_8_8_8_dsa_info)edir_9_1_4_schemaedir_9_1_4_dsa_info)ad_2012_r2_schemaad_2012_r2_dsa_info)slapd_2_4_schemaslapd_2_4_dsa_info)ds389_1_3_3_schemads389_1_3_3_dsa_infoN) closedrV   r   r
   r   r	   r   r   protocol.schemas.edir888r   r   attach_schema_infor"   	from_jsonattach_dsa_infor#   r   protocol.schemas.edir914r   r   r   protocol.schemas.ad2012R2r   r   r   protocol.schemas.slapd24r   r   r   protocol.schemas.ds389r   r   )rb   r   r   r   r   r   r   r   r   r   r   r   s               rm   ra   zServer.get_info_from_server  s    j//}}c
*"":.}}-))*5 .]]00Y##J$8$89J$KL  !2!23F!GH]]00Y##J$8$89J$KL  !2!23F!GH]]00Z##J$8$89J$KL  !2!23F!GH]]//W##J$8$89I$JK  !2!23E!FG]]11Y##J$8$89K$LM  !2!23G!HI 2rz   c                 v    t        |t              r)|| _        t        t              rt        t        d|        y y y )Nz attached DSA info to Server <%s>)rN   r#   rW   r&   r(   r%   )rb   dsa_infos     rm   r   zServer.attach_dsa_info#  s2    h(%DN5!E=tD " )rz   c                 t    t        |t              r|| _        t        t              rt        t        d|        y y )Nz#attached schema info to Server <%s>)rN   r"   rX   r&   r(   r%   )rb   
dsa_schemas     rm   r   zServer.attach_schema_info)  s.    j*- *Du<dC rz   c                     | j                   S N)rW   rb   s    rm   infozServer.info/  s    ~~rz   c                     | j                   S r  )rX   r  s    rm   schemazServer.schema3  s       rz   c                 N   t        | t              rt        | d   ||||t              }nt        | ||||t              }t        |t              r||_        n+t        |t              r	 t	        j                  |      |_        |j                  s+t        t              rt        t        d|        t        d      t        |t              r||_        n+t        |t              r	 t        j                  |      |_        |j"                  s+t        t              rt        t        d|        t        d      t        t$              rt        t$        d|       |S # t        $ r t	        j                  |      |_        Y w xY w# t        $ r t        j                  |      |_        Y w xY w)a  
        Define a dummy server with preloaded schema and info
        :param host: host name
        :param dsa_info: DsaInfo preloaded object or a json formatted string or a file name
        :param dsa_schema: SchemaInfo preloaded object or a json formatted string or a file name
        :param port: fake port
        :param use_ssl: use_ssl
        :param formatter: custom formatters
        :return: Server object
        r   )r@   rE   rc   rd   re   rV   zinvalid DSA info for %szinvalid dsa infozinvalid schema info for %szinvalid schema infoz#created server <%s> from definition)rN   r   r1   r
   r#   rW   r   r   r   	from_filer  r&   r'   r%   r   r"   rX   r	  r(   )r@   r  r  rE   rc   rd   re   dummys           rm   from_definitionzServer.from_definition7  s[    dN+QdGydmx{|E4IajuxyEh(&EO,/>")"3"3H"= zz5!E4d;%&899j*-!+E
L1F%/%9%9*%E" ||5!E7>%&;<<u<eD1  >")"3"3H"=>  F%/%9%9*%E"Fs$   (E "E> #E;:E;>#F$#F$c           	         t        d      }| j                  r9| j                  }t        t              rt        t        d| | j                         |S | j                  D ]:  }|d   s	t        j                         |d   z
  j                  |kD  s1d |d<   d |d<   < | j                  d d  }g }|r| j                  t        k(  r|j                  |d          n| j                  t        k(  r3|D cg c]&  }|d   t        j                  k(  s|d   s|d   %|( }}ne| j                  t         k(  r3|D cg c]&  }|d   t        j"                  k(  s|d   s|d   %|( }}n| j                  t$        k(  rg|D cg c]&  }|d   t        j                  k(  s|d   s|d   %|( }}||D cg c]&  }|d   t        j"                  k(  s|d   s|d   %|( c}z  }n| j                  t&        k(  rg|D cg c]&  }|d   t        j"                  k(  s|d   s|d   %|( }}||D cg c]&  }|d   t        j                  k(  s|d   s|d   %|( c}z  }n+t        t(              rt        t(        d|        t+        d      t        t              r'|D ]"  }t        t        d| |d d	 | j                         $ |S c c}w c c}w c c}w c c}w c c}w c c}w )
NRESET_AVAILABILITY_TIMEOUTz6candidate address for <%s>: <%s> with mode UNIX_SOCKETr   r   r   zinvalid server mode for <%s>zinvalid server modez6obtained candidate address for <%s>: <%r> with mode %sr   )r   r<   r   r&   r(   r%   rU   r   r   r   r`   r   rR   r   rp   r   r   rr   r   r   r'   r   )rb   conf_reset_availability_timeout
candidatesr   r   	candidates         rm   r   zServer.candidate_addressesf  s[   *>?[*\'88**J5!ESUY[_[d[de@ ;  ,, &1:HLLNWQZ$?#H#HKj#j!%GAJ!%GAJ& ))!,IJ99 11%%il3YY*,9B  "KggajTZTbTbFbhopqhrv}~  wA  wI'  "KJ  "KYY*,9B  "LggajTZTcTcFcipqrisw~  @A  xB  xJ'  "LJ  "LYY/19B  "KggajTZTbTbFbhopqhrv}~  wA  wI'  "KJ  "K)  #MwwqzU[UdUdGdjqrsjtx  AB  yC  yK7  #M  MJYY/19B  "LggajTZTcTcFcipqrisw~  @A  xB  xJ'  "LJ  "L)  #LwwqzU[UcUcGcipqrisw~  @A  xB  xJ7  #L  LJ"5)E#A4H01FGG5!!+ zIWY]_hiljl_mosoxoxyz# "K "L "K #M "L #Lsl   .J:

J:J:4J?
J?J?:K
K!K,K	
K	K	4K
KK&K
KKc                 f   | j                   st        d      |dk(  r| j                  j                  }nC|dk(  r| j                  j                  }n'|dk(  r| j                  j
                  }nt        d      |D ]6  }||d   k(  s+|d   s|j                         |d   j                         k(  s6 y y	)
Nzserver info not loadedcontrol	extensionfeaturezinvalid info categoryr   r   TF)rW   r   r  supported_controlssupported_extensionssupported_featuresr>   )rb   kindrU   
propertiesprops        rm   _check_info_propertyzServer._check_info_property  s    ~~ 899955J[ 77JY55J 788 	 D47?tAw4::<47==?3R	  rz   c                 &    | j                  d|      S )Nr  r  )rb   r  s     rm   has_controlzServer.has_control      ((G<<rz   c                 &    | j                  d|      S )Nr  r  )rb   r  s     rm   has_extensionzServer.has_extension  s    ((i@@rz   c                 &    | j                  d|      S )Nr  r  )rb   r  s     rm   has_featurezServer.has_feature  r!  rz   )NNN)rv   r  )NFNN)!__name__
__module____qualname____doc__r   r   r   r	   r   rn   staticmethodrJ   rx   r   propertyr   r   r   r   r   r   r   ra   r   r   r  r	  r  r   r  r   r#  r%  r   rz   rm   r1   r1   5   s     v (, !%%C:J  	 '" '"R
\| ' '*PXKNZJ<ED   ! ! , ,\%N&=A=rz   r1   )<r)  rp   	threadingr   r   r   rv   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
exceptionsr   r   r   r   r   r   protocol.formatters.standardr    protocol.rfc4511r!   protocol.rfc4512r"   r#   rT   r$   	utils.logr%   r&   r'   r(   r)   r*   
utils.convr+   utils.port_validatorsr,   r-   urllib.parser.   ImportErrorurllibr/   rA   rw   r1   r   rz   rm   <module>r7     s   2   & K  K  K  K  K `  ` B + 2  I I # H$" 
r	=V r	=    "!"s$   B B0 B-,B-0B:9B: