
    !ni                     x    d dl Z d dlZd dlZd dlmZ ddlmZ d dlZd dl	Zd Z
d Zd Z G d d	      Zd
eeedZy)    N)urlsplit   )
exceptionsc                 R      G  fddt         j                  j                        }|S )Nc                   n     e Zd Z fdZ fdZfdZfdZfdZd Zd Z	d Z
 fd	Zd
 Z xZS )$get_tornado_handler.<locals>.Handlerc                     t        |   |i | t        j                  t              r*j                  dk(  rd | _        n$j                  g| _        nj                  | _        t        j                         | _        y )N*)	super__init__
isinstancecors_allowed_originsstrallowed_originsasyncioQueuereceive_queue)selfargskwargs	__class__engineio_servers      ^/home/homepc/tiktok-worker/venv/lib/python3.12/site-packages/engineio/async_drivers/tornado.pyr   z-get_tornado_handler.<locals>.Handler.__init__   sn    Gd-f-/>>D"773>+/D( (<<,>D( (7'K'K$!(D    c                   K   | j                   j                  j                  dd      j                         dk(  r0t	        |   |i |}t        j                  |      r| d {    y y j                  |        d {    y 7  7 w)NUpgrade 	websocket)requestheadersgetlowerr   inspectiscoroutinehandle_request)r   r   r   retr   r   s       r   r!   z(get_tornado_handler.<locals>.Handler.get   s{     ||##''	26<<>+Mgk4262&&s+II , &44T::: :s$   A!B	$B%B	?B B	B	c                 V   K   t        j                  j                  |              y wN)r   ensure_futurer%   r   r   r   r   s      r   openz)get_tornado_handler.<locals>.Handler.open!   s      !!/"@"@"FGs   &)c                 D   K   j                  |        d {    y 7 wr(   r%   r*   s      r   postz)get_tornado_handler.<locals>.Handler.post%        !00666     c                 D   K   j                  |        d {    y 7 wr(   r-   r*   s      r   optionsz,get_tornado_handler.<locals>.Handler.options(   r/   r0   c                 V   K   | j                   j                  |       d {    y 7 wr(   )r   putr   messages     r   
on_messagez/get_tornado_handler.<locals>.Handler.on_message+   s      $$((111s   )')c                 R   K   | j                   j                          d {   S 7 wr(   )r   r!   r   s    r   get_next_messagez5get_tornado_handler.<locals>.Handler.get_next_message.   s!     ++//1111s   '%'c                 :    | j                   j                  d        y r(   )r   
put_nowaitr9   s    r   on_closez-get_tornado_handler.<locals>.Handler.on_close1   s    ))$/r   c                 X    | j                   || j                   v ryt        | 	  |      S )NT)r   r   check_origin)r   originr   s     r   r?   z1get_tornado_handler.<locals>.Handler.check_origin4   s/    ##+v9M9M/M7'//r   c                     i S r(    r9   s    r   get_compression_optionsz<get_tornado_handler.<locals>.Handler.get_compression_options9   s    Ir   )__name__
__module____qualname__r   r!   r+   r.   r2   r7   r:   r=   r?   rC   __classcell__)r   r   s   @r   Handlerr      s6    
	1	;	H	7	7	2	2	0	0
	r   rH   )tornador   WebSocketHandler)r   rH   s   ` r   get_tornado_handlerrK      s#    /'##44 /b Nr   c                 Z    G d d      }| j                   j                  }t        | j                   j                        }| j                   j                  }| j                   j                  r|d| j                   j                  z   z  }i d ||      dt
        j                  dddd	d
dddddddd| j                   j                  d| j                   j                  xs dd|dd| j                   j                  z  ddddddddd| }| j                   j                  j                         D ]E  \  }}|j                         }|dk(  r||d<   !|dk(  r||d <   ,d!|j                  d"d#      z  }|||<   G |j                  d$d%      |d&<   |j                  }	|	|d'<   d|d(<   |S ))zThis function takes the arguments passed to the request handler and
    uses them to generate a WSGI compatible environ dictionary.
    c                       e Zd Zd ZddZy)+translate_request.<locals>.AwaitablePayloadc                     |xs d| _         y Nr   payload)r   rR   s     r   r   z4translate_request.<locals>.AwaitablePayload.__init__E   s    ">cDLr   Nc                    K   || j                   }d| _         |S | j                   d | }| j                   |d  | _         |S wrP   rQ   )r   lengthrs      r   readz0translate_request.<locals>.AwaitablePayload.readH   sK     ~LL" H LL&)#||FG4Hs   =?r(   )rD   rE   rF   r   rV   rB   r   r   AwaitablePayloadrN   D   s    	*	r   rW   ?z
wsgi.inputzwsgi.errorszwsgi.version)   r   z
wsgi.asyncTzwsgi.multithreadFzwsgi.multiprocesszwsgi.run_onceSERVER_SOFTWAREaiohttpREQUEST_METHODQUERY_STRINGr   RAW_URISERVER_PROTOCOLzHTTP/%sREMOTE_ADDRz	127.0.0.1REMOTE_PORT0SERVER_NAMESERVER_PORTtornado.handlerzCONTENT-TYPECONTENT_TYPEzCONTENT-LENGTHCONTENT_LENGTHzHTTP_%s-_HTTP_X_FORWARDED_PROTOhttpzwsgi.url_scheme	PATH_INFOSCRIPT_NAME)r   bodyr   pathquerysysstderrmethodversionr    itemsupperreplacer!   )
handlerrW   rR   	uri_partsfull_urienvironhdr_name	hdr_valuekey	path_infos
             r   translate_requestr   @   s#     oo""G--.I##HC'//////&w/szz 	 	d	
 	E 	U 	 	9 	'//00 	--3 	8 	9w'>'>> 	{ 	s 	y  	s!" 	7#G(  '66<<> 
!)>>#~%&/GN#))(1G$%(**344 
! ")-Ev!NGI$GKGMNr   c                     |d   }	 |j                  t        | j                         d                |D ]  \  }}|j	                  ||        |j                  |       |j                          y# t        $ r Y yw xY w)zTThis function generates an appropriate response object for this async
    mode.
    re   r   N)
set_statusintsplitRuntimeError
set_headerwritefinish)statusr    rR   r{   tornado_handlerheadervalues          r   make_responser      s     /0O""3v||~a'8#9:
 ! 2""6512'"   	s   +A0 0	A<;A<c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)	WebSocketz
    This wrapper class provides a tornado WebSocket interface that is
    somewhat compatible with eventlet's implementation.
    c                      || _         d | _        y r(   )rx   r   )r   rx   servers      r   r   zWebSocket.__init__   s    #r   c                 d   K   |d   | _         || _        | j                  |        d {    y 7 w)Nre   )r   r{   rx   )r   r{   s     r   __call__zWebSocket.__call__   s-     &'89ll4   s   &0.0c                 @   K   | j                   j                          y wr(   )r   closer9   s    r   r   zWebSocket.close   s     ""$s   c                    K   	 | j                   j                  |t        |t                     y # t        j
                  j                  $ r t        j                         w xY ww)N)binary)	r   write_messager   bytesrI   r   WebSocketClosedErrorr   EngineIOErrorr5   s     r   sendzWebSocket.send   sY     	-  ..
7E : / <  55 	-**,,	-s   A%+0 A%2A""A%c                    K   | j                   j                          d {   }t        |t              st        |t              s
t               |S 7 0wr(   )r   r:   r   r   r   OSError)r   msgs     r   waitzWebSocket.wait   sB     ((99;;#u%sC()O
	 <s   AA1AN)	rD   rE   rF   __doc__r   r   r   r   r   rB   r   r   r   r      s     $!
%-r   r   T)r   r   r   r   )r   r#   rq   urllib.parser   r   r   tornado.webrI   tornado.websocketrK   r   r   r   _asyncrB   r   r   <module>r      sK      
 !   2j>B" B *"	
r   