
    i                         d dl Z d dlmZ 	 d dlmZ 	 d dlmZ n# e$ r	 d dlmZ Y nw xY wn# e$ r dZdZY nw xY wd Z	d Z
d Z G d d	          Zd
e	e
eerenddZdS )    N)urlsplit)HTTPResponse)WebSocketProtocolc                     |                      |j        |g d           	 |                                  dS # t          $ r Y dS w xY w)zThis function sets up the engine.io endpoint as a route for the
    application.

    Note that both GET and POST requests must be hooked up on the engine.io
    endpoint.
    )GETPOSTOPTIONS)methodsN)	add_routehandle_requestenable_websocketAttributeError)appengineio_serverengineio_endpoints      G/usr/local/lib/python3.11/dist-packages/engineio/async_drivers/sanic.pycreate_router      so     MM/02C444  6 6 6   s   7 
AAc                 \    G d d          }t          | j                  }i d || j                  dt          j        ddddd	d
dd
dd
ddd| j        d|j        pdd| j        dd| j        z   ddddddddd| }| j        	                                D ]`\  }}|
                                }|dk    r||d<   %|dk    r||d<   1d |                    d!d"          z  }||v r||          d#| }|||<   a|                    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dS )+translate_request.<locals>.AwaitablePayloadc                     |pd| _         d S N    payload)selfr   s     r   __init__z4translate_request.<locals>.AwaitablePayload.__init__$   s    ">cDLLLr   Nc                 r   K   || j         }d| _         n#| j         d |         }| j         |d          | _         |S r   r   )r   lengthrs      r   readz0translate_request.<locals>.AwaitablePayload.read'   sB      ~L"L&)#|FGG4Hr   N)__name__
__module____qualname__r   r!    r   r   AwaitablePayloadr   #   s7        	* 	* 	*	 	 	 	 	 	r   r'   z
wsgi.inputzwsgi.errorszwsgi.version)   r   z
wsgi.asyncTzwsgi.multithreadFzwsgi.multiprocesszwsgi.run_onceSERVER_SOFTWAREsanicREQUEST_METHODQUERY_STRING RAW_URISERVER_PROTOCOLzHTTP/REMOTE_ADDRz	127.0.0.1REMOTE_PORT0SERVER_NAMESERVER_PORTsanic.requestzCONTENT-TYPECONTENT_TYPEzCONTENT-LENGTHCONTENT_LENGTHzHTTP_%s-_,HTTP_X_FORWARDED_PROTOhttpzwsgi.url_scheme	PATH_INFOSCRIPT_NAME)r   urlbodysysstderrmethodqueryversionheadersitemsupperreplacegetpath)requestr'   	uri_partsenvironhdr_name	hdr_valuekey	path_infos           r   translate_requestrS      s           %%I&&w|44sz 	 	d	
 	E 	U 	 	7 	'. 		-2 	7; 	7W_4 	{ 	s 	w  	s!" 	#G(  '4466 ! !)>>##~%%&/GN#)))(1G$%(**3444'>>"3<55)55I !(-Ev!N!NGI$GKGMNr   c                     i }d}|D ]:}|d                                          dk    r	|d         })|d         ||d         <   ;t          ||t          |                                 d                   |          S )zTThis function generates an appropriate response object for this async
    mode.
    Nr   zcontent-typer(   )r@   content_typestatusrF   )lowerr   intsplit)rV   rF   r   rN   headers_dictrU   hs          r   make_responser\   ^   s     LL & &Q4::<<>))Q4LL!"1L1W<"6<<>>!#455|M M M Mr   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )	WebSocketz
    This wrapper class provides a sanic WebSocket interface that is
    somewhat compatible with eventlet's implementation.
    c                 0    || _         || _        d | _        d S r"   )handlerserver_sock)r   r`   ra   s      r   r   zWebSocket.__init__r   s    


r   c                    K   |d         }|j                                         }|                    |           d {V | _        || _        |                     |            d {V  | j                                        S )Nr5   )	transportget_protocolwebsocket_handshakerb   rN   r`   ra   _ok)r   rN   rL   protocols       r   __call__zWebSocket.__call__w   s      /*$1133#77@@@@@@@@
ll4         {   r   c                 H   K   | j                                          d {V  d S r"   )rb   close)r   s    r   rk   zWebSocket.close   s2      j           r   c                 J   K   | j                             |           d {V  d S r"   )rb   send)r   messages     r   rm   zWebSocket.send   s2      joog&&&&&&&&&&&r   c                    K   | j                                          d {V }t          |t                    s#t          |t                    st                      |S r"   )rb   recv
isinstancebytesstrOSError)r   datas     r   waitzWebSocket.wait   s[      Z__&&&&&&&&$&& 	tS))	))Or   N)	r#   r$   r%   __doc__r   ri   rk   rm   rv   r&   r   r   r^   r^   m   si           
! ! !! ! !' ' '    r   r^   T)asyncior   rS   r\   	websocket)rA   urllib.parser   sanic.responser   )sanic.server.protocols.websocket_protocolr   ImportErrorsanic.websocketr   rS   r\   r^   _asyncr&   r   r   <module>r      s5   



 ! ! ! ! ! !++++++6OOOOOOO 6 6 6555555556   L
   < < <~M M M       D  *"/9T
 
s$   ,  , (, (, 	88