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



ZU
@s
dZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
ddlmZm
Z
ddlmZdd	d
ddd
dddf	ZGdddeZddeDZGdddeZdZe
djZe
djZe
djZe
djZe
djZe
djZe
djZddZddZ ej!ddd d!gZ"Gd"d
d
e"Z#e#ej$ddZ%e#ej&ddZ'Gd#dde(Z)Gd$d%d%e(Z*ej+Z,d&d'e-d(DZ.d)d*Z/er;e/Z0n5ydd+l1m2Z2e2Z0Wne3k
roe/Z0YnXe4ddd,d,gZ5ej6d-Z7ej6d.Z8d/d0d1Z9d2d/d/d3d4Z:Gd5d6d6eZ;Gd7ddZ<Gd8ddZ=dS)9z%WebSocket protocol versions 13 and 8.N)IntEnum)Struct)
NO_EXTENSIONSnoop)	ws_loggerWS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWS_KEYWebSocketReaderWebSocketWriter	WSMessageWebSocketError	WSMsgTypeWSCloseCodec@sReZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dS)
riiiiiiiiiiiN)__name__
__module____qualname__ZOKZ
GOING_AWAYPROTOCOL_ERRORZUNSUPPORTED_DATAINVALID_TEXTZPOLICY_VIOLATIONZMESSAGE_TOO_BIGZMANDATORY_EXTENSIONZINTERNAL_ERRORZSERVICE_RESTARTZTRY_AGAIN_LATERrr/http_websocket.pyrscCsh|]}t|qSr)int).0irrr	<setcomp>#s	rc@sveZdZdZdZdZdZdZdZdZ	dZ
d	ZeZeZ
eZeZeZe	Ze
ZeZd
S)rrr	
iiN)rrrCONTINUATIONTEXTBINARYPINGPONGCLOSECLOSINGCLOSEDERRORtextbinarypingpongcloseclosingclosederrorrrrrr&s"s$258EAFA5-E914-47DA-95CA-C5AB0DC85B11z!Hz!Qz!BBz!BBHz!BBQr_WSMessageBasetypedataextrac@s%eZdZdejddZdS)r
loadscCs
||jS)zAReturn parsed JSON data.

        .. versionadded:: 0.22
        )r6)selfr8rrrjsonRszWSMessage.jsonN)rrrr:r8rrrrr
Pscs(eZdZdZfddZS)rz WebSocket protocol parser error.cs||_tj|dS)N)codesuper__init__)r9r;message)	__class__rrr=as	zWebSocketError.__init__)rrr__doc__r=rr)r?rr^sc@seZdZdZdS)WSHandshakeErrorz#WebSocket protocol handshake error.N)rrrr@rrrrrAfsrAcs5g|]+tfddtdDqS)c3s|]}|AVqdS)Nr)ra)brr	<genexpr>nsz<listcomp>.<genexpr>r )bytesrange)rr)rCr
<listcomp>ns	rGr cCst|tst|t|dks9t||rdd|D\}}}}|dddj||ddd<|dddj||ddd<|dddj||ddd<|dddj||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)rnrrrrDsz)_websocket_mask_python.<locals>.<genexpr>Nrr)
isinstance	bytearrayAssertionErrorlen	translate)maskr6rBrCcdrrr_websocket_mask_pythonqs
)))rT)_websocket_mask_cythonz^(?:;\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|jdrt|jd}|dks|dkrd}q&|jdrd}PqG|jdrt|jd}|dks|dkrtd	|jd
r$d}Pq&|s&td|jdq&W||fS)
NrFrrHrTzInvalid window sizerz#Extension for deflate not supported)rF)_WS_EXT_RE_SPLITfinditergroup
_WS_EXT_REmatchrrA)Zextstrisservercompress
notakeoverextZdefextr]rrrws_ext_parses@rbrWcCs|dks|dkr$tddg}|s@|jd|dkrc|jdt||rv|jddj|S)	NrrWzCCompress wbits must between 9 and 15, zlib does not support wbits=8zpermessage-deflateZclient_max_window_bitszserver_max_window_bits=Zserver_no_context_takeoverz; )
ValueErrorappendstrjoin)r_r^Zserver_notakeoverZ
enabledextrrr
ws_ext_gens	

rgc@s(eZdZdZdZdZdZdS)
WSParserStaterrrKrHN)rrrREAD_HEADERREAD_PAYLOAD_LENGTHREAD_PAYLOAD_MASKREAD_PAYLOADrrrrrhsrhc@sOeZdZdddZddZddZdd	Zd
dZdS)
rTcCs||_d|_g|_tj|_d|_d|_d|_t	|_
d|_d|_d|_
d|_d|_d|_d|_||_dS)NFr)queue_exc_partialrhri_state_opcode
_frame_fin
_frame_opcoderM_frame_payload_tail	_has_mask_frame_mask_payload_length_payload_length_flag_compressed_decompressobj	_compress)r9rnr_rrrr=s 													zWebSocketReader.__init__cCs|jjdS)N)rnfeed_eof)r9rrrr~szWebSocketReader.feed_eofcCsm|jrd|fSy|j|SWnBtk
rh}z"||_|jj|dSWYdd}~XnXdS)NTrm)Trm)ro
_feed_data	Exceptionrn
set_exception)r9r6excrrr	feed_datas	
	zWebSocketReader.feed_datacCsx|j|D]\}}}}|rK|jrKtjdtj|_|tjkrt|dkr+t|ddd}|dkr|t	krt
tjdj
|y|ddjd}Wn:tk
r}zt
tjd|WYdd}~XnXttj||}	n?|rUt
tjdj
|||nttjdd	}	|jj|	dq|tjkr|jjttj|d	t|q|tjkr|jjttj|d	t|q|tjtjfkr9|jdkr9t
tjd
j
|q|sj|tjkrW||_|jj|q|jr|tjkrt
tjdj
||tjkr|j}d|_|jj|dj|j}
|r|jj|
t}
|jj|tjkry;|
jd}|jjttj|d	t|Wqtk
r}zt
tjd|WYdd}~XqXq|jjttj|
d	t|
qWdS)NwbitsrrizInvalid 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}rmF)Frm) parse_framer|zlib
decompressobj	MAX_WBITSrr&rOUNPACK_CLOSE_CODEALLOWED_CLOSE_CODESrrrformatdecodeUnicodeDecodeErrorrr
rnrr$r%r"r#rrr!rprdrf
decompress_WS_DEFLATE_TRAILINGclear)r9r6finopcodepayload
compressedZ
close_codeZ
close_messagermsgZpayload_mergedr*rrrrs"	"	"$					

	#"	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rttjd
|dkr!|dkr!ttjd|d?d@}
|d@}|dkrc|d
krcttjd|j	s{|j
dkr|	rdnd|_
n|	rttjd
||_	||_|
|_||_
tj|_nP|jtjkr|j
}|dkrr||dkrn|||d}|d7}t|d}||_|jr_tjntj|_qPn|dkr||dkr|||d}|d7}t|d}||_|jrtjntj|_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
ft|_tj|_q;Pq;W||d|_|S)z&Return the next frame from the socket.rmrrrrXrHrWz*Received frame with non-zero reserved bitsz!Received fragmented control frame}z5Control frame payload cannot be larger than 125 bytesNTF~r)rvrOrqrhrir}rrrrsr{rtrwrzrjUNPACK_LEN2ryrkrlUNPACK_LEN3rxruextend_websocket_maskrdrM)r9bufZframesZ	start_posZ
buf_lengthr6Z
first_byteZsecond_byterZrsv1Zrsv2Zrsv3rZhas_masklengthrZ	chunk_lenrrrrms	

		
							
	
		
		

		
	
zWebSocketReader.parse_frameN)rrrr=r~rrrrrrrrs
[c@seZdZdddedejdddddd	Zd
ddZd
ddZd
ddZ	dd
ddZ
dd
ddZd
S)ruse_maskFlimitrandomr_rr`cCsa||_||_||_|j|_||_||_d|_||_d|_d|_	dS)NFr)
protocol	transportr	randranger_r`_closing_limit_output_size_compressobj)r9rrrrrr_r`rrrr=s								zWebSocketWriter.__init__NcCs|jrtjdd}|s+|jr|dkr|rStjd|}n+|jsutjd|j|_|j}|j|}||j|jrtj	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|jkrd|_|jjStS)z<Send a frame over the websocket with message as its payload.z websocket connection is closing.rrrNrH@rrr3rlbigi)rrwarningr_rcompressobjrflushr`Z_FULL_FLUSHZ_SYNC_FLUSHendswithrrOr	PACK_LEN1	PACK_LEN2	PACK_LEN3rto_bytesrMrrwriterMSG_SIZErrZ
_drain_helperr)r9r>rr_ZrsvrZ
msg_lengthrZmask_bitheaderrQrrr_send_framesR	
			
		!
,	
zWebSocketWriter._send_framermcCs1t|tr|jd}|j|tjS)zSend pong message.zutf-8)rLreencoderrr%)r9r>rrrr-PszWebSocketWriter.pongcCs1t|tr|jd}|j|tjS)zSend ping message.zutf-8)rLrerrrr$)r9r>rrrr,VszWebSocketWriter.pingcCsTt|tr|jd}|r:|j|tj|S|j|tj|SdS)z<Send a frame over the websocket with message as its payload.zutf-8N)rLrerrrr#r")r9r>r+r_rrrsend\s
zWebSocketWriter.sendicCsSt|tr|jd}z$|jt||dtjSWdd|_XdS)z<Close the websocket, sending the specified code and message.zutf-8rNT)rLrerrPACK_CLOSE_CODErr&r)r9r;r>rrrr.eszWebSocketWriter.close)rrr
DEFAULT_LIMITrRandomr=rr-r,rr.rrrrrs>	)>r@collectionsr:rresysrenumrstructrZhelpersrrlogr__all__rrrr
unpack_fromrrunpackrpackrrrrrr
namedtupler4r
r(rr'r	rrrA	byteorderZnative_byteorderrFrIrTrZ
_websocketrUImportErrorrErcompiler\rYrbrgrhrrrrrr<module>sj		

	
		

4
Back to Directory File Manager