
    !niB                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
 d dlmZ g dZdZe j                  e j                   e j"                  hZd e j&                  hZej*                  dd dk(  rej-                  e j.                         ej0                  j3                  d      j                  Zej6                  d	k\  rej8                  Zn%ej8                  j=                  ej8                        Zd
 Zd Z d Z!ej*                  dd dk(  r<e jD                  e j"                  hZ#e jH                  e jJ                  e jL                  hZ'nFe jD                  e j"                  e jJ                  hZ#e jH                  e jL                  e jP                  hZ'd Z)	 d dlm*Z*  G d d      Z-d Z.dZ/	 d dl0m1Z1 d Z2y# e+$ r
  e,       Z*Y (w xY w# e+$ r  G d d      Z1Y d Z2yw xY w)    N)
trampolinenotify_openedIOClosed)	get_errno)
GreenSocket_GLOBAL_DEFAULT_TIMEOUTset_nonblockingSOCKET_BLOCKINGSOCKET_CLOSEDCONNECT_ERRCONNECT_SUCCESSshutdown_safeSSLsocket_timeouti      winsocket)r   
   c                     | j                  |      }|t        v ry|t        vrt        |t        j
                  |         | S )z
    Attempts to connect to the address, returns the descriptor if it succeeds,
    returns None if it needs to trampoline, and raises any exceptions.
    N)
connect_exr   r   OSErrorerrno	errorcode)
descriptoraddresserrs      U/home/homepc/tiktok-worker/venv/lib/python3.12/site-packages/eventlet/greenio/base.pysocket_connectr   "   sC    
 


(C
k
/!c5??3/00    c                     | j                  t        j                  t        j                        }|t        vrt        |t        j                  |         y N)
getsockoptr   
SOL_SOCKETSO_ERRORr   r   r   r   )r   r   s     r   socket_checkerrr%   /   sA    


 1 16??
CC
/!c5??3/00 "r   c                     	 | j                         S # t        $ r'}t        |      t        j                  k(  rY d}~y d}~ww xY w)z
    Attempts to accept() on the descriptor, returns a client,address tuple
    if it succeeds; returns None if it needs to trampoline, and raises
    any exceptions.
    N)acceptr   r   r   EWOULDBLOCK)r   es     r   socket_acceptr*   5   s>      "" Q<5,,,s    	A==Ac                 N   	 | j                   } |d       y# t        $ r 	 ddl}n# t        $ r t	        d      w xY w| j                         }|j                  ||j                        }|t        j                  z  }||k7  r|j                  ||j                  |       Y yY yw xY w)z
    Sets the descriptor to be nonblocking.  Works on many file-like
    objects as well as sockets.  Only sockets can be nonblocking on
    Windows, however.
    r   Nznset_nonblocking() on a file object with no setblocking() method (Windows pipes don't support non-blocking I/O))
setblockingAttributeErrorfcntlImportErrorNotImplementedErrorfilenoF_GETFLos
O_NONBLOCKF_SETFL)fdr,   r.   r1   
orig_flags	new_flagss         r   r	   r	   N   s    nn2 	A1  :

	X 	X & 'W X X	X [[7
.	
"KKy9 #):s"    	B$&B$;A$B$#B$)r   c                      e Zd ZdZdZej                  fdZed        Z	d Z
d Z ee
e      Zd Zd dZd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd!dZd!dZd"dZd"dZd Zd!dZd Zd!dZ d Z!d Z"d Z#d Z$d Z%y)#r   a  
    Green version of socket.socket class, that is intended to be 100%
    API-compatible.

    It also recognizes the keyword parameter, 'set_nonblocking=True'.
    Pass False to indicate that socket is already in non-blocking mode
    to save syscalls.
    Nc                    |j                  dd      }t        |t              r)t        |g|i |}t	        |j                                n|}	 |j                         xs t        j                         | _	        |r|j                         dk7  rt        |       || _        d| _        |j                  | _        |j                  | _        |j
                  | _        |j                   | _        |j"                  | _        |j$                  | _        |j&                  | _        |j(                  | _        d| _        y # t        $ r t        j                         | _	        Y w xY w)Nr	   TF)pop
isinstanceint_original_socketr   r1   
gettimeoutr   getdefaulttimeout_timeoutr-   r	   r6   act_non_blockingbindclosegetsocknamer"   listen
setsockoptshutdown_closed)selffamilyargskwargsshould_set_nonblockingr6   s         r   __init__zGreenSocket.__init__   s   !',=t!Dfc"!&:4:6:B"))+&B	7MMOIv/G/G/IDM "biikR&7B !& GG	XX
ii>>--ii--3  	7"446DM	7s   +D8 8"EEc                     | S r!    rK   s    r   _sockzGreenSocket._sock   s    r   c                 .    | j                   j                  S r!   r6   _io_refsrS   s    r   _get_io_refszGreenSocket._get_io_refs   s    wwr   c                 &    || j                   _        y r!   rV   )rK   values     r   _set_io_refszGreenSocket._set_io_refs   s     r   c                 z    | j                   t        |      t        | j                   |      }t        | ||       |S r!   )r6   r-   getattrsetattr)rK   nameattrs      r   __getattr__zGreenSocket.__getattr__   s7    77? &&tww%dD!r   c                     | j                   r
t               	 t        |||||| j                        S # t        $ r | j                           w xY w)z We need to trampoline via the event hub.
            We catch any signal back from the hub indicating that the operation we
            were waiting on was associated with a filehandle that's since been
            invalidated.
        )readwritetimeouttimeout_excmark_as_closed)rJ   r   r   _mark_as_closed)rK   r6   rc   rd   re   rf   s         r   _trampolinezGreenSocket._trampoline   s]     << *	bt5'*5-1-A-AC C  	  "	s	   3 Ac                    | j                   r8| j                  j                         }t        |d   j	                                |S | j                  }t        d      }	 t        |      }|<|\  }}t        |j	                                t        |        t        |       |      |fS | j                  |d| j                         |       m)Nr   	timed outTrc   re   rf   )rC   r6   r'   r   r1   r   r*   r	   typeri   r@   )rK   resr6   _timeout_excclientaddrs         r   r'   zGreenSocket.accept   s      ''.."C#a&--/*JWW%k2#C"fmmo.'!tDz&)4//RdDOO4ES_` r   c                     d| _         y)z" Mark this socket as being closed TN)rJ   rS   s    r   rh   zGreenSocket._mark_as_closed   s	    r   c                 2    t        | dd       }| |        y y )NrE   )r]   )rK   rE   s     r   __del__zGreenSocket.__del__   s     gt,G r   c                    | j                   r| j                  j                  |      S | j                  }t        d      }| j	                         :t        ||      s-	 | j                  |d       t        |       t        ||      s,y y t        j                         | j	                         z   }	 t        ||      ry t        j                         |k\  r||t        j                         z
  }	 | j                  |d||       t        |       _# t        $ r t        t        j                        w xY w# t        $ r t        t        j                        w xY w)Nrk   Trd   rd   re   rf   )rC   r6   connectr   r@   r   ri   r   r   r   EBADFDr%   time)rK   r   r6   ro   endre   s         r   rx   zGreenSocket.connect   s.     77??7++WW%k2??$$R10$$Rt$4  # %R1 ))+ 11C!"g.99;#%&&		+0$$RtWR^$_  #    0!%,,//0   0!%,,//0s   D -D4 #D14#Ec                    | j                   r| j                  j                  |      S | j                  }| j                         -t	        ||      s 	 | j                  |d       t        |       yy t        j                         | j                         z   }t        j                  t        j                        }	 	 t	        ||      ryt        j                         |k\  r|| j                  |d|t        j                         z
  |       t        |       y# t        $ r}t        |      cY d }~S d }~wt        $ r t        j                  cY S w xY w# t        $ r}t        |      cY d }~S d }~wt        $ r t        j                  cY S w xY w)NTrv   r   rw   )rC   r6   r   r@   r   ri   r%   r   r   r   r   ry   rz   r   re   EAGAIN)rK   r   r6   exr{   rf   s         r   r   zGreenSocket.connect_ex  sM     77%%g..WW??$$R1($$Rt$4#B'
  2 ))+ 11C ..6K(%b'2 yy{c)))$$RtS499;=N1< % >#B'
 +  )$R=( ( <<'(  )$R=( ( <<'(sO   D ;E AE 	E 
D0*E0EE	F

E+%F
+F
	F
c                      | j                   j                  |i |} t        |       |d      }|j                  | j	                                |S )NF)r	   )r6   duprm   
settimeoutr@   )rK   rM   kwsocknewsocks        r   r   zGreenSocket.dup+  sG    tww{{D'B'$t*T594??,-r   c                 4    t        j                  | g|i |S r!   )r?   makefile)rK   rM   rN   s      r   r   zGreenSocket.makefile1  s    ((????r   c                 ^    t        j                  dt        d        | j                  |i |S )Nz>makeGreenFile has been deprecated, please use makefile instead   )
stacklevel)warningswarnDeprecationWarningr   )rK   rM   r   s      r   makeGreenFilezGreenSocket.makeGreenFile4  s/     )*<	Lt}}d)b))r   c                 p    | j                  | j                  d| j                         t        d             y )NTrk   rl   )ri   r6   r@   r   rS   s    r   _read_trampolinezGreenSocket._read_trampoline9  s1    GGOO%&{3	 	 	5r   c                 :   | j                   r || S 	 	 |d   s| j                           || S # t        $ r5}t        |      t        v rnt        |      t
        v r|cY d }~S  Y d }~nd }~ww xY w	 | j                          n# t        $ r}t               d }~ww xY wNr   )rC   r   r   r   r
   r   r   EOFError)rK   	recv_meth	empty_valrM   r)   s        r   
_recv_loopzGreenSocket._recv_loop@  s      d## Aw))+ $'' Q<?2q\]2$$	 !%%' !j !/ s8   . 	A,$A'A,!A''A,0B 	B

BBc                 R    | j                  | j                  j                  d||      S Nr   )r   r6   recvrK   bufsizeflagss      r   r   zGreenSocket.recv_  s    tww||S'5AAr   c                 R    | j                  | j                  j                  d||      S r   )r   r6   recvfromr   s      r   r   zGreenSocket.recvfromb  s!    tww//guEEr   c                 T    | j                  | j                  j                  d|||      S r   )r   r6   	recv_intorK   buffernbytesr   s       r   r   zGreenSocket.recv_intoe  s#    tww00!VVUKKr   c                 T    | j                  | j                  j                  d|||      S r   )r   r6   recvfrom_intor   s       r   r   zGreenSocket.recvfrom_intoh  s#    tww44aOOr   c                    | j                   r	 ||g| S t        d      }	 	  ||g| S # t        $ r1}t        |      }|t        j
                  k(  s|t        vr Y d }~nd }~ww xY w	 | j                  | j                  d| j                         |       n'# t        $ r t        t        j                  d      w xY w)Nrk   Trw   z#Connection closed by another thread)rC   r   r   r   r   ENOTCONNr
   ri   r6   r@   r   
ECONNRESET)rK   send_methoddatarM   ro   r)   enos          r   
_send_loopzGreenSocket._send_loopk  s      t+d++%k2"4/$// l%..(C,F -G
W  doo>O-9 ! ; We..0UVVW s    , 	A&'A!!A&*-B $B<c                 P    | j                  | j                  j                  ||      S r!   )r   r6   send)rK   r   r   s      r   r   zGreenSocket.send~  s    tww||T599r   c                 R     | j                   | j                  j                  |g| S r!   )r   r6   sendto)rK   r   rM   s      r   r   zGreenSocket.sendto  s"    ttww~~t;d;;r   c                     | j                  ||      }t        |      }||k  r|| j                  ||d  |      z  }||k  ry y r!   )r   len)rK   r   r   taillen_datas        r   sendallzGreenSocket.sendall  sF    yyu%t9XoDIId45k511D Xor   c                 B    |rd| _         d | _        y d| _         d| _        y )NFT        )rC   rB   )rK   flags     r   r,   zGreenSocket.setblocking  s#    $)D! DM$(D!DMr   c                     |	|t         k(  r| j                  d       y 	 |j                  } |       }|dk  rt        d      |dk(  rd| _        d| _        y d| _        || _        y # t        $ r t	        d      w xY w)NTza float is requiredr   zTimeout value out of rangeF)r   r,   	__float__r-   	TypeError
ValueErrorrC   rB   )rK   howlongfs      r   r   zGreenSocket.settimeout  s    ?g)@@T"	3!!A #S=9::c>$(D!DM$)D!#DM  	3122	3s   A% %A:c                     | j                   S r!   )rB   rS   s    r   r@   zGreenSocket.gettimeout  s    }}r   c                     | S r!   rR   rS   s    r   	__enter__zGreenSocket.__enter__  s    r   c                 $    | j                          y r!   )rE   )rK   rM   s     r   __exit__zGreenSocket.__exit__  s    

r   )FFNN)r   )r   r   )&__name__
__module____qualname____doc__r6   r   AF_INETrP   propertyrT   rX   r[   rW   ra   ri   r'   rh   rt   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r   r@   r   r   rR   r   r   r   r   w   s     
B$nn %N   ! l3H&a $6@@*
5!>BFLPW&:<2 $$r   r   c                      t        d      )NzI/O operation on closed file)r   )rM   rN   s     r   _operation_on_closed_filer     s    
3
44r   a  
    GreenPipe is a cooperative replacement for file class.
    It will cooperate on pipes. It will block on regular file.
    Differences from file class:
    - mode is r/w property. Should re r/o
    - encoding property not implemented
    - write/writelines will not raise TypeError exception when non-string data is written
      it will write str(data) instead
    - Universal new lines are not supported and newlines property not implementeded
    - file argument can be descriptor, file name or file object.
    )r   c                   d    e Zd Z G d de      Z G d de      Z G d de      Z G d de      Zy	)
r   c                       e Zd Zy)SSL.WantWriteErrorNr   r   r   rR   r   r   WantWriteErrorr         r   r   c                       e Zd Zy)SSL.WantReadErrorNr   rR   r   r   WantReadErrorr     r   r   r   c                       e Zd Zy)SSL.ZeroReturnErrorNr   rR   r   r   ZeroReturnErrorr     r   r   r   c                       e Zd Zy)SSL.SysCallErrorNr   rR   r   r   SysCallErrorr     r   r   r   N)r   r   r   	Exceptionr   r   r   r   rR   r   r   r   r     s2    	Y 		I 		i 		9 	r   r   c                 $   	 	 | j                  t        j                        S # t        $ r | j                         cY S w xY w# t        $ rE}t        |      t        j                  t        j                  t        j                  fvr Y d}~yd}~ww xY w)a  Shuts down the socket. This is a convenience method for
    code that wants to gracefully handle regular sockets, SSL.Connection
    sockets from PyOpenSSL and ssl.SSLSocket objects from Python 2.7 interchangeably.
    Both types of ssl socket require a shutdown() before close,
    but they have different arity on their shutdown method.

    Regular sockets don't need a shutdown before close, but it doesn't hurt.
    N)
rI   r   	SHUT_RDWRr   r   r   r   r   EBADFENOTSOCK)r   r)   s     r   r   r     sw    	#==!1!122 	#==?"	#   Q<U^^LL Ms(   " >A >A 	B
;B

B)3r   r3   r   sysrz   r   eventleteventlet.hubsr   r   r   eventlet.supportr   __all__BUFFER_SIZEEINPROGRESSEALREADYr(   r   EISCONNr   platformadd	WSAEINVALpatcheroriginalr?   version_infore   r   wrap_is_timeoutr   r%   r*   r}   r
   r   r   	ESHUTDOWNr   EPIPEr	   r   r/   objectr   r   greenpipe_docOpenSSLr   r   rR   r   r   <module>r      s    	  
    = = &   %..%2C2CDemm$<<uOOEOO$##,,X6==  w^^N%%55fnnEN
1 <<u||U%6%67O%%u~~uGM ||U%6%6GO%%uDM F'.
t tn	5
"}
  '$h'\
   !s$   F8 .G
 8GG
GG