
    wg                     f    d dl Z d dlZd dlmZ d dlmZmZ d Zd Zd Z	 G d d      Z
d	eee	e
d
Zy)    N)urlsplit)ResponseWebSocketResponsec                     | j                   j                  ||j                         | j                   j                  ||j                         | j                   j	                  d||j                         y)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.
    OPTIONSN)routeradd_gethandle_requestadd_post	add_route)appengineio_serverengineio_endpoints      c/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/engineio/async_drivers/aiohttp.pycreate_router      sZ     JJ(/*H*HIJJ)?+I+IJJJ$5(779    c                 z   | j                   }| j                  }t        |j                        }i d|dt        j
                  ddddddd	dd
dddd|j                  d|j                  xs dd|j                  dd|j                  z  ddddddddd| }|j                  j                         D ]S  \  }}|j                         }|dk(  r||d<   !|dk(  r||d<   ,d|j                  dd       z  }||v r
||    d!| }|||<   U |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.
    z
wsgi.inputzwsgi.errorszwsgi.version)   r   z
wsgi.asyncTzwsgi.multithreadFzwsgi.multiprocesszwsgi.run_onceSERVER_SOFTWAREaiohttpREQUEST_METHODQUERY_STRING RAW_URISERVER_PROTOCOLz
HTTP/%s.%sREMOTE_ADDRz	127.0.0.1REMOTE_PORT0SERVER_NAMESERVER_PORTaiohttp.requestzCONTENT-TYPECONTENT_TYPEzCONTENT-LENGTHCONTENT_LENGTHzHTTP_%s-_,HTTP_X_FORWARDED_PROTOhttpzwsgi.url_scheme	PATH_INFOSCRIPT_NAME)_message_payloadr   pathsysstderrmethodqueryversionheadersitemsupperreplaceget)	requestmessagepayload	uri_partsenvironhdr_name	hdr_valuekey	path_infos	            r   translate_requestrA      s    GG&Igszz 	 	d	
 	E 	U 	 	9 	'.. 		-2 	7<< 	<'//9 	{ 	s 	y  	s!" 	7#G(  '446 !)>>#~%&/GN#))(1G$%(**344'>"3<.)5I ! ")-Ev!NGI$GKGMNr   c                 R    t        |t        | j                         d         |      S )zTThis function generates an appropriate response object for this async
    mode.
    r   )bodystatusr3   )r   intsplit)rD   r3   r:   r<   s       r   make_responserG   J   s(     V\\^A->)?#% %r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)	WebSocketz
    This wrapper class provides a aiohttp WebSocket interface that is
    somewhat compatible with eventlet's implementation.
    c                      || _         d | _        y N)handler_sock)selfrL   servers      r   __init__zWebSocket.__init__W   s    
r   c                    K   |d   }t        d      | _        | j                  j                  |       d {    || _        | j	                  |        d {    | j                  S 7 07 w)Nr!   r   )max_msg_size)r   rM   preparer<   rL   )rN   r<   r8   s      r   __call__zWebSocket.__call__[   sc     +,&A6
jj  )))ll4   zz	 	* 	!s!   5A,A(A,A*A,*A,c                 T   K   | j                   j                          d {    y 7 wrK   )rM   close)rN   s    r   rV   zWebSocket.closed   s     jj   s   (&(c                    K   t        |t              r| j                  j                  }n| j                  j                  }t        j                  |      r ||       d {    y  ||       y 7 wrK   )
isinstancebytesrM   
send_bytessend_strasyncioiscoroutinefunction)rN   r9   fs      r   sendzWebSocket.sendg   sU     gu%

%%A

##A&&q)G*gJ s   AA1 A/!A1c                    K   | j                   j                          d {   }t        |j                  t              s$t        |j                  t
              s
t               |j                  S 7 NwrK   )rM   receiverX   datarY   strOSError)rN   msgs     r   waitzWebSocket.waitq   sL     JJ&&((#((E*sxx-)Oxx	 )s   A1A/AA1N)	__name__
__module____qualname____doc__rP   rT   rV   r_   rf    r   r   rI   rI   R   s     !r   rI   T)r\   r   rA   rG   	websocket)r\   r.   urllib.parser   aiohttp.webr   r   r   rA   rG   rI   _asyncrk   r   r   <module>rp      sD     
 ! 3
92j%$ $P  *"
r   