a
    }3eb                     @   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*< e%eAdd+d,d-ZBereBZCn.zdd.lDmEZE eEZCW n eFyD   eBZCY n0 e%g d/ZGee% e"d0< eHd1ZIeee>  e"d2< eHd3ZJeee>  e"d4< dCee> eKee!eKf d6d7d8ZLdDe!eKeKe>d:d;d<ZMG d=d> d>e	ZNG d?d@ d@ZOG dAdB dBZPdS )Ez%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__OKZ
GOING_AWAYPROTOCOL_ERRORZUNSUPPORTED_DATAZABNORMAL_CLOSUREINVALID_TEXTZPOLICY_VIOLATIONMESSAGE_TOO_BIGZMANDATORY_EXTENSIONINTERNAL_ERRORZSERVICE_RESTARTZTRY_AGAIN_LATERBAD_GATEWAY r%   r%   I/home/pi/bot/my_env/lib/python3.9/site-packages/aiohttp/http_websocket.pyr       s   r   c                 C   s   h | ]}t |qS r%   )int).0ir%   r%   r&   	<setcomp>0       r*   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                   @   s.   e Zd Zejdeegef edddZdS )r   )loads)rJ   returnc                C   s
   || j S )zAReturn parsed JSON data.

        .. versionadded:: 0.22
        )rH   )selfrJ   r%   r%   r&   json]   s    zWSMessage.jsonN)r   r   r   rM   rJ   r   r   r%   r%   r%   r&   r   \   s   r   c                       s8   e Zd ZdZeedd fddZedddZ  ZS )	r   z WebSocket protocol parser error.NcodemessagerK   c                    s   || _ t || d S N)rO   super__init__rL   rO   rP   	__class__r%   r&   rS   l   s    zWebSocketError.__init__rK   c                 C   s   t t| jd S )Nr   )r   strargsrL   r%   r%   r&   __str__p   s    zWebSocketError.__str__)	r   r   r   __doc__r'   rX   rS   r[   __classcell__r%   r%   rU   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&   r^   t   s   r^   native_byteorderc                    s&   g | ] t  fd dtdD qS )c                 3   s   | ]}| A V  qd S rQ   r%   )r(   abr%   r&   	<genexpr>|   r+   z<listcomp>.<genexpr>r1   )bytesrange)r(   r%   ra   r&   
<listcomp>|   r+   rf   r1   
_XOR_TABLE)maskrH   rK   c                 C   s   t |tsJ |t| dks&J | |rd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 )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 rQ   )rg   )r(   nr%   r%   r&   rc      r+   z)_websocket_mask_python.<locals>.<genexpr>Nr   r-      )
isinstance	bytearraylen	translate)rh   rH   r`   rb   cdr%   r%   r&   _websocket_mask_python   s    rr   )_websocket_mask_cython)r   r      rt   _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isserverrK   c                 C   s   | sdS d}d}t | D ]}|d}|s4d} qt|}|rd}|r|drxt|d}|dksr|dk rxd}q|drd} qq|d	rt|d	}|dks|dk rtd
|drd} qq|std|d q||fS )N)r   Fr   Fr      ri   r.   T   zInvalid window sizer-   z#Extension for deflate not supported)rw   finditergrouprv   matchr'   r^   )rx   ry   compress
notakeoverextZdefextr~   r%   r%   r&   ws_ext_parse   s>    





r   rz   )r   ry   server_notakeoverrK   c                 C   s^   | dk s| dkrt ddg}|s,|d | dk rF|dt|   |rT|d d|S )	Nr.   rz   zCCompress wbits must between 9 and 15, zlib does not support wbits=8zpermessage-deflateZclient_max_window_bitszserver_max_window_bits=Zserver_no_context_takeoverz; )
ValueErrorappendrX   join)r   ry   r   Z
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   r-   rk   ri   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ee eeddddZddddZe	e
ee	f d	d
dZe	e
ee	f d	ddZe	ee
eee eee f  dddZdS )r   TN)queuemax_msg_sizer   rK   c                 C   sp   || _ || _d | _t | _tj| _d | _d| _	d | _
t | _d| _d| _d | _d| _d| _d | _d | _|| _d S )NFr+   r   )r   _max_msg_size_excrm   _partialr   r   _state_opcode
_frame_fin_frame_opcode_frame_payload_tail	_has_mask_frame_mask_payload_length_payload_length_flag_compressed_decompressobj	_compress)rL   r   r   r   r%   r%   r&   rS      s"    zWebSocketReader.__init__rW   c                 C   s   | j   d S rQ   )r   feed_eofrZ   r%   r%   r&   r     s    zWebSocketReader.feed_eofrH   rK   c              
   C   sX   | j rd|fS z| |W S  tyR } z || _ | j| W Y d }~dS d }~0 0 d S )NT)Tr+   )r   
_feed_data	Exceptionr   Zset_exception)rL   rH   excr%   r%   r&   	feed_data  s    zWebSocketReader.feed_datac                 C   s  |  |D ]|\}}}}|r4| js4tjtj d| _|tjkr t|dkrt|d d d }|dk r|t	vrt
tjd| z|dd  d}W n2 ty } zt
tjd|W Y d }~n
d }~0 0 ttj||}	n4|rt
tjd| d	| d	|nttjdd
}	| j|	d q
|tjkrJ| jttj|d
t| q
|tjkrt| jttj|d
t| q
|tjtjfvr| jd u rt
tjd|q
|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rP| jd usDJ | j}d | _| j| | jrt| j| jkrt
tjdt| j| j|r| jt | j| j| j}
| jj rt| jj }t
tjd| j| | jn
t!| j}
| j"  |tjkrlz*|
d}| jttj|d
t| W n4 tyh } zt
tjd|W Y d }~n
d }~0 0 q
| jttj|
d
t|
 q
dS )N)wbitsr-   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   r7   rn   UNPACK_CLOSE_CODEr,   r   r   r    decodeUnicodeDecodeErrorr!   r   r   r   r5   r6   r3   r4   r   r2   r   extendr   r"   formatru   
decompressunconsumed_tailrd   clear)rL   rH   finopcodepayload
compressedZ
close_codeZclose_messager   msgZpayload_mergedleftr;   r%   r%   r&   r   &  s    
		



zWebSocketReader._feed_data)bufrK   c                 C   s  g }| j r| j | d }| _ d}t|}| jtjkrp|| dkrt|||d  }|d7 }|\}}|d? d@ }|d? d@ }	|d? d@ }
|d? d@ }|d	@ }|
s|s|	r| jsttjd
|dkr|dkrttjd|d? d@ }|d@ }|dkr
|dkr
ttjd| j	s| j
du r0|	r(dnd| _
n|	rBttjd
t|| _	|| _t|| _|| _tj| _nqt| jtjkr`| j}|dkr|| dkrt|||d  }|d7 }t|d }|| _| jrtjntj| _nqtn||dkrD|| dkrt|||d  }|d7 }t|d }|| _| jr4tjntj| _nqtn|| _| jrXtjntj| _| jtjkr|| dkrt|||d  | _|d7 }tj| _nqt| jtjkr(| j}| j}|| }||kr|| | _|||d  |}n$d| _|||||   || }| jdkrt| jrD| jdus8J t| j| || j	| j|| j
f t | _tj| _q(qtq(||d | _ |S )z&Return the next frame from the socket.r+   r   r-      r   r{      ri   rz   z*Received frame with non-zero reserved bitsz!Received fragmented control frame   }   z5Control frame payload cannot be larger than 125 bytesNTF~   r0   )r   rn   r   r   r   r   r   r   r    r   r   boolr   r   r   r   UNPACK_LEN2r   r   r   UNPACK_LEN3r   r   r   _websocket_maskr   rm   )rL   r   framesZ	start_posZ
buf_lengthrH   Z
first_byteZsecond_byter   Zrsv1Zrsv2Zrsv3r   Zhas_masklengthr   Z	chunk_lenr%   r%   r&   r     s    











zWebSocketReader.parse_frame)T)r   r   r   r   r   r'   r   rS   r   rd   r
   r   r   r   r   rm   r   r%   r%   r%   r&   r      s    
|r   c                
   @   s   e Zd Zdee dddeeje	e
ee
e	ddddZdee
ee
 ddd	d
ZeddddZdeddddZdeddddZdeeef e	ee
 ddddZde
eddddZdS ) r   Fr   )use_masklimitrandomr   r   N)protocol	transportr   r   r   r   r   rK   c                C   sB   || _ || _|| _|j| _|| _|| _d| _|| _d| _d | _	d S )NFr   )
r   r   r   	randranger   r   _closing_limit_output_size_compressobj)rL   r   r   r   r   r   r   r   r%   r%   r&   rS   >  s    zWebSocketWriter.__init__)rP   r   r   rK   c                    s  | j r|tj@ stdd}|s&| jr|dk r|rFtjtj| d}n"| jsbtjtj| j d| _| j}||}||	| j
rtjntj }|tr|dd }|dB }t|}| j}|rd}nd}|d	k rtd|B |B ||B }	n<|d
k rtd|B |B d	|B |}	ntd|B |B d|B |}	|r| dd}
|
dd}
t|}t|
| | |	|
 |  |  jt|	t|
 t| 7  _nLt|tkr| |	 | | n| |	|  |  jt|	t| 7  _| j| jkrd| _| j I dH  dS )<Send a frame over the websocket with message as its payload.!Cannot write to closing transportr   r0   )levelr   N@      r   rD   r   l    ri   big)r   r   r7   ConnectionResetErrorr   r   compressobjZ_BEST_SPEEDr   flushr   Z_FULL_FLUSHZ_SYNC_FLUSHendswithru   rn   r   	PACK_LEN1	PACK_LEN2	PACK_LEN3r   to_bytesrm   r   _writer   rC   r   r   Z_drain_helper)rL   rP   r   r   Zrsvr   Z
msg_lengthr   Zmask_bitheaderrh   r%   r%   r&   _send_frameT  sV    




$
zWebSocketWriter._send_framer   c                 C   s,   | j d u s| j  rtd| j | d S )Nr   )r   Z
is_closingr   write)rL   rH   r%   r%   r&   r     s    zWebSocketWriter._writer+   )rP   rK   c                    s,   t |tr|d}| |tjI dH  dS )zSend pong message.r   N)rl   rX   encoder   r   r6   rL   rP   r%   r%   r&   r>     s    

zWebSocketWriter.pongc                    s,   t |tr|d}| |tjI dH  dS )zSend ping message.r   N)rl   rX   r   r   r   r5   r   r%   r%   r&   r=     s    

zWebSocketWriter.ping)rP   r<   r   rK   c                    sJ   t |tr|d}|r0| |tj|I dH  n| |tj|I dH  dS )r   r   N)rl   rX   r   r   r   r4   r3   )rL   rP   r<   r   r%   r%   r&   send  s
    

zWebSocketWriter.sendr   rN   c                    sJ   t |tr|d}z(| jt|| tjdI dH  W d| _nd| _0 dS )z<Close the websocket, sending the specified code and message.r   )r   NT)rl   rX   r   r   PACK_CLOSE_CODEr   r7   r   rT   r%   r%   r&   r?     s    

zWebSocketWriter.close)N)r+   )r+   )FN)r   r+   )r   r   r   rE   r   Randomr   asyncio	Transportr   r'   r   rS   rd   r   r   r   r>   r=   r   rX   r   r?   r%   r%   r%   r&   r   =  s@    
A	  
r   )F)rz   FF)Qr\   r   collectionsrM   r   resysr   enumr   structr   typingr   r   r   r   r   r	   r
   r   r   Zbase_protocolr   Zhelpersr   Zstreamsr   Ztypedefsr   __all__r   r,   r'   __annotations__r   r   rd   unpack_fromr   r   unpackr   packr   r   r   r   rC   rE   
namedtuplerF   r   r9   r   r8   r   r   r   r^   	byteorderr_   rX   re   rg   rm   rr   r   Z
_websocketrs   ImportErrorru   compilerv   rw   r   r   r   r   r   r   r%   r%   r%   r&   <module>   sx   ,






	"
 4   @