
    PhAO                         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mZ ddlmZmZ ddlmZmZ ddlZdd	lmZ  e d
      Zej2                  ZeZg dZej:                  Zej>                  Z  e!edd      Z"ejF                  dk  Z$ed        Z% G d de      Z&e&Zd Z e'ed      rddZ( e'ed      r7ejR                  Z" G d de"      Z*e*Z) e'ed      rejV                  Z,d Z-e-Z+e-Z.yyy)ssl    )slurp_properties)srckeysN)greeniohubs)set_nonblockingGreenSocketCONNECT_ERRCONNECT_SUCCESS)
trampolineIOClosed)	get_errnoPY33)contextmanagersocket)	SSLSocket
SSLContextwrap_socketsslwrap_simplecreate_default_context_create_default_https_contextr   )      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       ]C:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\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 fd	Zdddeeddf fd	Zd Zd Z	d	 Z
d
 Z fdZ 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	                 4   t         rt        t        |   |       S t	        |t
              st        |      }t               5  |
j                  d      }|rUt        j                  |j                  |d|
j                  dd      |
j                  d      ||
j                  d            }n-t        |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   )_is_under_py_3_7superr(   __new__
isinstancer	   r&   r   r   r   fdr   r3   r4   r5   r6   r7   	__class__)clsr.   r3   r4   r/   r5   r6   r7   r0   r!   kwr1   retr=   s                r%   r:   zGreenSSLSocket.__new__9   s    5c::dK0"4(&(&&,-55!WW$/05-/VV4JD-Q(*/@(A ' "y 1 6 C 0!WW '!)$/"+$/!)05 "y 1
C )0 "CK#CL%CM)CO#CL*CMJ= )(s    BDDc	                    t        |t              st        |      }|j                  | _        t        j                  r|j                         | _        t        r:t        t        | *  |j                  |||||||xr t        j                  g|	i |
 	 t        j                  D ]  }t        | |        	 t        j                   rm|j                         | _        t"        j%                  | d       t"        j                  |       dk(  sJ || _        |r| j(                  r| j+                          y y y y # t        $ r Y w xY w)N        )r;   r	   act_non_blockingsixPY2
gettimeout_timeoutr8   r9   r(   __init__r<   orig_socket_delegate_methodsdelattrAttributeErrorPY3r   
settimeoutr0   
_connecteddo_handshake)selfr.   r3   r4   r/   r5   r6   r7   r0   r!   r?   fnr=   s               r%   rH   zGreenSSLSocket.__init__d   s'    $,t$D $ 5 577 !OO-DM .$0(KK1=cggL@DLHJL	!33b! 4
 77 OO-DM  **45&11$73>>> ,CD(&4??!!# ,;&   		s   !D4 4	E ?E c                     || _         y NrG   )rQ   timeouts     r%   rN   zGreenSSLSocket.settimeout   s	        c                     | j                   S rT   rU   rQ   s    r%   rF   zGreenSSLSocket.gettimeout   s    }}rW   c                 B    |rd| _         d | _        y d| _         d| _        y )NFTrB   )rC   rG   )rQ   flags     r%   setblockingzGreenSSLSocket.setblocking   s#    $)D! DM$(D!DMrW   c           	      R   | j                   r ||i |S 	 	  ||i |S # t        $ r}}t        |      t        k(  r't	        | d| j                         t        d             n:t        |      t        k(  r't	        | d| j                         t        d             n Y d }~nd }~ww xY w)NT	timed outreadrV   timeout_excwriterV   ra   )rC   SSLErrorr   SSL_ERROR_WANT_READr   rF   ra   SSL_ERROR_WANT_WRITE)rQ   funcar?   excs        r%   _call_trampoliningz!GreenSSLSocket._call_trampolining   s      >b>!>b>)  ~)<<"4(,+/??+</:;/GI #3+??"4)-+/??+</:;/GI
  s    	B%A3B  B%c                 @    | j                  t        t        |   |      S )zhWrite DATA to the underlying SSL channel.  Returns
        number of bytes of DATA actually transmitted.)rj   r9   r(   rc   )rQ   datar=   s     r%   rc   zGreenSSLSocket.write   s$     &&.$-t5 	5rW   c                 h    	  | j                   t        t        |   g|i |S # t        $ r Y yw xY w)zORead up to LEN bytes and return them.
        Return zero-length string on EOF.rW   )rj   r9   r(   r`   r   )rQ   r!   r"   r=   s      r%   r`   zGreenSSLSocket.read   sM    	*4**nd0C37C;AC C 		s   !% 	11c                     | j                   r| j                  t        t        |   ||      S t        | dt        d             t        j	                  | ||      S )NTr^   rc   ra   )_sslobjrj   r9   r(   sendr   ra   r   )rQ   rl   flagsr=   s      r%   rq   zGreenSSLSocket.send   sQ    <<**nd0$? ? t4[5MN;;tT511rW   c                     | j                   rt        d| j                  z        t        | dt	        d             t
        j                  | |||      S )Nz%sendto not allowed on instances of %sTr^   ro   )rp   
ValueErrorr=   r   ra   r   sendto)rQ   rl   addrrr   s       r%   ru   zGreenSSLSocket.sendto   sM    <<D!^^, - - t4[5MN==tT599rW   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^   ro   rb    )rp   rt   r=   lenrq   r   ra   r   sendallrI   errorrC   r   r   SOCKET_BLOCKINGrF   SOCKET_CLOSED)	rQ   rl   rr   amountcountdata_to_sendveernos	            r%   rz   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)rQ   buflenrr   s      r%   recvzGreenSSLSocket.recv   s    vu599rW   c                 T    |r|t        |      }n|d}| j                  ||d|      S )N   T)r   buffer_)ry   r   )rQ   buffernbytesrr   s       r%   	recv_intozGreenSSLSocket.recv_into   s5    fn[F^F vu4HHrW   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 %sT   r^   r_   rW   )r   r   r   rp   rt   __name__r=   r`   insertrI   r{   rC   r   r   r|   r   rF   ra   r   r}   )
rQ   r   rr   r   r   plain_socket_functionr`   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        t
        |   |||      S NTr^   r_   )rC   r   rF   ra   r9   r(   recvfrom)rQ   rv   r   rr   r=   s       r%   r   zGreenSSLSocket.recvfrom&  s?    $$t$0A#.{#;=^T3D&%HHrW   c                     | j                   s&t        | d| j                         t        d             t        t
        |   |||      S r   )rC   r   rF   ra   r9   r(   recvfrom_into)rQ   r   r   rr   r=   s       r%   r   zGreenSSLSocket.recvfrom_into,  s?    $$t$0A#.{#;=^T8OOrW   c                 P    t        | j                  t        t        |               S rT   )r	   rj   r9   r(   unwraprQ   r=   s    r%   r   zGreenSSLSocket.unwrap2  s'    422.$.0 1 	1rW   c                 >    | j                  t        t        |         S )zPerform a TLS/SSL handshake.)rj   r9   r(   rP   r   s    r%   rP   zGreenSSLSocket.do_handshake6  s     &&.$46 	6rW   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)rc   r^   rb   )r   connectrC   r   get_hubclockrF   rI   r{   r   r
   r   r   ra   )rQ   rv   real_connectr   ri   ends         r%   _socket_connectzGreenSSLSocket._socket_connect;  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(         t*        rt)        ||       | _         n|| _         	 | j.                  r| j1                          yy# t        $ rx t        j                  r)| j                  j!                  | j
                  ||       }n<t"        r| j$                  n| j                  }|j!                  | || j&                        }Y w 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)ssl_sock)r,   )ownerN)rp   rt   r   _sslsslwrap_sockr3   r4   r5   r6   r7   r2   rL   rD   rE   r*   _wrap_socketr   r1   r,   	SSLObjectr8   	NameErrorr0   rP   )rQ   rv   r/   r   sslobjr1   s         r%   r   zGreenSSLSocket.connect_  s7   
 <<NOOT"	;llG TZZdllDMM!^^T-=-=!]];-1\\;F		&  (t<%'' (/  	gww33DJJVZ3[*.$,,DMM --dKQUQeQe-f	g  	"!DL	"s$   C E A>EEE.-E.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^   r_   NF)r/   r0   r+   r*   )rC   r   acceptrI   r{   r   r   r|   r   rF   ra   typer+   r*   )rQ   newsockrv   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)NotImplementedErrorrY   s    r%   dupzGreenSSLSocket.dup  s    !";<<rW   )r   )r   r   )Nr   rT   )r   
__module____qualname____doc__	CERT_NONEPROTOCOL_SSLv23r:   rH   rN   rF   r\   rj   rc   r`   rq   ru   rz   r   r   r   r   r   r   rP   r   r   r   r   __classcell__r=   s   @r%   r(   r(   +   s     t!Y+d(,'V &*D"i,t)-($T  *52:B:I%NIP16
"7H# J6=rW   r(   c                      t        | g|i |S rT   r(   )r.   rh   r?   s      r%   r   r     s    $))b))rW   r   c           	      :    t        | ||dt        t        d      }|S )zA replacement for the old socket.ssl function.  Designed
        for compatibility with Python 2.5 and earlier.  Will disappear in
        Python 3.0.FN)r3   r4   r/   r5   r6   r7   )r(   r   r   )r.   r3   r4   r   s       r%   r   r     s'     "$(.3,5.=+/	1
 rW   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   )rQ   r.   rh   r?   s       r%   r   zGreenSSLContext.wrap_socket  s    !$@@T@R@@rW   setterc                 J    t         t        t        
  j                  | |       y rT   )r9   r    options__set__rQ   valuer=   s     r%   r   zGreenSSLContext.options  s    *,@IQQRVX]^rW   c                 J    t         t        t        
  j                  | |       y rT   )r9   r    verify_flagsr   r   s     r%   r   zGreenSSLContext.verify_flags  s    *,@NVVW[]bcrW   c                 J    t         t        t        
  j                  | |       y rT   )r9   r    verify_moder   r   s     r%   r   zGreenSSLContext.verify_mode  s    *,@MUUVZ\abrW   maximum_versionc                 J    t         t        t        
  j                  | |       y rT   )r9   r    r   r   r   s     r%   r   zGreenSSLContext.maximum_version      .0DU]]^bdijrW   minimum_versionc                 J    t         t        t        
  j                  | |       y rT   )r9   r    r   r   r   s     r%   r   zGreenSSLContext.minimum_version  r   rW   )r   r   r   	__slots__r   hasattrr    r   r   r   r   r   r   r   r   s   @r%   r   r     s    		A
 '//: "))00_ 1_ "..55d 6d "--44c 5c +->?%55<<k =k +->?%55<<k =k @/ ;rW   r   r   c                  2    t        | i |}t        |_        |S rT   ) _original_create_default_contextr   r=   )rh   r?   r1   s      r%   green_create_default_contextr     s     
 7@R@G /GNrW   )NN)/
__import____ssleventlet.patcherr   globalsdirsyseventletr   r   eventlet.greenior   r	   r
   r   eventlet.hubsr   r   eventlet.supportr   r   rD   
contextlibr   rI   r   rd   ra   __patched__r   r   r   r   getattrr    version_infor8   r&   r(   r   r   r   r   r   r   r   r   r   rW   r%   <module>r      sC  5 - 	3u: 6 
 "  / , 
 %"			? oo )) ulD9 ##f,  	M 	Mu=( u=p 	* 5"#	 5, ++"k. "kH !Ju./+0+G+G(	 ">(D% 0S  rW   