o
    6eb                  	   @   s  U d 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Zddlm	Z	 ddl
mZ ddlmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ dZG dd de	Zdd eD Z eee!  e"d< G dd de	Z#dZ$ee% e"d< edj&Z'edj&Z(edj)Z*edj+Z,edj+Z-edj+Z.edj+Z/dZ0ee! e"d< dZ1ee! e"d< e2dg dZ3G d d! d!e3Z4e4e#j5ddZ6e4e#j7ddZ8G d"d# d#e9Z:G d$d% d%e9Z;ej<Z=ee> e"d&< d'd( e?d)D Z@eee%  e"d*< d+e%d,eAd-dfd.d/ZBereBZCnz
dd0lDmEZE eEZCW n eFy$   eBZCY nw e%g d1ZGee% e"d2< eHd3ZIeee>  e"d4< eHd5ZJeee>  e"d6< dGd8ee> d9eKd-ee!eKf fd:d;ZL	7dHd=e!d9eKd>eKd-e>fd?d@ZMG dAdB dBe	ZNG dCdD dDZOG dEdF dFZPdS )Iz%WebSocket protocol versions 13 and 8.    N)IntEnum)Struct)	AnyCallableListOptionalPatternSetTupleUnioncast   )BaseProtocol)NO_EXTENSIONS)	DataQueue)Final)	WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWS_KEYWebSocketReaderWebSocketWriter	WSMessageWebSocketError	WSMsgTypeWSCloseCodec                   @   s@   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdS )r     i  i  i  i  i  i  i  i  i  i  i  i  N)__name__
__module____qualname__OK
GOING_AWAYPROTOCOL_ERRORUNSUPPORTED_DATAABNORMAL_CLOSUREINVALID_TEXTPOLICY_VIOLATIONMESSAGE_TOO_BIGMANDATORY_EXTENSIONINTERNAL_ERRORSERVICE_RESTARTTRY_AGAIN_LATERBAD_GATEWAY r,   r,   i/var/www/html/apis.geethamveg.com/public_html/venv/lib/python3.10/site-packages/aiohttp/http_websocket.pyr       s    r   c                 C   s   h | ]}t |qS r,   )int).0ir,   r,   r-   	<setcomp>0   s    r1   ALLOWED_CLOSE_CODESc                   @   sP   e Zd ZdZdZdZdZdZdZdZ	dZ
d	ZeZeZeZeZeZe	Ze
ZeZd
S )r   r   r      	   
         i  i  N)r   r   r   CONTINUATIONTEXTBINARYPINGPONGCLOSECLOSINGCLOSEDERRORtextbinarypingpongcloseclosingclosederrorr,   r,   r,   r-   r   3   s$    r   s$   258EAFA5-E914-47DA-95CA-C5AB0DC85B11r   z!Hz!Qz!BBz!BBHz!BBQi @  MSG_SIZE   DEFAULT_LIMIT_WSMessageBase)typedataextrac                   @   s0   e Zd Zejddeegef defddZdS )r   )loadsrP   returnc                C   s
   || j S )zAReturn parsed JSON data.

        .. versionadded:: 0.22
        )rN   )selfrP   r,   r,   r-   json]   s   
zWSMessage.jsonN)r   r   r   rS   rP   r   r   r,   r,   r,   r-   r   \   s    (r   c                       s<   e Zd ZdZdededdf fddZdefdd	Z  ZS )
r   z WebSocket protocol parser error.codemessagerQ   Nc                    s   || _ t || d S N)rT   super__init__rR   rT   rU   	__class__r,   r-   rX   l   s   zWebSocketError.__init__c                 C   s   t t| jd S )Nr   )r   strargsrR   r,   r,   r-   __str__p   s   zWebSocketError.__str__)	r   r   r   __doc__r.   r\   rX   r_   __classcell__r,   r,   rZ   r-   r   i   s    r   c                   @   s   e Zd ZdZdS )WSHandshakeErrorz#WebSocket protocol handshake error.N)r   r   r   r`   r,   r,   r,   r-   rb   t   s    rb   native_byteorderc                    s&   g | ] t  fd dtdD qS )c                 3   s    | ]}| A V  qd S rV   r,   )r/   abr,   r-   	<genexpr>|       z<listcomp>.<genexpr>r7   )bytesrange)r/   r,   re   r-   
<listcomp>|   s   & rk   r7   
_XOR_TABLEmaskrN   rQ   c                 C   s   t |ts	J |t| dksJ | |r^dd | D \}}}}|ddd ||ddd< |ddd ||ddd< |ddd ||ddd< |ddd ||ddd< dS dS )aw  Websocket masking function.

    `mask` is a `bytes` object of length 4; `data` is a `bytearray`
    object of any length. The contents of `data` are masked with `mask`,
    as specified in section 5.3 of RFC 6455.

    Note that this function mutates the `data` argument.

    This pure-python implementation may be replaced by an optimized
    version when available.

       c                 s   s    | ]}t | V  qd S rV   )rl   )r/   nr,   r,   r-   rg      rh   z)_websocket_mask_python.<locals>.<genexpr>Nr   r3      )
isinstance	bytearraylen	translate)rm   rN   rd   rf   cdr,   r,   r-   _websocket_mask_python   s   "rw   )_websocket_mask_cython)r   r      ry   _WS_DEFLATE_TRAILINGz^(?:;\s*(?:(server_no_context_takeover)|(client_no_context_takeover)|(server_max_window_bits(?:=(\d+))?)|(client_max_window_bits(?:=(\d+))?)))*$
_WS_EXT_REzpermessage-deflate([^,]+)?_WS_EXT_RE_SPLITFextstrisserverc                 C   s   | sdS d}d}t | D ]m}|d}|sd} ||fS t|}|rod}|rK|dr?t|d}|dks<|dk r?d}q|drFd} ||fS |d	rct|d	}|dks_|dk rctd
|drjd} ||fS |sztd|d q||fS )N)r   Fr   Fr      rn   r4   T   zInvalid window sizer3   z#Extension for deflate not supported)r|   finditergroupr{   matchr.   rb   )r}   r~   compress
notakeoverextdefextr   r,   r,   r-   ws_ext_parse   sF   
%




r   r   r   server_notakeoverc                 C   s^   | dk s| dkrt ddg}|s|d | dk r#|dt|   |r*|d d|S )	Nr4   r   zCCompress wbits must between 9 and 15, zlib does not support wbits=8zpermessage-deflateclient_max_window_bitszserver_max_window_bits=server_no_context_takeoverz; )
ValueErrorappendr\   join)r   r~   r   
enabledextr,   r,   r-   
ws_ext_gen   s   


r   c                   @   s   e Zd ZdZdZdZdZdS )WSParserStater   r3   rp   rn   N)r   r   r   READ_HEADERREAD_PAYLOAD_LENGTHREAD_PAYLOAD_MASKREAD_PAYLOADr,   r,   r,   r-   r      s
    r   c                
   @   s   e Zd Z	ddee dededdfddZdd	d
Zde	de
ee	f fddZde	de
ee	f fddZde	dee
eee eee f  fddZdS )r   Tqueuemax_msg_sizer   rQ   Nc                 C   sp   || _ || _d | _t | _tj| _d | _d| _	d | _
t | _d| _d| _d | _d| _d| _d | _d | _|| _d S )NF    r   )r   _max_msg_size_excrr   _partialr   r   _state_opcode
_frame_fin_frame_opcode_frame_payload_tail	_has_mask_frame_mask_payload_length_payload_length_flag_compressed_decompressobj	_compress)rR   r   r   r   r,   r,   r-   rX      s"   
zWebSocketReader.__init__c                 C   s   | j   d S rV   )r   feed_eofr^   r,   r,   r-   r     s   zWebSocketReader.feed_eofrN   c              
   C   sT   | j rd|fS z| |W S  ty) } z|| _ | j| W Y d }~dS d }~ww )NT)Tr   )r   
_feed_data	Exceptionr   set_exception)rR   rN   excr,   r,   r-   	feed_data  s   zWebSocketReader.feed_datac                 C   s\  |  |D ]\}}}}|r| jstjtj d| _|tjkrt|dkrgt|d d d }|dk r@|t	vr@t
tjd| z|dd  d}W n ty^ } zt
tjd|d }~ww ttj||}	n|rxt
tjd| d	| d	|ttjdd
}	| j|	d q|tjkr| jttj|d
t| q|tjkr| jttj|d
t| q|tjtjfvr| jd u rt
tjd||s|tjkr|| _| j| | jrt| j| jkrt
tjdt| j| jq| jr|tjkrt
tjd||tjkr| jd usJ | j}d | _| j| | jr7t| j| jkr7t
tjdt| j| j|rc| jt | j| j| j}
| jj rbt| jj }t
tjd| j| | jnt!| j}
| j"  |tjkrz|
d}| jttj|d
t| W q ty } zt
tjd|d }~ww | jttj|
d
t|
 qdS )N)wbitsr3   r   i  zInvalid close code: utf-8zInvalid UTF-8 text messagezInvalid close frame:   zUnexpected opcode=z Message size {} exceeds limit {}z<The opcode in non-fin frame is expected to be zero, got {!r}z-Decompressed message size {} exceeds limit {})Fr   )#parse_framer   zlibdecompressobj	MAX_WBITSr   r=   rs   UNPACK_CLOSE_CODEr2   r   r   r!   decodeUnicodeDecodeErrorr$   r   r   r   r;   r<   r9   r:   r   r8   r   extendr   r&   formatrz   
decompressunconsumed_tailri   clear)rR   rN   finopcodepayload
compressed
close_codeclose_messager   msgpayload_mergedleftrA   r,   r,   r-   r   &  s   





		

	

zWebSocketReader._feed_databufc                 C   sf  g }| j r| j | d}| _ d}t|}	 | jtjkr|| dkr|||d  }|d7 }|\}}|d? d@ }|d? d@ }	|d? d@ }
|d	? d@ }|d
@ }|
sV|sV|	r\| js\ttjd|dkrj|dkrjttjd|d? d@ }|d@ }|dkr|dkrttjd| j	s| j
du r|	rdnd| _
n|	rttjdt|| _	|| _t|| _|| _tj| _nn| jtjkr!| j}|dkr|| dkr|||d  }|d7 }t|d }|| _| jrtjntj| _n=n|dkr|| dkr|||d  }|d7 }t|d }|| _| jrtjntj| _nn|| _| jrtjntj| _| jtjkrB|| d	krA|||d	  | _|d	7 }tj| _nnh| jtjkr| j}| j}|| }||kri|| | _|||d  |}nd| _|||||   || }| jdkr| jr| jdusJ t| j| || j	| j|| j
f t | _tj| _nnq||d | _ |S )z&Return the next frame from the socket.r   r   Tr3      r   r      rn   r   z*Received frame with non-zero reserved bitsz!Received fragmented control frame   }   z5Control frame payload cannot be larger than 125 bytesNF~   r6   )r   rs   r   r   r   r   r   r   r!   r   r   boolr   r   r   r   UNPACK_LEN2r   r   r   UNPACK_LEN3r   r   r   _websocket_maskr   rr   )rR   r   frames	start_pos
buf_lengthrN   
first_bytesecond_byter   rsv1rsv2rsv3r   has_masklengthr   	chunk_lenr,   r,   r-   r     s   









  zWebSocketReader.parse_frame)T)rQ   N)r   r   r   r   r   r.   r   rX   r   ri   r
   r   r   r   r   rr   r   r,   r,   r,   r-   r      s&    

{r   c                   @   s   e Zd Zdee ddddedejde	de
ded	e
d
e	ddfddZ	d"dede
d	ee
 ddfddZdeddfddZd#deddfddZd#deddfddZ		d$deeef de	d	ee
 ddfddZd%de
deddfd d!ZdS )&r   Fr   )use_masklimitrandomr   r   protocol	transportr   r   r   r   r   rQ   Nc                C   sB   || _ || _|| _|j| _|| _|| _d| _|| _d| _d | _	d S )NFr   )
r   r   r   	randranger   r   _closing_limit_output_size_compressobj)rR   r   r   r   r   r   r   r   r,   r,   r-   rX   >  s   
zWebSocketWriter.__init__rU   r   c                    s  | j r|tj@ stdd}|s| jrW|dk rW|r$tjtj| d}n| js2tjtj| j d| _| j}||}||	| j
rCtjntj }|trS|dd }|dB }t|}| j}|rcd}nd}|d	k rutd|B |B ||B }	n|d
k rtd|B |B d	|B |}	ntd|B |B d|B |}	|r| dd}
|
dd}
t|}t|
| | |	|
 |  |  jt|	t|
 t| 7  _n%t|tkr| |	 | | n| |	|  |  jt|	t| 7  _| j| jkrd| _| j I dH  dS dS )<Send a frame over the websocket with message as its payload.!Cannot write to closing transportr   r6   )levelr   N@      r   rJ   r   l    rn   big)r   r   r=   ConnectionResetErrorr   r   compressobjZ_BEST_SPEEDr   flushr   Z_FULL_FLUSHZ_SYNC_FLUSHendswithrz   rs   r   	PACK_LEN1	PACK_LEN2	PACK_LEN3r   to_bytesrr   r   _writer   rI   r   r   _drain_helper)rR   rU   r   r   rsvr   
msg_lengthr   mask_bitheaderrm   r,   r,   r-   _send_frameT  sZ   



$
zWebSocketWriter._send_framerN   c                 C   s,   | j d u s
| j  rtd| j | d S )Nr   )r   
is_closingr   write)rR   rN   r,   r,   r-   r     s   zWebSocketWriter._writer   c                    .   t |tr|d}| |tjI dH  dS )zSend pong message.r   N)rq   r\   encoder   r   r<   rR   rU   r,   r,   r-   rD        

zWebSocketWriter.pongc                    r  )zSend ping message.r   N)rq   r\   r  r   r   r;   r  r,   r,   r-   rC     r  zWebSocketWriter.pingrB   c                    sN   t |tr|d}|r| |tj|I dH  dS | |tj|I dH  dS )r   r   N)rq   r\   r  r   r   r:   r9   )rR   rU   rB   r   r,   r,   r-   send  s   

zWebSocketWriter.sendr   rT   c                    sJ   t |tr|d}z| jt|| tjdI dH  W d| _dS d| _w )z<Close the websocket, sending the specified code and message.r   )r   NT)rq   r\   r  r   PACK_CLOSE_CODEr   r=   r   rY   r,   r,   r-   rE     s   

zWebSocketWriter.closerV   )r   )FN)r   r   )r   r   r   rK   r   Randomr   asyncio	Transportr   r.   r   rX   ri   r   r   r   rD   rC   r   r\   r  rE   r,   r,   r,   r-   r   =  s`    	


A	

r   )F)r   FF)Qr`   r	  collectionsrS   r   resysr   enumr   structr   typingr   r   r   r   r   r	   r
   r   r   base_protocolr   helpersr   streamsr   typedefsr   __all__r   r2   r.   __annotations__r   r   ri   unpack_fromr   r   unpackr   packr   r   r   r  rI   rK   
namedtuplerL   r   r?   r   r>   r   r   r   rb   	byteorderrc   r\   rj   rl   rr   rw   r   
_websocketrx   ImportErrorrz   compiler{   r|   r   r   r   r   r   r   r,   r,   r,   r-   <module>   s    ,






	"$4
  @