Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/site-packages/aiohttp/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/site-packages/aiohttp/__pycache__/http_websocket.cpython-35.pyc



���Z�U�
@s
dZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
ddlmZm
Z
ddlmZdd	d
ddd
dddf	ZGdd�de�Zdd�eD�ZGdd�de�ZdZe
d�jZe
d�jZe
d�jZe
d�jZe
d�jZe
d�jZe
d�jZddZddZ ej!ddd d!g�Z"Gd"d
�d
e"�Z#e#ej$dd�Z%e#ej&dd�Z'Gd#d�de(�Z)Gd$d%�d%e(�Z*ej+Z,d&d'�e-d(�D�Z.d)d*�Z/er;e/Z0n5ydd+l1m2Z2e2Z0Wne3k
roe/Z0YnXe4ddd,d,g�Z5ej6d-�Z7ej6d.�Z8d/d0d1�Z9d2d/d/d3d4�Z:Gd5d6�d6e�Z;Gd7d�d�Z<Gd8d�d�Z=dS)9z%WebSocket protocol versions 13 and 8.�N)�IntEnum)�Struct�)�
NO_EXTENSIONS�noop)�	ws_logger�WS_CLOSED_MESSAGE�WS_CLOSING_MESSAGE�WS_KEY�WebSocketReader�WebSocketWriter�	WSMessage�WebSocketError�	WSMsgType�WSCloseCodec@sReZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dS)
ri�i�i�i�i�i�i�i�i�i�i�N)�__name__�
__module__�__qualname__�OKZ
GOING_AWAY�PROTOCOL_ERRORZUNSUPPORTED_DATA�INVALID_TEXTZPOLICY_VIOLATIONZMESSAGE_TOO_BIGZMANDATORY_EXTENSIONZINTERNAL_ERRORZSERVICE_RESTARTZTRY_AGAIN_LATER�rr�I/opt/alt/python35/lib64/python3.5/site-packages/aiohttp/http_websocket.pyrscCsh|]}t|��qSr)�int)�.0�irrr�	<setcomp>#s	rc@sveZdZdZdZdZdZdZdZdZ	dZ
d	ZeZeZ
eZeZeZe	Ze
ZeZd
S)rrr��	�
��iiN)rrr�CONTINUATION�TEXT�BINARY�PING�PONG�CLOSE�CLOSING�CLOSED�ERROR�text�binary�ping�pong�close�closing�closed�errorrrrrr&s"s$258EAFA5-E914-47DA-95CA-C5AB0DC85B11z!Hz!Qz!BBz!BBHz!BBQr���_WSMessageBase�type�data�extrac@s%eZdZdejdd�ZdS)r
�loadscCs
||j�S)zAReturn parsed JSON data.

        .. versionadded:: 0.22
        )r7)�selfr9rrr�jsonRszWSMessage.jsonN)rrrr;r9rrrrr
Pscs(eZdZdZ�fdd�Z�S)rz WebSocket protocol parser error.cs||_t�j|�dS)N)�code�super�__init__)r:r<�message)�	__class__rrr>as	zWebSocketError.__init__)rrr�__doc__r>rr)r@rr^sc@seZdZdZdS)�WSHandshakeErrorz#WebSocket protocol handshake error.N)rrrrArrrrrBfsrBcs5g|]+�t�fdd�td�D���qS)c3s|]}|�AVqdS)Nr)r�a)�brr�	<genexpr>nsz<listcomp>.<genexpr>r!)�bytes�range)rr)rDr�
<listcomp>ns	rHr!cCst|t�st|��t|�dks9t|��|rdd�|D�\}}}}|ddd�j|�|ddd�<|ddd�j|�|ddd�<|ddd�j|�|ddd�<|ddd�j|�|ddd�<dS)awWebsocket 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.

    �css|]}t|VqdS)N)�
_XOR_TABLE)r�nrrrrE�sz)_websocket_mask_python.<locals>.<genexpr>Nrr�)�
isinstance�	bytearray�AssertionError�len�	translate)�maskr7rCrD�c�drrr�_websocket_mask_pythonqs
)))rU)�_websocket_mask_cython�z�^(?:;\s*(?:(server_no_context_takeover)|(client_no_context_takeover)|(server_max_window_bits(?:=(\d+))?)|(client_max_window_bits(?:=(\d+))?)))*$zpermessage-deflate([^,]+)?FcCsU|s
dSd}d}x2tj|�D]!}|jd�}|sHd}Ptj|�}|r(d}|r�|jd�r�t|jd��}|dks�|dkr�d}q&|jd�r�d}PqG|jd�rt|jd��}|dks|dkrtd	��|jd
�r$d}Pq&|s&td|jd���q&W||fS)
NrFr�rIrT�zInvalid window sizerz#Extension for deflate not supported)rF)�_WS_EXT_RE_SPLIT�finditer�group�
_WS_EXT_RE�matchrrB)Zextstr�isserver�compress�
notakeover�extZdefextr^rrr�ws_ext_parse�s@rcrXcCs�|dks|dkr$td��dg}|s@|jd�|dkrc|jdt|��|rv|jd�dj|�S)	NrrXzCCompress wbits must between 9 and 15, zlib does not support wbits=8zpermessage-deflateZclient_max_window_bitszserver_max_window_bits=Zserver_no_context_takeoverz; )�
ValueError�append�str�join)r`r_Zserver_notakeoverZ
enabledextrrr�
ws_ext_gen�s	

rhc@s(eZdZdZdZdZdZdS)�
WSParserStaterrrLrIN)rrr�READ_HEADER�READ_PAYLOAD_LENGTH�READ_PAYLOAD_MASK�READ_PAYLOADrrrrri�sric@sOeZdZddd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
rTcCs�||_d|_g|_tj|_d|_d|_d|_t	�|_
d|_d|_d|_
d|_d|_d|_d|_||_dS)NF�r)�queue�_exc�_partialrirj�_state�_opcode�
_frame_fin�
_frame_opcoderN�_frame_payload�_tail�	_has_mask�_frame_mask�_payload_length�_payload_length_flag�_compressed�_decompressobj�	_compress)r:ror`rrrr>�s 													zWebSocketReader.__init__cCs|jj�dS)N)ro�feed_eof)r:rrrrszWebSocketReader.feed_eofcCsm|jrd|fSy|j|�SWnBtk
rh}z"||_|jj|�dSWYdd}~XnXdS)NTrn)Trn)rp�
_feed_data�	ExceptionroZ
set_exception)r:r7�excrrr�	feed_datas	
	zWebSocketReader.feed_datacCs�x�|j|�D]�\}}}}|rK|jrKtjdtj�|_|tjkr�t|�dkr+t|dd��d}|dkr�|t	kr�t
tjdj
|���y|dd�jd�}Wn:tk
r}zt
tjd�|�WYdd}~XnXttj||�}	n?|rUt
tjdj
|||���nttjdd	�}	|jj|	d�q|tjkr�|jjttj|d	�t|��q|tjkr�|jjttj|d	�t|��q|tjtjfkr9|jdkr9t
tjd
j
|���q|sj|tjkrW||_|jj|�q|jr�|tjkr�t
tjdj
|���|tjkr�|j}d|_|jj|�dj|j�}
|r�|jj|
t�}
|jj�|tjkr�y;|
jd�}|jjttj|d	�t|��Wq�tk
r�}zt
tjd�|�WYdd}~Xq�Xq|jjttj|
d	�t|
��qWdS)N�wbitsrri�zInvalid close code: {}zutf-8zInvalid UTF-8 text messagezInvalid close frame: {} {} {!r}�zUnexpected opcode={!r}z<The opcode in non-fin frame is expected to be zero, got {!r}rnF)Frn) �parse_framer}�zlib�
decompressobj�	MAX_WBITSrr'rP�UNPACK_CLOSE_CODE�ALLOWED_CLOSE_CODESrrr�format�decode�UnicodeDecodeErrorrr
ror�r%r&r#r$rsr"rqrerg�
decompress�_WS_DEFLATE_TRAILING�clear)r:r7�fin�opcode�payload�
compressedZ
close_codeZ
close_messager��msgZpayload_mergedr+rrrr�s�"	"	"$					

	#"	zWebSocketReader._feed_datacCszg}|jr&|j|d}|_d}t|�}x(|jtjkr�||dkr�|||d�}|d7}|\}}|d?d@}|d?d@}	|d?d@}
|d?d@}|d	@}|
s�|s�|	r�|jr�ttjd
��|dkr!|dkr!ttjd��|d?d@}
|d@}|dkrc|d
krcttjd��|j	s{|j
dkr�|	r�dnd|_
n|	r�ttjd
��||_	||_|
|_||_
tj|_nP|jtjkr|j
}|dkrr||dkrn|||d�}|d7}t|�d}||_|jr_tjntj|_qPn�|dkr�||dkr�|||d�}|d7}t|�d}||_|jr�tjntj|_qPn'||_|jrtjntj|_|jtjkrd||dkrc|||d�|_|d7}tj|_nP|jtjkr;|j}|j}||}||kr�|||_|j||d��|}n.d|_|j||||��||}|jdkr^|jr!t|j|�|j|j	|j||j
f�t�|_tj|_q;Pq;W||d�|_|S)z&Return the next frame from the socket.rnrr�rrY�rIrXz*Received frame with non-zero reserved bitsz!Received fragmented control frame��}z5Control frame payload cannot be larger than 125 bytesNTF�~r )rwrPrrrirjr~rrrrtr|rurxr{rk�UNPACK_LEN2rzrlrm�UNPACK_LEN3ryrv�extend�_websocket_maskrerN)r:�buf�frames�	start_posZ
buf_lengthr7Z
first_byteZsecond_byter�Zrsv1Zrsv2Zrsv3r�Zhas_mask�lengthr�Z	chunk_lenrrrr�ms�	

		
							
	
		
		

		
	
zWebSocketReader.parse_frameN)rrrr>rr�r�r�rrrrr�s
[c@s�eZdZdddedej�dddddd	�Zd
dd�Zd
dd�Zd
dd�Z	dd
dd�Z
dd
dd�Zd
S)r�use_maskF�limit�randomr`rracCsa||_||_||_|j|_||_||_d|_||_d|_d|_	dS)NFr)
�protocol�	transportr��	randranger`ra�_closing�_limit�_output_size�_compressobj)r:r�r�r�r�r�r`rarrrr>s								zWebSocketWriter.__init__NcCs�|jrtjd�d}|s+|jr�|dkr�|rStjd|�}n+|jsutjd|j�|_|j}|j|�}||j|jr�tj	ntj
�}|jt�r�|dd�}|dB}t
|�}|j}|rd}nd}|d	kr2td|B|B||B�}	nK|dkr_td|B|Bd	|B|�}	ntd|B|Bd|B|�}	|r|jdd
�}
|
jdd�}
t|�}t|
|�|jj|	|
|�|jt
|	�t
|
�t
|�7_nht
|�tkr9|jj|	�|jj|�n|jj|	|�|jt
|	�t
|�7_|j|jkr�d|_|jj�St�S)z<Send a frame over the websocket with message as its payload.z websocket connection is closing.rr r�NrI�@�r�rr4r�l���big���i)r�r�warningr`r��compressobjr��flushra�Z_FULL_FLUSH�Z_SYNC_FLUSH�endswithr�rPr��	PACK_LEN1�	PACK_LEN2�	PACK_LEN3r��to_bytesrNr�r��writer��MSG_SIZEr�r�Z
_drain_helperr)r:r?r�r`Zrsvr�Z
msg_lengthr�Zmask_bit�headerrRrrr�_send_framesR	
			
		!
,	
zWebSocketWriter._send_framerncCs1t|t�r|jd�}|j|tj�S)zSend pong message.zutf-8)rMrf�encoder�rr&)r:r?rrrr.PszWebSocketWriter.pongcCs1t|t�r|jd�}|j|tj�S)zSend ping message.zutf-8)rMrfr�r�rr%)r:r?rrrr-VszWebSocketWriter.pingcCsTt|t�r|jd�}|r:|j|tj|�S|j|tj|�SdS)z<Send a frame over the websocket with message as its payload.zutf-8N)rMrfr�r�rr$r#)r:r?r,r`rrr�send\s
zWebSocketWriter.sendi�cCsSt|t�r|jd�}z$|jt|�|dtj�SWdd|_XdS)z<Close the websocket, sending the specified code and message.zutf-8r�NT)rMrfr�r��PACK_CLOSE_CODErr'r�)r:r<r?rrrr/eszWebSocketWriter.close)rrr�
DEFAULT_LIMITr��Randomr>r�r.r-r�r/rrrrrs>	)>rA�collectionsr;r��re�sysr��enumr�structr�helpersrr�logr�__all__rr�rr
�unpack_fromr�r��unpackr��packr�r�r�r�r�r��
namedtupler5r
r)rr(r	r�rrB�	byteorderZnative_byteorderrGrJrUr�Z
_websocketrV�ImportErrorrFr��compiler]rZrcrhrirrrrrr�<module>sj		

	
		

4�