
­­­­­­­­­­­­­­­­­­
<!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 )Ne   )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rdd |tj	 
d	D }|D ]}|| jkr|} qqtd
|| j |tjd}|dkrt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\}}
|rt!|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sd| _z8| j 	||I d H  | j
}|d k	st| 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 rd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