
    !niK                         e d       ZddlmZ  ee e        ee             ddlZddlmZm	Z	 ddl
mZmZmZ ddlmZmZ ddlmZmZ dd	lmZ  e d
      Zej.                  Zej0                  Zg dZej6                  Zej:                  Zej>                  dd dk(  Z ej:                  jB                  Z"ed        Z# G d de      Z$e$Zd Z! G d de      Z%e%Z e&ed      rejN                  Z(d Z)e)Z'e)Z*yy)ssl    )slurp_properties)srckeysN)greeniohubs)GreenSocketCONNECT_ERRCONNECT_SUCCESS)
trampolineIOClosed)	get_errnoPY33)contextmanagersocket)	SSLSocket
SSLContextwrap_socketsslwrap_simplecreate_default_context_create_default_https_context   )      c               /     K   t         j                  j                  dd       }t        j                  j                  j                  dd       }t        t        j                  j                  d<   t
        t         j                  d<   	 d  |t         j                  d<   |t        j                  j                  d<   y # |t         j                  d<   |t        j                  j                  d<   w xY ww)Nr   r   )_original_wrap_socket__globals__get_original_sslsocket_create_original_sslcontext)argskwargstmp_sslcontexttmp_sslsockets       R/home/homepc/tiktok-worker/venv/lib/python3.12/site-packages/eventlet/green/ssl.py_original_ssl_contextr&      s     *66::<NN'//;;??TRM;N++K86J%%l3M:H)),7?L##//< ;I)),7?L##//<s   BC0B; 
1C0;2C--C0c                        e Zd ZdZddddeeddfdZed        ZdddeeddfdZ	d Z
d	 Zd
 Zd Z fdZd fd	Zd fd	ZddZddZddZddZd dZd fd	Zd fd	Z fdZ fdZd Zd Zd Zd Z xZS )!GreenSSLSocketa   This is a green version of the SSLSocket class from the ssl module added
    in 2.6.  For documentation on it, please see the Python standard
    documentation.

    Python nonblocking ssl objects don't give errors when the other end
    of the socket is closed (they do notice when the other end is shutdown,
    though).  Any write/read operations will simply hang if the socket is
    closed from the other end.  There is no obvious fix for this problem;
    it appears to be a limitation of Python's ssl object implementation.
    A workaround is to set a reasonable timeout on the socket using
    settimeout(), and to close/reopen the connection when a timeout
    occurs at an unexpected juncture in the code.
    NFTc	                    t        |t              st        |      }t               5  |
j                  d      }|rUt        j                  |j                  |d|
j                  dd      |
j                  d      ||
j                  d            }n3| j                  |j                  ||||||d|
j                  d      		      }d d d        |_        ||_	        ||_
        ||_        ||_        t        |_        |S # 1 sw Y   9xY w)
N_contextFsuppress_ragged_eofsTserver_hostnamesession)sockserver_sidedo_handshake_on_connectr+   r,   contextr-   ciphers)	r.   keyfilecertfiler/   	cert_reqsssl_versionca_certsr0   r2   )
isinstancer   r&   r   r   r   fd_wrap_socketr3   r4   r5   r6   r7   r(   	__class__)clsr.   r3   r4   r/   r5   r6   r7   r0   r!   kwr1   rets                r%   __new__zGreenSSLSocket.__new__8   s    $,t$D"$ 	ffZ(G)11 +,1)+0F)M$&FF+<$=#FF9- 2  &&#% +' +%,1FF9- ' 
	0 !%&
=	 	s   BC::Dc	                     t        |      }	|	xj                  |z  c_        |s|r|	j                  ||       |r|	j                  |       |r|	j	                  |       |	j                  | ||      S )N)protocol)r4   r3   )r.   r/   r0   )r    optionsload_cert_chainload_verify_locationsset_ciphersr   )
r.   r3   r4   r/   r5   r6   r7   r0   r2   r1   s
             r%   r:   zGreenSSLSocket._wrap_socket^   s     '<9$w##! $  ))(3(""#$; # 
 	
    c	                    t        |t              st        |      }|j                  | _        	 t        j                  D ]  }t        | |        	 |j                         | _        t        j                  | d       t        j                  |       dk(  sJ || _        |r| j                  r| j                          y y y # t        $ r Y xw xY w)N        )r8   r   act_non_blockingorig_socket_delegate_methodsdelattrAttributeError
gettimeout_timeoutr   
settimeoutr0   
_connecteddo_handshake)selfr.   r3   r4   r/   r5   r6   r7   r0   r!   r=   fns               r%   __init__zGreenSSLSocket.__init__t   s     $,t$D $ 5 5	!33 "b!" ) 	&&tS1"--d3s::: (?$"t (7"  		s   !B= =	C	C	c                     || _         y NrO   )rS   timeouts     r%   rP   zGreenSSLSocket.settimeout   s	    rF   c                     | j                   S rW   rX   rS   s    r%   rN   zGreenSSLSocket.gettimeout   s    }}rF   c                 B    |rd| _         d | _        y d| _         d| _        y )NFTrH   )rI   rO   )rS   flags     r%   setblockingzGreenSSLSocket.setblocking   s#    $)D! DM$(D!DMrF   c           	         | j                   r ||i |S 	 	  ||i |S # t        $ r}t        |      t        k(  r't	        | d| j                         t        d             nWt        |      t        k(  r't	        | d| j                         t        d             nt        rd|j                  d   v rt         Y d }~nd }~ww xY w)NT	timed outreadrY   timeout_excwriterY   rc   zunexpected eof   )rI   SSLErrorr   SSL_ERROR_WANT_READr   rN   rc   SSL_ERROR_WANT_WRITE
_is_py_3_7r!   r   )rS   funcar=   excs        r%   _call_trampoliningz!GreenSSLSocket._call_trampolining   s      >b>!>b>)  ~)<<"4(,+/??+</:;/GI #3+??"4)-+/??+</:;/GI $(8CHHQK(G '# s    	CBB==Cc                 8    | j                  t        |   |      S )zhWrite DATA to the underlying SSL channel.  Returns
        number of bytes of DATA actually transmitted.)rn   superre   )rS   datar;   s     r%   re   zGreenSSLSocket.write   s!     &&GM4! 	!rF   c                 b    	 | j                  t        |   ||      S # t        $ r |Y yY yw xY w)zORead up to LEN bytes and return them.
        Return zero-length string on EOF.rF   r   )rn   rp   rb   r   )rS   lenbufferr;   s      r%   rb   zGreenSSLSocket.read   s@    	**c6+ + 	~		s    ..c                     | j                   r| j                  t        |   ||      S t	        | dt        d             t        j                  | ||      S )NTr`   re   rc   )_sslobjrn   rp   sendr   rc   r   )rS   rq   flagsr;   s      r%   rx   zGreenSSLSocket.send   sN    <<**dE+ + t4[5MN;;tT511rF   c                     | j                   rt        d| j                  z        t        | dt	        d             t
        j                  | |||      S )Nz%sendto not allowed on instances of %sTr`   rv   )rw   
ValueErrorr;   r   rc   r   sendto)rS   rq   addrry   s       r%   r|   zGreenSSLSocket.sendto   sM    <<D!^^, - - t4[5MN==tT599rF   c           	      6   | j                   rq|dk7  rt        d| j                  z        t        |      }d}|}||k  r>| j	                  |      }||z  }|dk(  rt        | dt        d             n||d  }||k  r>|S 	 	 t        j                  | ||      S # t        j                  $ rn}| j                  r t        |      }|t        j                  v r't        | d| j                         t        d              |t        j                   v rY d }~y d }~ww xY w)Nr   z6non-zero flags not allowed in calls to sendall() on %sTr`   rv   rd    )rw   r{   r;   rs   rx   r   rc   r   sendallrJ   errorrI   r   r   SOCKET_BLOCKINGrN   SOCKET_CLOSED)	rS   rq   ry   amountcountdata_to_sendveernos	            r%   r   zGreenSSLSocket.sendall   s    <<z LNN#$ $ YFEL6>IIl+
6t4[=UV#'<L 6> M!>>$e<<"(( 	,,$Q<Dw666"4t+/??+<+VaJbd  !6!66!	s    B D*A#DDDc                 *    | j                  ||d      S )NF)into)
_base_recv)rS   buflenry   s      r%   recvzGreenSSLSocket.recv   s    vu599rF   c                 T    |r|t        |      }n|d}| j                  ||d|      S )N   T)r   buffer_)rs   r   )rS   rt   nbytesry   s       r%   	recv_intozGreenSSLSocket.recv_into  s5    fn[F^F vu4HHrF   c           	      r   |rt         j                  }nt         j                  }| j                  rQ|dk7  r#t	        d|j
                  z  | j                        |r| j                  ||      }|S | j                  |      }|S 	 	 | ||g}|r|j                  d|        || S # t        j                  $ r}| j                  r t        |      }	|	t        j                  v r;	 t        | d| j!                         t#        d              # t$        $ r Y Y d }~yw xY w|	t        j&                  v rY d }~y d }~ww xY w)Nr   z1non-zero flags not allowed in calls to %s() on %sTrf   r`   ra   rF   )r   r   r   rw   r{   __name__r;   rb   insertrJ   r   rI   r   r   r   r   rN   rc   r   r   )
rS   r   ry   r   r   plain_socket_functionrb   r!   r   r   s
             r%   r   zGreenSSLSocket._base_recv  s>   $*$4$4!$*KK! <<z G)22348NND D yy1 K yy(K &%0DAw/0$77"(( ,,$Q<Dw666'& $4(,(9{S^G_a 	  ( '#&'!6!66"sB   B! !D64*D1&DD1	DD1DD10D11D6c                     | j                   s&t        | d| j                         t        d             t        |   |||      S NTr`   ra   )rI   r   rN   rc   rp   recvfrom)rS   r}   r   ry   r;   s       r%   r   zGreenSSLSocket.recvfrom2  s=    $$t$0A#.{#;=wfe44rF   c                     | j                   s&t        | d| j                         t        d             t        |   |||      S r   )rI   r   rN   rc   rp   recvfrom_into)rS   rt   r   ry   r;   s       r%   r   zGreenSSLSocket.recvfrom_into8  s=    $$t$0A#.{#;=w$VVU;;rF   c                 H    t        | j                  t        |               S rW   )r   rn   rp   unwraprS   r;   s    r%   r   zGreenSSLSocket.unwrap>  s$    422GN  	rF   c                 6    | j                  t        |         S )zPerform a TLS/SSL handshake.)rn   rp   rR   r   s    r%   rR   zGreenSSLSocket.do_handshakeB  s    &&G " 	"rF   c           	         t         j                  }| j                  r	 || |      S t        j                         j
                  }| j                         	 	  || |      S  |       | j                         z   }	 	  || |        |       |k\  rt        d       # t        j                  $ r@}t        |      t        v rt        | d       nt        |      t        v rY d }~y  Y d }~nd }~ww xY w# t        j                  $ rS}t        |      t        v r!t        | d| |       z
  t        d             nt        |      t        v rY d }~y  Y d }~d }~ww xY w)NT)re   r`   rd   )r   connectrI   r   get_hubclockrN   rJ   r   r   r	   r   r
   rc   )rS   r}   real_connectr   rm   ends         r%   _socket_connectzGreenSSLSocket._socket_connectG  s>   ~~  d++LLN((E  ("+D$77 g 11
"$T40 w#~)+66  ',, "$S>[8&t48&s^>"!	 9"  ',, "$S>[8& $D(+eg;{C[] 's^>"!]"s=   B 9	C/ C++0C& C&&C+/EAE
EEc           	      <   | j                   rt        d      | j                  |       d}	 t        j                  } || j
                  || j                  | j                  | j                  | j                  | j                  g| j                   }	 t$         || _         | j(                  r| j+                          yy# t        $ r? t        r| j                  n| j                  }|j!                  | || j"                        }Y sw xY w# t&        $ r
 || _         Y {w xY w)zQConnects to remote ADDR, and then wraps the connection in
        an SSL channel.z/attempt to connect already-connected SSLSocket!F)r,   N)rw   r{   r   _sslsslwrap_sockr3   r4   r5   r6   r7   r2   rM   r   r1   r*   r:   r,   	SSLObject	NameErrorr0   rR   )rS   r}   r/   r   sslobjr1   s         r%   r   zGreenSSLSocket.connectk  s    
 <<NOOT"		;llG TZZdllDMM!^^T-=-=!]];-1\\;F	" "DL'' (#  	c&*dllG))$TMaMa)bF	c  	"!DL	"s$   B= D =ADDDDc           	         | j                   rt        j                  |       \  }}n	 	 t        j                  |       \  }}	  t        |       |dd| j                  | j                        }||fS # t        j                  $ rL}t        |      t        j                  vr t        | d| j                         t        d             Y d}~nd}~ww xY w)zAccepts a new connection from a remote client, and returns
        a tuple containing that new connection wrapped with a server-side
        SSL channel, and the address of the remote client.Tr`   ra   NF)r/   r0   r+   r*   )rI   r   acceptrJ   r   r   r   r   r   rN   rc   typer+   r*   )rS   newsockr}   r   new_ssls        r%   r   zGreenSSLSocket.accept  s    
   "MM$/MGTE$*MM$$7MGT $t*$)!%!:!:]]
  #(( E |7+B+BBt$8I+6{+CE EE	 s   A/ /CAC		Cc                     t        d      )NzCan't dup an ssl object)NotImplementedErrorr[   s    r%   dupzGreenSSLSocket.dup  s    !";<<rF   )r   N)r   )r   r   )Nr   rW   )r   
__module____qualname____doc__	CERT_NONEPROTOCOL_TLSr?   staticmethodr:   rU   rP   rN   r^   rn   re   rb   rx   r|   r   r   r   r   r   r   r   rR   r   r   r   r   __classcell__r;   s   @r%   r(   r(   *   s     t!Y(4(,$L 
 
* &*D"i)D)- <  4!
2:B:I%N5<"
"7H >6=rF   r(   c                      t        | g|i |S rW   r(   )r.   rl   r=   s      r%   r   r     s    $))b))rF   c                       e Zd ZdZd Z eej                  d      rej                  j                   fd       Zej                  j                   fd       Z	ej                  j                   fd       Z
 eed      rej                  j                   fd       Z eed	      r"ej                  j                   fd
       Z xZS  xZS  xZS )GreenSSLContext c                 $    t        |g|d| i|S )Nr*   r   )rS   r.   rl   r=   s       r%   r   zGreenSSLContext.wrap_socket  s    d<Q<<<<rF   setterc                 J    t         t        t        
  j                  | |       y rW   )rp   r    rB   __set__rS   valuer;   s     r%   rB   zGreenSSLContext.options  s    &(<EMMdTYZrF   c                 J    t         t        t        
  j                  | |       y rW   )rp   r    verify_flagsr   r   s     r%   r   zGreenSSLContext.verify_flags  s    &(<JRRSWY^_rF   c                 J    t         t        t        
  j                  | |       y rW   )rp   r    verify_moder   r   s     r%   r   zGreenSSLContext.verify_mode  s    &(<IQQRVX]^rF   maximum_versionc                 J    t         t        t        
  j                  | |       y rW   )rp   r    r   r   r   s     r%   r   zGreenSSLContext.maximum_version      *,@QYYZ^`efrF   minimum_versionc                 J    t         t        t        
  j                  | |       y rW   )rp   r    r   r   r   s     r%   r   zGreenSSLContext.minimum_version  r   rF   )r   r   r   	__slots__r   hasattrr    rB   r   r   r   r   r   r   r   s   @r%   r   r     s    I=
 #++X6 
	%	%	,	,	[ 
-	[ 
	*	*	1	1	` 
2	` 
	)	)	0	0	_ 
1	_ '):;!1188g 9g '):;!1188g 9g </ 7rF   r   r   c                  2    t        | i |}t        |_        |S rW   ) _original_create_default_contextr   r;   )rl   r=   r1   s      r%   green_create_default_contextr     s     
 3A<<+rF   )+
__import____ssleventlet.patcherr   globalsdirsyseventletr   r   eventlet.greenior   r	   r
   eventlet.hubsr   r   eventlet.supportr   r   
contextlibr   rJ   r   rY   rc   __patched__r   r   r   r    version_inforj   r   r   r&   r(   r   r   r   r   r   r   r   rF   r%   <module>r      s!  5 - 	3u: 6 
 "  / , %"			!!? oo '' bq!V+
((44  	M 	M|=( |=~ 	*"g* "gJ 

 5*+','C'C$ :$@! ,rF   