
    >OOf3                     z    d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZ dd	lmZmZmZmZ  G d
 de      Zy)
    )sleepN   )get_config_parameter   )SyncStrategy)LDAPSocketOpenErrorLDAPOperationResultLDAPMaximumRetriesErrorLDAPStartTLSError)loglog_enabledERRORBASICc                   N    e Zd Zd ZddZddZddZd Zd Zd Z	d	 Z
d
 Zd Zy)RestartableStrategyc                 
   t        j                  | |       d| _        d| _        d| _        d| _        t        d      | _        t        d      | _        d| _	        d | _
        d | _        d | _        d | _        d | _        g | _        y )NTFRESTARTABLE_SLEEPTIMERESTARTABLE_TRIES)r   __init__syncno_real_dsapooled
can_streamr   restartable_sleep_timerestartable_tries_restarting_last_bind_controls_current_message_type_current_request_current_controls_restart_tlsexception_history)selfldap_connections     [/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/ldap3/strategy/restartable.pyr   zRestartableStrategy.__init__%   s    dO4	 &:;R&S#!56I!J #' %)" $!% !#    c                 2    t        j                  | ||       y N)r   open)r$   reset_usageread_server_infos      r&   r*   zRestartableStrategy.open5   s    $-=>r'   c                    	 t        j                  | |||       | j                          y# t        $ r^}t	        t
              rEt        t
        d|| j                         | j                   t        |      t        |                   Y d}~nd}~ww xY w| j                  sd| _        | j                  }|dkD  rt	        t              r)t        t        d| j                  |z
  | j                         t        | j                         | j                  j                   s	 | j                  j#                          n# t$        j&                  t(        f$ r Y nit        $ r^}t	        t
              rt        t
        d|| j                         | j                   t        |      t        |                   Y d}~nd}~ww xY w	 | j                  j*                  r| j                  j*                  j-                  | j                        }| j                  j.                  |k7  rP|| j                  _        | j                  j0                  r)| j                  j2                  xj4                  dz  c_        t        j                  | |||       | j                  j0                  r)| j                  j2                  xj6                  dz  c_        d| j                  _        d| _        | j                          y# t        $ r}t	        t
              rt        t
        d|| j                         | j                   t        |      t        |                   | j                  j0                  r)| j                  j2                  xj8                  dz  c_        Y d}~nd}~ww xY wt;        | j                  t<              s|dz  }|dkD  rd| _        d| j                  _        t	        t
              r0t        t
        d	| j                  j>                  | j                         tA        | j                  j>                  | jB                  | j                        y)
z
        Try to open and connect a socket to a Server
        raise LDAPExceptionError if unable to open or connect socket
        if connection is restartable tries for the number of restarting requested or forever
        N<%s> while restarting <%s>Tr   z+try #%d to open Restartable connection <%s>r   Fz;restartable connection strategy failed while opening socket<%s> for <%s>)"r   _open_socket_reset_exception_history	Exceptionr   r   r   
connection_add_exception_to_historytypestrr   r   r   r   r   closedunbindsocketerrorr	   server_pool
get_serverserverusage_usageservers_from_poolrestartable_successesrestartable_failures
isinstancebool
last_errorr   r#   )r$   addressuse_sslunix_socketecounter
new_servers          r&   r0   z RestartableStrategy._open_socket8   s-   	@%%dGWkJ))+ 	@5!E7DOOL..wtAws1v?	@
 #D,,GA+u%LdNdNdgnNnptpp  Ad112--H..0"LL*=> $ H&u-'CQX66wtAws1vGGHI22%)__%@%@%K%KDOO%\
??11Z?5?DOO2#44 $ 6 6 H HA M H --dGWkR,,..DDID-2DOO*',D$113  I"5)E#?DOOT227473q6?C,,..CCqHCI "$"8"8$?qLGE A+F  %D)fDOO&5!E?DOO,F,FX)$//*D*DdF\F\^b^t^tuuU  sN   (+ 	BABBD: :F;F;AF66F;?D-K- -	N6BNNNc                 `   || _         || _        || _        | j                  s| j                  j
                  | _        |dk(  r|| _        	 t        j                  | |||      }| j                          |S # t        $ r^}t        t              rt        t        d|| j                         | j                   t        |      t!        |                   Y d }~nd }~ww xY w| j"                  s@d| _        | j$                  }|dkD  r t        t&              r)t        t&        d| j$                  |z
  | j                         t)        | j*                         | j                  j,                  s	 | j                  j/                          n# t0        j2                  t4        f$ r Y nit        $ r^}t        t              rt        t        d|| j                         | j                   t        |      t!        |                   Y d }~nd }~ww xY wd}	 | j                  j7                  dd       | j                  r| j                  j9                  d      szd	| j                  j:                  rd
| j                  j:                  z   ndz   }t        t              rt        t        d||        | j                  j/                          t=        |      |dk7  r'| j                  j?                  d| j                         | j                  j@                  jB                  s;| j                  j@                  jD                  s| j                  jG                          n| j                  jI                  d       nl# t        $ r`}t        t              rt        t        d|| j                         | j                   t        |      t!        |                   d}Y d }~nd }~ww xY w|s	 | j                  j                  |||      }	| j                  jJ                  r)| j                  jL                  xjN                  dz  c_'        d| _        | j                          |	S # t        $ r`}t        t              rt        t        d|| j                         | j                   t        |      t!        |                   d}Y d }~nd }~ww xY w|r?| j                  jJ                  r)| j                  jL                  xjP                  dz  c_(        tS        | j$                  tT              s|dz  }|dkD  r d| _        d| j                  _        t        t              r0t        t        d| j                  j:                  | j                         tW        | j                  j:                  | jX                  | j$                        )NbindRequestr.   Tr   z.try #%d to send in Restartable connection <%s>F)r+   r,   )r,   z)restart tls in restartable not successfulz -  z%s for <%s>)r,   controls)	read_infor   z%restartable connection failed to sendr/   )-r   r    r!   r"   r3   tls_startedr   r   sendr1   r2   r   r   r   r4   r5   r6   r   r   r   r   r   r7   r8   r9   r:   r	   r*   	start_tlsrE   r   bindr=   schemainforefresh_server_info_fire_deferredr>   r?   rA   rB   rC   rD   r   r#   )
r$   message_typerequestrO   
message_idrI   rJ   failurer:   	ret_values
             r&   rR   zRestartableStrategy.sends   s}   %1" '!)   $ ; ;D=('/D$	<%**4wQJ))+ 	<5!E7DOOL**7473q6?;;	< #D,,GA+u%OQUQgQgjqQqsw  tC  tC  Dd112--H..0"LL*=> $ H&u-'CQX66wtAws1vGGH  #OO((UU(S((#88%8P$Oy}  zI  zI  zT  zTSX[_[j[j[u[uSu  Z\  %]E*51 #E=% F OO224"3E"::#}4,,edNfNf,g??1188AWAWA\A\;;=666G  #"5)E#?DOOT227473q6?C"G	# '$(OO$8$8wPX$Y	??00 OO22HHAMH+0(557(($ '&u-'CQX66wtAws1vG"&	' t44OO**??1D?!$"8"8$?qLGk A+n  %D%L"u(B(BDOOT%doo&@&@$BXBXZ^ZpZpqqsl   
)A4 4	C=ACC(F HH&AG??H
E"M- -	O6AOOA4Q 	R:AR55R:c                 d   	 t        j                  | |      }| j                          |S # t        $ r^}t	        t
              rt        t
        d|| j                         | j                   t        |      t        |                   Y d }~nd }~ww xY w	 t        j                  | | j                  | j                  | j                  | j                              }| j                          |S # t        $ r}t	        t
              rt        t
        d|| j                         | j                   t        |      t        |                   t        |t               sd| j                  _        t	        t
              r0t        t
        d| j                  j"                  | j                          d }~ww xY w)Nr.   zCrestartable connection strategy failed in post_send_single_responser/   )r   post_send_single_responser1   r2   r   r   r   r3   r4   r5   r6   rR   r   r    r!   rC   r
   rE   r$   r[   r]   rI   s       r&   r_   z-RestartableStrategy.post_send_single_response   s_   	<$>>tZPI))+ 	<5!E7DOOL**7473q6?;;	<	$>>tTYYtOiOiko  lA  lA  CG  CY  CY  FZ  [I))+ 	5!E7DOOL**7473q6?;a!45-r*5!E?DOO,F,FX	s/   '* 	BABBAC, ,	F/5B5F**F/c                    	 t        j                  | |      }| j                          |S # t        $ r^}t	        t
              rt        t
        d|| j                         | j                   t        |      t        |                   Y d }~nd }~ww xY w	 t        j                  | | j                  j                  | j                  | j                  | j                              }| j                          |S # t        $ r}t	        t
              rt        t
        d|| j                         | j                   t        |      t        |                   t        |t               s|j"                  | j                  _        t	        t
              r0t        t
        d| j                  j$                  | j                         |d }~ww xY w)Nr.   r/   )r   post_send_searchr1   r2   r   r   r   r3   r4   r5   r6   rR   r   r    r!   rC   r
   argsrE   r`   s       r&   rb   z$RestartableStrategy.post_send_search   sk   	<$55dJGI))+ 	<5!E7DOOL**7473q6?;;	<	$55dDOO<P<PQUQkQkmq  nC  nC  EI  E[  E[  =\  ]I))+ 	5!E7DOOL**7473q6?;a!45-.VV*5!E?DOO,F,FXG	s/   '* 	BABBA C6 6	G?C F??Gc                     t        | j                  t              s-t        |t              s| j                  j                  |       y y y r)   )rC   r   rD   r   r#   append)r$   excs     r&   r4   z-RestartableStrategy._add_exception_to_history   s;    $00$7c#:;&&--c2 < 8r'   c                 ,    | j                   rg | _         y y r)   )r#   r$   s    r&   r1   z,RestartableStrategy._reset_exception_history   s    !!%'D" "r'   c                     t         r)   NotImplementedErrorrh   s    r&   
get_streamzRestartableStrategy.get_stream       !!r'   c                     t         r)   rj   )r$   values     r&   
set_streamzRestartableStrategy.set_stream  rm   r'   )FT)FFr)   )__name__
__module____qualname__r   r*   r0   rR   r_   rb   r4   r1   rl   rp    r'   r&   r   r   $   s9    $ ?9vvPrd223
(""r'   r   )__doc__timer   r9   rN   r   r   r   core.exceptionsr	   r
   r   r   	utils.logr   r   r   r   r   rt   r'   r&   <module>ry      s2   2   #  r r 6 6`", `"r'   