HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/aiohttp/__pycache__/web_ws.cpython-310.pyc
o

���g�W�@s�UddlZddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZmZm
Z
ddlZddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZmZmZddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*ddl+m,Z,dd
l-m.Z.ddl/m0Z0ddl1m2Z2m3Z3ddl4m5Z5m6Z6ddl7m8Z8ddl9m:Z:ej;dkr�ddlZ<nddl<Z<dZ=dZ>ee?e@d<ejAdddd�Gdd�d��ZBGdd�de:�ZCdS)�N)�Any�Final�Iterable�Optional�Tuple�Union�cast)�CIMultiDict�)�hdrs)�WebSocketDataQueue)�
DEFAULT_LIMIT)�AbstractStreamWriter)�WSMessageTypeError)�calculate_timeout_when�
set_exception�
set_result)�WS_CLOSED_MESSAGE�WS_CLOSING_MESSAGE�WS_KEY�WebSocketError�WebSocketReader�WebSocketWriter�WSCloseCode�	WSMessage�	WSMsgType�
ws_ext_gen�ws_ext_parse)�_INTERNAL_RECEIVE_TYPES)�	ws_logger)�	EofStream)�JSONDecoder�JSONEncoder)�HTTPBadRequest�
HTTPException)�BaseRequest)�StreamResponse)��)�WebSocketResponse�WebSocketReadyr��THRESHOLD_CONNLOST_ACCESST)�auto_attribs�frozen�slotsc@s0eZdZUeed<eeed<defdd�ZdS)r*�ok�protocol�returncC�|jS�N)r0��self�r7�9/usr/local/lib/python3.10/dist-packages/aiohttp/web_ws.py�__bool__:�zWebSocketReady.__bool__N)�__name__�
__module__�__qualname__�bool�__annotations__r�strr9r7r7r7r8r*5s
r*cs~eZdZUdZeed<dZeeed<dZ	ee
ed<dZeeed<dZ
eed<dZeed<d	Zeed
<dZeeed<dZeejed<dZeed
<dZeejded<dZeeed<dZeed<dZeejed<dZeejed<dZeej ded<dddddddde!d�	dedeedededeede"ed ed!ed"ed#df�fd$d%�Z#d�d&d'�Z$d�d(d)�Z%d�d*d+�Z&d�d,d-�Z'd�d0d1�Z(d�d2d3�Z)d4ed#dfd5d6�Z*d�d7d8�Z+d9e,d#e-f�fd:d;�Z.d9e,d#e/d<eeeeffd=d>�Z0d9e,d#e/eee
ffd?d@�Z1d9e,dAeedBe
d#dfdCdD�Z2d9e,d#e3fdEdF�Z4e5d#efdGdH��Z6e5d#eefdIdJ��Z7e5d#eefdKdL��Z8e5d#e9eeffdMdN��Z:d�dOedPe;d#e;fdQdR�Z<d#eefdSdT�Z=d�dVe>d#dfdWdX�Z?d�dVe>d#dfdYdZ�Z@	d�dVe>d[eAd eed#dfd\d]�ZBd�d^ed eed#dfd_d`�ZCd�d^e>d eed#dfdadb�ZD	d�eEjFdc�d^e;d eeddeGd#dfdedf�ZHd�dgdh�ZIeJjKdUddi�djedVe>dked#efdldm�ZLdjeJd#dfdndo�ZMdjeJd#dfdpdq�ZNd�drds�ZOd�deed#ePfdtdu�ZQddv�deed#efdwdx�ZRddv�deed#e>fdydz�ZSeEjTdd{�d|eUdeed#e;fd}d~�ZVd^e>d#dfdd��ZWd�d�d��ZXd#ePfd�d��ZYd4ed#dfd�d��ZZ�Z[S)�r)F�
_length_checkN�_ws_protocol�_writer�_reader�_closed�_closingr�
_conn_lost�_close_code�_loop�_waiting�_close_wait�
_exceptiong�_heartbeat_when�
_heartbeat_cb�_pong_response_cb�
_ping_taskg$@Tr7i@)	�timeout�receive_timeout�	autoclose�autoping�	heartbeat�	protocols�compress�max_msg_size�writer_limitrQrRrSrTrUrVrWrXrYr2c	
sZt�jdd�||_||_||_||_||_||_|dur"|d|_||_	||_
|	|_dS)N�e)�statusg@)�super�__init__�
_protocols�_timeout�_receive_timeout�
_autoclose�	_autoping�
_heartbeat�_pong_heartbeat�	_compress�
_max_msg_size�
_writer_limit)
r6rQrRrSrTrUrVrWrXrY��	__class__r7r8r]Qs


zWebSocketResponse.__init__cCsD|��|jdur|j��d|_|jdur |j��d|_dSdSr4)�_cancel_pong_response_cbrN�cancelrPr5r7r7r8�_cancel_heartbeatks




�z#WebSocketResponse._cancel_heartbeatcCs"|jdur|j��d|_dSdSr4)rOrkr5r7r7r8rjts


�z*WebSocketResponse._cancel_pong_response_cbcCs�|jdurdS|��|j}|dur|jjnd}|j}|dus!J�|��}t||j|�}||_|j	dur>|�
||j�|_	dSdS)Nr+)rcrj�_req�	_protocol�_timeout_ceil_thresholdrI�timerrMrN�call_at�_send_heartbeat)r6�req�timeout_ceil_threshold�loop�now�whenr7r7r8�_reset_heartbeatys
�
�z"WebSocketResponse._reset_heartbeatcCs�d|_|j}|dur|jdusJ�|��}||jkr%|�|j|j�|_dS|j}|dur0|jj	nd}t
||j|�}|��|�||j
�|_|j�dtj�}tjdkr[tj||dd�}n|�|�}|��so||_|�|j�dS|�|�dS)Nr+�)r'�T)ru�eager_start)rNrIrCrprMrqrrrmrnrorrdrj�_pong_not_receivedrO�
send_framer�PING�sys�version_info�asyncio�Task�create_task�donerP�add_done_callback�_ping_task_done)r6rurvrsrtrw�coro�	ping_taskr7r7r8rr�s.
��

z!WebSocketResponse._send_heartbeat�task�asyncio.Task[None]cCs(|��s|��}r|�|�d|_dS)z*Callback for when the ping task completes.N)�	cancelled�	exception�_handle_ping_pong_exceptionrP)r6r��excr7r7r8r��s

z!WebSocketResponse._ping_task_donecCs0|jdur|jjdur|�t���dSdSdSr4)rm�	transportr�r��TimeoutErrorr5r7r7r8r|�s�z$WebSocketResponse._pong_not_receivedr�cCsb|jrdS|��|�tj�||_|jr+|js-|jdur/|j�	t
tj|d�d�dSdSdSdS)z5Handle exceptions raised during ping/pong processing.Nr)
rE�_set_closed�_set_code_close_transportr�ABNORMAL_CLOSURErLrJrFrD�	feed_datarr�ERROR�r6r�r7r7r8r��s�z-WebSocketResponse._handle_ping_pong_exceptioncCsd|_|��dS)zdSet the connection to closed.

        Cancel any heartbeat timers and set the closed flag.
        TN)rErlr5r7r7r8r��szWebSocketResponse._set_closed�requestc�s^�|jdur	|jS|�|�\}}t��|�IdH}|dusJ�|�|||�|��IdH|Sr4)�_payload_writer�
_pre_startr\�prepare�_post_start�drain)r6r�r1�writer�payload_writerrhr7r8r��s�
zWebSocketResponse.preparezCIMultiDict[str]cCs�|j}d|�tjd�����krtd�|�tj��d��d|�tjd���vr3td�|�tj��d��d}tj	|vr]dd�|tj	�
d	�D�}|D]}||jvrT|}n	qIt�
d
||j�|�tjd�}|dvrptd|��d��|�tj�}z|r�tt�|��d
kr�td|��d��Wntjy�td|��d�d�wt�t�|��t������}ttjdtjdtj|i�}	d}
d}|jr�|�tj�}t |dd�\}}
|r�t!|d|
d�}
|
|	tj<|r�||	tj	<|	|||
fS)N�	websocket�z@No WebSocket UPGRADE hdr: {}
 Can "Upgrade" only to "WebSocket".)�text�upgradezNo CONNECTION upgrade hdr: {}cSsg|]}t|����qSr7)r@�strip)�.0�protor7r7r8�
<listcomp>�s
��z0WebSocketResponse._handshake.<locals>.<listcomp>�,u8Client protocols %r don’t overlap server-known ones %r)�13�8�7zUnsupported version: �zHandshake error: FrT)�isserver)rWr��server_notakeover)"�headers�getr�UPGRADE�lowerr�r#�format�
CONNECTION�SEC_WEBSOCKET_PROTOCOL�splitr^r�warning�SEC_WEBSOCKET_VERSION�SEC_WEBSOCKET_KEY�len�base64�	b64decode�binascii�Error�	b64encode�hashlib�sha1�encoder�digest�decoder	�SEC_WEBSOCKET_ACCEPTre�SEC_WEBSOCKET_EXTENSIONSrr)r6r�r�r1�
req_protocolsr��version�key�
accept_val�response_headers�
notakeoverrW�
extensions�
enabledextr7r7r8�
_handshake�s��
��
�
���������

�zWebSocketResponse._handshakecCsp|j|_|�|�\}}}}|�d�|j�|�|��||_|jj}|dus)J�t	|j||||j
d�}||fS)NrZ)rWr��limit)rIr��
set_statusr��update�force_closerernr�rrg)r6r�r�r1rWr�r�r�r7r7r8r�.s 
�zWebSocketResponse._pre_startr1r�cCsh||_||_|��|j}|dusJ�t|jd|d�|_|j�t	|j|j
t|j�d��|j�
d�dS)Ni)ru�rWF)rBrCrxrIrrnrDr1�
set_parserrrfr>re�
keep_alive)r6r�r1r�rur7r7r8r�Cs��zWebSocketResponse._post_startcCsP|jdur	td��z|�|�\}}}}Wnty"tdd�YSwtd|�S)NzAlready startedFT)rC�RuntimeErrorr�r$r*)r6r��_r1r7r7r8�can_prepareVs
�
zWebSocketResponse.can_preparecCr3r4)rEr5r7r7r8�closed`�zWebSocketResponse.closedcCr3r4)rHr5r7r7r8�
close_codedr�zWebSocketResponse.close_codecCr3r4)rBr5r7r7r8�ws_protocolhr�zWebSocketResponse.ws_protocolcCr3r4)rer5r7r7r8rWlr�zWebSocketResponse.compress�name�defaultcCs0|j}|dur	|S|j}|dur|S|�||�S)z}Get optional transport information.

        If no value associated with ``name`` is found, ``default`` is returned.
        N)rCr��get_extra_info)r6r�r�r�r�r7r7r8r�psz WebSocketResponse.get_extra_infocCr3r4)rLr5r7r7r8r�}r:zWebSocketResponse.exceptionry�messagec��.�|jdur
td��|j�|tj�IdHdS�N�Call .prepare() first)rCr�r}rr~�r6r�r7r7r8�ping�s�
zWebSocketResponse.pingc�r�r�)rCr�r}r�PONGr�r7r7r8�pong�s�
zWebSocketResponse.pong�opcodec�s.�|jdur
td��|j�|||�IdHdS)z Send a frame over the websocket.Nr�)rCr�r})r6r�r�rWr7r7r8r}�s�
zWebSocketResponse.send_frame�datac�sR�|jdur
td��t|t�stdt|���|jj|�d�tj	|d�IdHdS)Nr�zdata argument must be str (%r)zutf-8r�)
rCr��
isinstancer@�	TypeError�typer}r�r�TEXT�r6r�rWr7r7r8�send_str�s�

�zWebSocketResponse.send_strc�sR�|jdur
td��t|tttf�stdt|���|jj|t	j
|d�IdHdS)Nr�z#data argument must be byte-ish (%r)r�)rCr�r��bytes�	bytearray�
memoryviewr�r�r}r�BINARYr�r7r7r8�
send_bytes�s�
zWebSocketResponse.send_bytes)�dumpsr�c�s�|j||�|d�IdHdS)Nr�)r�)r6r�rWr�r7r7r8�	send_json�s�zWebSocketResponse.send_jsonc�s6�|jrdS|jdurtd��|��IdHd|_dS)NzResponse has not been startedT)�	_eof_sentr�r��closer5r7r7r8�	write_eof�s�

zWebSocketResponse.write_eof)�coder�r�r�r�c
�s��|jdur
td��|jrdS|��z|j�||�IdH|j}|dus'J�|r0|��IdHWn-tjtj	fyC|�
tj��t
y^}z||_|�
tj�WYd}~dSd}~ww|j}|dushJ�|jr�|jdusrJ�|jdusyJ�|j��|_|�td�|jIdH|jr�|��dSz;t�|j�4IdH�#	|��IdH}|jtjur�|�
|j�	Wd�IdHWdSq�1IdHs�wYWdStjy�|�
tj��t
y�}z||_|�
tj�WYd}~dSd}~ww)zClose websocket connection.Nr�FTr) rCr�rEr�r�r�r�r��CancelledErrorr�r�rr��	ExceptionrLrDrJrIrK�
create_futurer�rrF�_close_transport�
async_timeoutrQr_�readr�r�CLOSEr�)r6r�r�r�r�r��reader�msgr7r7r8r��sh�
�������zWebSocketResponse.closecCsd|_||_|��dS)z6Set the close code and mark the connection as closing.TN)rFrHrl�r6r�r7r7r8�_set_closing�szWebSocketResponse._set_closingcCs||_|��dS)z+Set the close code and close the transport.N)rHr�rr7r7r8r��sz+WebSocketResponse._set_code_close_transportcCs.|jdur|jjdur|jj��dSdSdS)zClose the transport.N)rmr�r�r5r7r7r8r��s�z"WebSocketResponse._close_transportc
�s��|jdur
td��|p|j}	|jrtd��|jr,|jd7_|jtkr*td��tS|jr1t	SzXd|_zD|r`t
�|�4IdH�|j��IdH}Wd�IdHn1IdHsZwYn|j��IdH}|�
�Wd|_|jryt|jd�nd|_|jr�t|jd�wwWnqtjy��ty�tj|_|��IdHttjdd�YSty�}z|j|_|j|jd�IdHttj|d�WYd}~Sd}~wty�}z||_|�tj �|��IdHttj|d�WYd}~Sd}~ww|j!t"v�r|S|j!tj#u�r#|�|j$�|j�s!|j%�r!|jdd�IdH|S|j!tj&u�r2|�tj�|S|j!tj'u�rG|j(�rG|�)|j$�IdHq|j!tj*u�rS|j(�rSq|S)	Nr�Tz+Concurrent call to receive() is not allowedr
zWebSocket connection is closed.F)r�)r�)+rDr�r`rJrErGr,rrFrr�rQrrxrKrr�r�r r�OKrHr�rr�CLOSEDrr�r�r�rLrr�r�rrr�ra�CLOSINGr~rbr�r�)r6rQrRrr�r7r7r8�receive�s��


(��
�������	��zWebSocketResponse.receive�rQc��D�|�|�IdH}|jtjurtd|j�d|j�d���tt|j�S)N�Received message �:z is not WSMsgType.TEXT)r	r�rr�rr�rr@�r6rQrr7r7r8�receive_strF���zWebSocketResponse.receive_strc�r)Nrr
z is not WSMsgType.BINARY)r	r�rr�rr�rr�rr7r7r8�
receive_bytesNrzWebSocketResponse.receive_bytes)�loadsrQrc�s�|j|d�IdH}||�S)Nr
)r)r6rrQr�r7r7r8�receive_jsonVs�zWebSocketResponse.receive_jsonc�s
�td��)Nz"Cannot call .write() for websocket)r�)r6r�r7r7r8�write\s�zWebSocketResponse.writecCs|Sr4r7r5r7r7r8�	__aiter___szWebSocketResponse.__aiter__c�s.�|��IdH}|jtjtjtjfvrt�|Sr4)r	r�rrrr�StopAsyncIteration)r6rr7r7r8�	__anext__bs
�zWebSocketResponse.__anext__cCs,d|_|��|jdurt|j|�dSdS)NT)rFrlrDrr�r7r7r8�_cancelhs

�zWebSocketResponse._cancel)r2N)r�r�r2Nr4)ry)r2r))\r;r<r=rAr>r?rBrr@rCrrDrrErFrG�intrHrIr��AbstractEventLooprJrK�FuturerL�
BaseExceptionrM�floatrN�TimerHandlerOrPr�r
rr]rlrjrxrrr�r|r�r�r%rr�rr�r�r�r*r��propertyr�r�r�rrWrr�r�r�r�r�rr}r�r��jsonr�r"r�r�rrr�rr�r�rr	rrrr!rrrrr�
__classcell__r7r7rhr8r)>s
�������	�
���

	


#


�
�U���
�

����
�	
�����
�
	
����
�7
J	���
�
r))Dr�r�r�r�r r�typingrrrrrrr�attr�	multidictr	r�r�_websocket.readerr�_websocket.writerr
�abcr�client_exceptionsr�helpersrrr�httprrrrrrrrrrr�http_websocketr�logr�streamsr �typedefsr!r"�web_exceptionsr#r$�web_requestr%�web_responser&r�r��__all__r,rr?�sr*r)r7r7r7r8�<module>s>
$4