U '7`A@sBddlZddlZddlZddlZddlZddlmZmZmZm Z ddl Z ddl Z ddl m Z ddlmZddlmZddlmZmZddlmZmZmZmZmZmZmZmZmZmZdd l m!Z!dd l"m#Z#m$Z$dd l%m&Z&m'Z'dd l(m)Z)m*Z*dd l+m,Z,ddl-m.Z.dZ/dZ0e j1ddddGdddZ2Gddde.Z3dS)N)AnyIterableOptionalTuple) CIMultiDict)hdrs)AbstractStreamWriter) call_later set_result) WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWS_KEYWebSocketErrorWebSocketReaderWebSocketWriter WSMessage WSMsgType ws_ext_gen ws_ext_parse) ws_logger) EofStreamFlowControlDataQueue) JSONDecoder JSONEncoder)HTTPBadRequest HTTPException) BaseRequest)StreamResponse)WebSocketResponseWebSocketReadyrT)Z auto_attribsfrozenslotsc@s0eZdZUeed<eeed<edddZdS)r okprotocolreturncCs|jSN)r$selfr+A/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/web_ws.py__bool__0szWebSocketReady.__bool__N)__name__ __module__ __qualname__bool__annotations__rstrr-r+r+r+r,r +s  r c seZdZdZdddddddddeeeeeeeeeee dd fd d Z dd d d Z dd ddZ dd ddZ dd ddZeedfdd ZeedeeefdddZeeeefdddZeeeddddZeeddd Zeed d!d"Zeee d d#d$Zeeed d%d&Zeed d'd(Zeed d)d*ZdWe dd,d-d.Z!dXe dd,d/d0Z"dYeeedd1d2d3Z#dZe eedd1d4d5Z$d[e%j&d6e'eee(dd7d8d9Z)dd d:d;Z*dd?d@Z+d\eee,dAdBdCZ-ddDeeedAdEdFZ.ddDeee dAdGdHZ/e%j0ddIe1eee'dJdKdLZ2e ddMdNdOZ3dd dPdQZ4e,d dRdSZ5eddTdUdVZ6Z7S)]rFg$@NTr+i@)timeoutreceive_timeout autocloseautoping heartbeat protocolscompress max_msg_size) r4r5r6r7r8r9r:r;r'c stjdd||_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ ||_ ||_||_||_||_d|_|dk r|d|_d|_||_||_dS)Ne)ZstatusFrg@)super__init__ _protocols _ws_protocol_writer_reader_closed_closing _conn_lost _close_code_loop_waiting _exception_timeout_receive_timeout _autoclose _autoping _heartbeat _heartbeat_cb_pong_heartbeat_pong_response_cb _compress _max_msg_size) r*r4r5r6r7r8r9r:r; __class__r+r,r>8s.  zWebSocketResponse.__init__r&cCs8|jdk r|jd|_|jdk r4|jd|_dSr()rQcancelrOr)r+r+r,_cancel_heartbeat\s     z#WebSocketResponse._cancel_heartbeatcCs*||jdk r&t|j|j|j|_dSr()rWrNr _send_heartbeatrGrOr)r+r+r,_reset_heartbeates z"WebSocketResponse._reset_heartbeatcCsN|jdk rJ|jsJ|j|j|jdk r6|jt|j |j |j|_dSr() rNrCrGZ create_taskrApingrQrVr _pong_not_receivedrPr)r+r+r,rXms  z!WebSocketResponse._send_heartbeatcCs<|jdk r8|jjdk r8d|_d|_t|_|jjdS)NT)Z_req transportrCrFasyncio TimeoutErrorrIcloser)r+r+r,r[zs  z$WebSocketResponse._pong_not_received)requestr'csP|jdk r|jS||\}}t|IdH}|||||IdH|Sr()_payload_writer _pre_startr=prepare _post_startdrain)r*rar%writerZpayload_writerrTr+r,rds zWebSocketResponse.preparezCIMultiDict[str]cCs|j}d|tjdkr8td|tjdd|tjdkrftd|tjdd}tj |krdd|tj  d D}|D]}||j kr|}qqt d ||j |tjd}|d krtd |d|tj}z.|rtt|d krtd|dWn*tjk rDtd|ddYnXtt|t}ttjdtjdtj|i} d} d} |jr|tj} t | dd\} } | rt!| d| d} | | tj<|r|| tj <| || | fS)NZ websocketz@No WebSocket UPGRADE hdr: {} Can "Upgrade" only to "WebSocket".)textZupgradezNo CONNECTION upgrade hdr: {}cSsg|]}t|qSr+)r3strip).0protor+r+r, sz0WebSocketResponse._handshake..,u8Client protocols %r don’t overlap server-known ones %r)Z1387zUnsupported version: zHandshake error: FrT)isserver)r:rrZserver_notakeover)"headersgetrZUPGRADElowerrjrformatZ CONNECTIONZSEC_WEBSOCKET_PROTOCOLsplitr?rZwarningZSEC_WEBSOCKET_VERSIONZSEC_WEBSOCKET_KEYlenbase64Z b64decodebinasciiErrorZ b64encodehashlibZsha1encoderZdigestdecoderZSEC_WEBSOCKET_ACCEPTrRZSEC_WEBSOCKET_EXTENSIONSrr)r*rarsr%Z req_protocolsrlversionkeyZ accept_valZresponse_headers notakeoverr: extensionsZ enabledextr+r+r, _handshakes        zWebSocketResponse._handshakecCs`|j|_||\}}}}|d|j||||_|jj}t |j|||d}||fS)Nr<)r:r) rGrZ set_statusrsupdateZ force_closerR _protocolr]r)r*rarsr%r:rr]rgr+r+r,rcs  zWebSocketResponse._pre_start)rar%rgr'cCsX||_||_||j}t|jd|d|_|jt |j|j |j d|j ddS)Niloopr:F) r@rArYrGrrrBr%Z set_parserrrSrRZ keep_alive)r*rar%rgrr+r+r,reszWebSocketResponse._post_startcCsV|jdk rtdz||\}}}}Wntk rFtddYSXtd|SdS)NzAlready startedFT)rA RuntimeErrorrrr )r*ra_r%r+r+r, can_prepares zWebSocketResponse.can_preparecCs|jSr()rCr)r+r+r,closed szWebSocketResponse.closedcCs|jSr()rFr)r+r+r, close_code szWebSocketResponse.close_codecCs|jSr()r@r)r+r+r, ws_protocolszWebSocketResponse.ws_protocolcCs|jSr()rRr)r+r+r,r:szWebSocketResponse.compresscCs|jSr()rIr)r+r+r, exceptionszWebSocketResponse.exception)messager'cs(|jdkrtd|j|IdHdSNCall .prepare() first)rArrZr*rr+r+r,rZs zWebSocketResponse.pingcs(|jdkrtd|j|IdHdSr)rArpongrr+r+r,r!s zWebSocketResponse.pong)datar:r'csH|jdkrtdt|ts,tdt||jj|d|dIdHdS)Nrzdata argument must be str (%r)FZbinaryr:)rAr isinstancer3 TypeErrortypesendr*rr:r+r+r,send_str's   zWebSocketResponse.send_strcsN|jdkrtdt|tttfs2tdt||jj|d|dIdHdS)Nrz#data argument must be byte-ish (%r)Tr) rArrbytes bytearray memoryviewrrrrr+r+r, send_bytes.s  zWebSocketResponse.send_bytes)dumps)rr:rr'cs|j|||dIdHdS)Nr)r)r*rr:rr+r+r, send_json5szWebSocketResponse.send_jsoncs4|jr dS|jdkrtd|IdHd|_dS)NzResponse has not been startedT)Z _eof_sentrbrr`r)r+r+r, write_eof>s  zWebSocketResponse.write_eof)coder)rrr'c s|jdkrtd||j}|jdk rH|jsH|td|jIdH|jsd|_z,|j||IdH|j }| IdHWnVt j t j fk rd|_Yn4tk r}zd|_||_WYdSd}~XYnX|jrdS|j}z0tj|j|jd|IdH}W5QRXWnTt j k r:d|_Yn6tk rn}zd|_||_WYdSd}~XYnX|jtjkr|j|_dSd|_t |_dSdSdS)NrrTr\rF)rArrWrBrHrCZ feed_datar r`rbrfr^CancelledErrorr_rF ExceptionrIrD async_timeoutr4rJrGreadrrCLOSEr)r*rrreaderrgexcmsgr+r+r,r`GsP    zWebSocketResponse.close)r4r'c s`|jdkrtd|j}|jdk r*td|jrT|jd7_|jtkrPtdtS|jr^t Szh| |_z>t j |px|j|jd|jIdH}W5QRX|W5|j}t |dd|_XWntjtjfk rd|_Yntk r d|_|IdHttjddYStk rp}z2|j|_|j|jd IdHttj|dWYSd}~XYnVtk r}z6||_d|_d|_|IdHttj|dWYSd}~XYnX|jtj krd|_|j!|_|js\|j"r\|IdHnZ|jtj#krd|_nD|jtj$krD|j%rD|&|j!IdHqn|jtj'kr\|j%r\q|S) Nrz+Concurrent call to receive() is not allowedrzWebSocket connection is closed.Trr\r)r)(rBrrGrHrCrETHRESHOLD_CONNLOST_ACCESSr rDr Z create_futurer rr4rKrrYr^rr_rFrr`rrCLOSEDrrZERRORrrIrrrrLCLOSINGZPINGrMrZPONG)r*r4rZwaiterrrr+r+r,receive~sl      "$zWebSocketResponse.receiver4cs6||IdH}|jtjkr0td|j|j|jS)Nz.Received message {}:{!r} is not WSMsgType.TEXT)rrrZTEXTrrvrr*r4rr+r+r, receive_strs zWebSocketResponse.receive_strcs<||IdH}|jtjkr6td|jd|jd|jS)NzReceived message :z is not bytes)rrrZBINARYrrrr+r+r, receive_bytess zWebSocketResponse.receive_bytes)loadsr4)rr4r'cs|j|dIdH}||S)Nr)r)r*rr4rr+r+r, receive_jsonszWebSocketResponse.receive_json)rr'cs tddS)Nz"Cannot call .write() for websocket)r)r*rr+r+r,writeszWebSocketResponse.writecCs|Sr(r+r)r+r+r, __aiter__szWebSocketResponse.__aiter__cs,|IdH}|jtjtjtjfkr(t|Sr()rrrrrrStopAsyncIteration)r*rr+r+r, __anext__szWebSocketResponse.__anext__)rr'cCs|jdk r|j|dSr()rBZ set_exception)r*rr+r+r,_cancels zWebSocketResponse._cancel)r)r)N)N)N)N)8r.r/r0Z _length_checkfloatrr1rr3intr>rWrYrXr[rr rdrrrrcrer rpropertyrrrr: BaseExceptionrrrZrrrjsonrrrrrr`rrrrrrrrrrr __classcell__r+r+rTr,r4s$    P     7?  r)4r^ryrzr|rtypingrrrrrattrZ multidictrrhrabcr Zhelpersr r Zhttpr r rrrrrrrrlogrZstreamsrrZtypedefsrrZweb_exceptionsrrZ web_requestrZ web_responser__all__rsr rr+r+r+r,s.   0