
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    'â7`�A  ã                   @   sB  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mZmZm	Z	 d dl
Z
d dlZd dlmZ ddlmZ ddlmZ ddlmZmZ ddlmZ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#m$Z$ ddl%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z. dZ/dZ0ej1dddd�G dd„ dƒƒZ2G dd„ de.ƒZ3dS )é    N)ÚAnyÚIterableÚOptionalÚTuple)ÚCIMultiDicté   )Úhdrs)ÚAbstractStreamWriter)Ú
call_laterÚ
set_result)
ÚWS_CLOSED_MESSAGEÚWS_CLOSING_MESSAGEÚWS_KEYÚWebSocketErrorÚWebSocketReaderÚWebSocketWriterÚ	WSMessageÚ	WSMsgTypeÚ
ws_ext_genÚws_ext_parse)Ú	ws_logger)Ú	EofStreamÚFlowControlDataQueue)ÚJSONDecoderÚJSONEncoder)ÚHTTPBadRequestÚHTTPException)ÚBaseRequest)ÚStreamResponse)ÚWebSocketResponseÚWebSocketReadyr   é   T)Zauto_attribsÚfrozenÚslotsc                   @   s0   e Zd ZU eed< ee ed< edœdd„ZdS )r    ÚokÚprotocol©Úreturnc                 C   s   | j S ©N)r$   ©Úself© r+   úA/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/web_ws.pyÚ__bool__0   s    zWebSocketReady.__bool__N)Ú__name__Ú
__module__Ú__qualname__ÚboolÚ__annotations__r   Ústrr-   r+   r+   r+   r,   r    +   s   
r    c                       s   e Zd ZdZdddddddddœeee eeee ee ee	ddœ	‡ fd	d
„Z
ddœdd„Zddœdd„Zddœdd„Zddœdd„Zeedœ‡ fdd„Zeedeeef dœdd„Zeeeef dœdd„Zeeeddœdd„Zeedœdd „Zeedœd!d"„ƒZeee	 dœd#d$„ƒZeee dœd%d&„ƒZeedœd'd(„ƒZee dœd)d*„ZdWe dd,œd-d.„Z!dXe dd,œd/d0„Z"dYeee dd1œd2d3„Z#dZe ee dd1œd4d5„Z$d[e%j&d6œe'ee e(dd7œd8d9„Z)ddœd:d;„Z*d<d+d=œe	e ed>œd?d@„Z+d\ee e,dAœdBdC„Z-ddDœee edAœdEdF„Z.ddDœee e dAœdGdH„Z/e%j0ddIœe1ee e'dJœdKdL„Z2e ddMœdNdO„Z3d dœdPdQ„Z4e,dœdRdS„Z5eddTœdUdV„Z6‡  Z7S )]r   Fg      $@NTr+   i  @ )ÚtimeoutÚreceive_timeoutÚ	autocloseÚautopingÚ	heartbeatÚ	protocolsÚcompressÚmax_msg_size)	r4   r5   r6   r7   r8   r9   r:   r;   r'   c          	         sœ   t ƒ jdd� || _d | _d | _d | _d| _d| _d| _d | _	d | _
d | _d | _|| _|| _|| _|| _|| _d | _|d k	r†|d | _d | _|| _|| _d S )Née   )ÚstatusFr   g       @)Ú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*   r4   r5   r6   r7   r8   r9   r:   r;   ©Ú	__class__r+   r,   r?   8   s.    
zWebSocketResponse.__init__r&   c                 C   s8   | j d k	r| j  ¡  d | _ | jd k	r4| j ¡  d | _d S r(   )rR   ÚcancelrP   r)   r+   r+   r,   Ú_cancel_heartbeat\   s    



z#WebSocketResponse._cancel_heartbeatc                 C   s*   |   ¡  | jd k	r&t| j| j| jƒ| _d S r(   )rX   rO   r
   Ú_send_heartbeatrH   rP   r)   r+   r+   r,   Ú_reset_heartbeate   s    
  ÿz"WebSocketResponse._reset_heartbeatc                 C   sN   | j d k	rJ| jsJ| j | j ¡ ¡ | jd k	r6| j ¡  t| j	| j
| jƒ| _d S r(   )rO   rD   rH   Zcreate_taskrB   ÚpingrR   rW   r
   Ú_pong_not_receivedrQ   r)   r+   r+   r,   rY   m   s    

  ÿz!WebSocketResponse._send_heartbeatc                 C   s<   | j d k	r8| j jd k	r8d| _d| _t ¡ | _| j j ¡  d S )NTéî  )Z_reqÚ	transportrD   rG   ÚasyncioÚTimeoutErrorrJ   Úcloser)   r+   r+   r,   r\   z   s
    
z$WebSocketResponse._pong_not_received)Úrequestr'   c                 ƒ   s\   | j d k	r| j S |  |¡\}}tƒ  |¡I d H }|d k	s<t‚|  |||¡ | ¡ I d H  |S r(   )Ú_payload_writerÚ
_pre_startr>   ÚprepareÚAssertionErrorÚ_post_startÚdrain)r*   rb   r%   ÚwriterZpayload_writerrU   r+   r,   re   �   s    
zWebSocketResponse.preparezCIMultiDict[str]c                 C   sæ  |j }d| tjd¡ ¡  ¡ kr8td | tj¡¡d�‚d| tjd¡ ¡ krftd | tj¡¡d�‚d }tj	|krºdd„ |tj	  
d	¡D ƒ}|D ]}|| jkr’|} qºq’t d
|| j¡ | tjd¡}|dkràtd|› �d�‚| tj¡}z.|�rtt |¡ƒdk�rtd|›�d�‚W n* tjk
�rD   td|›�d�d ‚Y nX t t | ¡ t ¡ ¡ ¡ ¡ }ttjdtjdtj|iƒ}	d}
d}| j�rÊ| tj¡}t |dd�\}}
|�rÊt!|d|
d�}||	tj< |�rÚ||	tj	< |	|||
fS )NZ	websocketÚ z@No WebSocket UPGRADE hdr: {}
 Can "Upgrade" only to "WebSocket".)ÚtextZupgradezNo CONNECTION upgrade hdr: {}c                 S   s   g | ]}t | ¡ ƒ‘qS r+   )r3   Ústrip)Ú.0Úprotor+   r+   r,   Ú
<listcomp>£   s   ÿz0WebSocketResponse._handshake.<locals>.<listcomp>ú,u8   Client protocols %r donâ€™t overlap server-known ones %r)Z13Ú8Ú7zUnsupported version: é   zHandshake error: Fr   T)Úisserver)r:   rt   Zserver_notakeover)"ÚheadersÚgetr   ZUPGRADEÚlowerrl   r   ÚformatZ
CONNECTIONZSEC_WEBSOCKET_PROTOCOLÚsplitr@   r   ÚwarningZSEC_WEBSOCKET_VERSIONZSEC_WEBSOCKET_KEYÚlenÚbase64Ú	b64decodeÚbinasciiÚErrorÚ	b64encodeÚhashlibZsha1Úencoder   ÚdigestÚdecoder   ZSEC_WEBSOCKET_ACCEPTrS   ZSEC_WEBSOCKET_EXTENSIONSr   r   )r*   rb   ru   r%   Zreq_protocolsrn   ÚversionÚkeyZ
accept_valZresponse_headersÚ
notakeoverr:   Ú
extensionsZ
enabledextr+   r+   r,   Ú
_handshake�   s€    ÿ
ýÿ
ÿÿ
þ
ýÿ   ýÿ  ÿ

zWebSocketResponse._handshakec                 C   sl   |j | _ |  |¡\}}}}|  d¡ | j |¡ |  ¡  || _|jj}|d k	sRt	‚t
|j|||d�}||fS )Nr<   )r:   r‡   )rH   r‰   Z
set_statusru   ÚupdateZforce_closerS   Ú	_protocolr^   rf   r   )r*   rb   ru   r%   r:   r‡   r^   ri   r+   r+   r,   rd   Ý   s    
   ÿzWebSocketResponse._pre_start)rb   r%   ri   r'   c                 C   sd   || _ || _|  ¡  | j}|d k	s&t‚t|jd|d�| _|j 	t
| j| j| jd�¡ |j d¡ d S )Ni   ©Úloop©r:   F)rA   rB   rZ   rH   rf   r   r‹   rC   r%   Z
set_parserr   rT   rS   Z
keep_alive)r*   rb   r%   ri   r�   r+   r+   r,   rg   î   s    ÿzWebSocketResponse._post_startc                 C   sV   | j d k	rtdƒ‚z|  |¡\}}}}W n tk
rF   tdd ƒ Y S X td|ƒS d S )NzAlready startedFT)rB   ÚRuntimeErrorr‰   r   r    )r*   rb   Ú_r%   r+   r+   r,   Úcan_prepareÿ   s    
zWebSocketResponse.can_preparec                 C   s   | j S r(   )rD   r)   r+   r+   r,   Úclosed	  s    zWebSocketResponse.closedc                 C   s   | j S r(   )rG   r)   r+   r+   r,   Ú
close_code  s    zWebSocketResponse.close_codec                 C   s   | j S r(   )rA   r)   r+   r+   r,   Úws_protocol  s    zWebSocketResponse.ws_protocolc                 C   s   | j S r(   )rS   r)   r+   r+   r,   r:     s    zWebSocketResponse.compressc                 C   s   | j S r(   )rJ   r)   r+   r+   r,   Ú	exception  s    zWebSocketResponse.exceptionó    )Úmessager'   c                 Ã   s(   | j d krtdƒ‚| j  |¡I d H  d S ©NúCall .prepare() first)rB   r�   r[   ©r*   r—   r+   r+   r,   r[     s    
zWebSocketResponse.pingc                 Ã   s(   | j d krtdƒ‚| j  |¡I d H  d S r˜   )rB   r�   Úpongrš   r+   r+   r,   r›   !  s    
zWebSocketResponse.pong)Údatar:   r'   c                 Ã   sH   | j d krtdƒ‚t|tƒs,tdt|ƒ ƒ‚| j j|d|d�I d H  d S )Nr™   zdata argument must be str (%r)F©Úbinaryr:   )rB   r�   Ú
isinstancer3   Ú	TypeErrorÚtypeÚsend©r*   rœ   r:   r+   r+   r,   Úsend_str'  s
    

zWebSocketResponse.send_strc                 Ã   sN   | j d krtdƒ‚t|tttfƒs2tdt|ƒ ƒ‚| j j|d|d�I d H  d S )Nr™   z#data argument must be byte-ish (%r)Tr�   )	rB   r�   rŸ   ÚbytesÚ	bytearrayÚ
memoryviewr    r¡   r¢   r£   r+   r+   r,   Ú
send_bytes.  s
    
zWebSocketResponse.send_bytes)Údumps)rœ   r:   r©   r'   c                Ã   s   | j ||ƒ|d�I d H  d S )NrŽ   )r¤   )r*   rœ   r:   r©   r+   r+   r,   Ú	send_json5  s    zWebSocketResponse.send_jsonc                 Ã   s4   | j r
d S | jd krtdƒ‚|  ¡ I d H  d| _ d S )NzResponse has not been startedT)Z	_eof_sentrc   r�   ra   r)   r+   r+   r,   Ú	write_eof>  s    
zWebSocketResponse.write_eoféè  )Úcoder—   )r­   r—   r'   c             
   Ã   sÎ  | j d krtdƒ‚|  ¡  | j}|d k	s,t‚| jd k	rT| jsT| td¡ | jI d H  | j�sÆd| _z8| j  	||¡I d H  | j
}|d k	sŠt‚| ¡ I d H  W nV tjtjfk
r¾   d| _‚ Y n4 tk
rð } zd| _|| _W Y ¢dS d }~X Y nX | j� rþdS | j}|d k	�st‚z0tj| j| jd�� | ¡ I d H }W 5 Q R X W nT tjk
�rb   d| _‚ Y n6 tk
�r– } zd| _|| _W Y ¢dS d }~X Y nX |jtjk�r²|j| _dS d| _t ¡ | _dS dS d S )Nr™   r   Tr]   rŒ   F)rB   r�   rX   rC   rf   rI   rD   Z	feed_datar   ra   rc   rh   r_   ÚCancelledErrorr`   rG   Ú	ExceptionrJ   rE   Úasync_timeoutr4   rK   rH   Úreadr¡   r   ÚCLOSErœ   )r*   r­   r—   Úreaderri   ÚexcÚmsgr+   r+   r,   ra   G  sV    

zWebSocketResponse.close)r4   r'   c              
   Ã   sl  | j d krtdƒ‚| j}|d k	s$t‚| jd k	r6tdƒ‚| jr`|  jd7  _| jtkr\tdƒ‚tS | j	rjt
S zh| ¡ | _z>tj|p„| j| jd�� | j  ¡ I d H }W 5 Q R X |  ¡  W 5 | j}t|dƒ d | _X W � nþ tjtjfk
rö   d| _‚ Y nÜ tk
�r,   d| _|  ¡ I d H  ttjd d ƒ Y S  tk
�r| } z2|j| _| j|jd	�I d H  ttj|d ƒ W Y ¢S d }~X Y nV tk
�rÐ } z6|| _d| _	d| _|  ¡ I d H  ttj|d ƒ W Y ¢S d }~X Y nX |j tj!k�rd| _	|j"| _| j�sh| j#�rh|  ¡ I d H  nZ|j tj$k�r$d| _	nD|j tj%k�rP| j&�rP|  '|j"¡I d H  q$n|j tj(k�rh| j&�rhq$|S )
Nr™   z+Concurrent call to receive() is not allowedr   zWebSocket connection is closed.TrŒ   r]   r¬   )r­   ))rC   r�   rH   rf   rI   rD   rF   ÚTHRESHOLD_CONNLOST_ACCESSr   rE   r   Zcreate_futurer   r°   r4   rL   r±   rZ   r_   r®   r`   rG   r   ra   r   r   ÚCLOSEDr   r­   ÚERRORr¯   rJ   r¡   r²   rœ   rM   ÚCLOSINGZPINGrN   r›   ZPONG)r*   r4   r�   Úwaiterrµ   r´   r+   r+   r,   Úreceive~  sn    



 ÿ
"$zWebSocketResponse.receive©r4   c                Ã   s6   |   |¡I d H }|jtjkr0td |j|j¡ƒ‚|jS )Nz.Received message {}:{!r} is not WSMsgType.TEXT)r»   r¡   r   ZTEXTr    rx   rœ   ©r*   r4   rµ   r+   r+   r,   Úreceive_str½  s     ÿÿzWebSocketResponse.receive_strc                Ã   s<   |   |¡I d H }|jtjkr6td|j› d|j›d�ƒ‚|jS )NzReceived message ú:z is not bytes)r»   r¡   r   ZBINARYr    rœ   r½   r+   r+   r,   Úreceive_bytesÇ  s    zWebSocketResponse.receive_bytes)Úloadsr4   )rÁ   r4   r'   c                Ã   s   | j |d�I d H }||ƒS )Nr¼   )r¾   )r*   rÁ   r4   rœ   r+   r+   r,   Úreceive_jsonÍ  s    zWebSocketResponse.receive_json)rœ   r'   c                 Ã   s   t dƒ‚d S )Nz"Cannot call .write() for websocket)r�   )r*   rœ   r+   r+   r,   ÚwriteÓ  s    zWebSocketResponse.writec                 C   s   | S r(   r+   r)   r+   r+   r,   Ú	__aiter__Ö  s    zWebSocketResponse.__aiter__c                 Ã   s,   |   ¡ I d H }|jtjtjtjfkr(t‚|S r(   )r»   r¡   r   r²   r¹   r·   ÚStopAsyncIteration)r*   rµ   r+   r+   r,   Ú	__anext__Ù  s    zWebSocketResponse.__anext__)r´   r'   c                 C   s   | j d k	r| j  |¡ d S r(   )rC   Úset_exception)r*   r´   r+   r+   r,   Ú_cancelß  s    
zWebSocketResponse._cancel)r–   )r–   )N)N)N)N)8r.   r/   r0   Z_length_checkÚfloatr   r1   r   r3   Úintr?   rX   rZ   rY   r\   r   r	   re   r   r‰   r   rd   rg   r    r‘   Úpropertyr’   r“   r”   r:   ÚBaseExceptionr•   r¥   r[   r›   r¤   r¨   Újsonr©   r   r   rª   r«   ra   r   r»   r¾   rÀ   rÁ   r   rÂ   rÃ   rÄ   rÆ   rÈ   Ú__classcell__r+   r+   rU   r,   r   4   s’   öõ$	þP  þ

 ýûú		7?
 ÿ þr   )4r_   r|   r~   r�   rÍ   Útypingr   r   r   r   r°   ÚattrZ	multidictr   rj   r   Úabcr	   Zhelpersr
   r   Úhttpr   r   r   r   r   r   r   r   r   r   Úlogr   Zstreamsr   r   Ztypedefsr   r   Zweb_exceptionsr   r   Zweb_requestr   Zweb_responser   Ú__all__r¶   Úsr    r   r+   r+   r+   r,   Ú<module>   s.   0