a
    hwF                     @   sz  U d dl Z 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
mZm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!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l0m1Z1 ej2dkr,d dl Z3nd dl3Z3dZ4dZ5ee6 e7d< ej8ddddG dd dZ9G dd de1Z:dS )    N)AnyFinalIterableOptionalTuplecast)CIMultiDict   )hdrs)AbstractStreamWriter)
call_later
set_result)WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWS_KEYWebSocketErrorWebSocketReaderWebSocketWriterWSCloseCode	WSMessage	WSMsgType
ws_ext_genws_ext_parse)	ws_logger)	EofStreamFlowControlDataQueue)JSONDecoderJSONEncoder)HTTPBadRequestHTTPException)BaseRequest)StreamResponse)      )WebSocketResponseWebSocketReadyr      THRESHOLD_CONNLOST_ACCESST)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 r1   S/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/aiohttp/web_ws.py__bool__6   s    zWebSocketReady.__bool__N)__name__
__module____qualname__bool__annotations__r   strr3   r1   r1   r1   r2   r%   1   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dYeeed)d*d+Zee  dd,d-Z!dZe"dd/d0d1Z#d[e"dd/d2d3Z$d\eee dd4d5d6Z%d]e"ee dd4d7d8Z&d^e'j(d9eee e)dd:d;d<Z*ddd=d>Z+e,j-d.d?e	e"ed@dAdBZ.d_ee e/dCdDdEZ0ddFee edCdGdHZ1ddFee e"dCdIdJZ2e'j3ddKe4ee edLdMdNZ5e"ddOdPdQZ6d ddRdSZ7e/ddTdUZ8e ddVdWdXZ9  Z:S )`r$   Fg      $@NTr1   i  @ )timeoutreceive_timeout	autocloseautoping	heartbeat	protocolscompressmax_msg_size)	r:   r;   r<   r=   r>   r?   r@   rA   r-   c          	         s   t  jdd || _d | _d | _d | _d| _d| _d| _d | _	d | _
d | _d | _|| _|| _|| _|| _|| _d | _|d u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)	r0   r:   r;   r<   r=   r>   r?   r@   rA   	__class__r1   r2   rE   >   s.    
zWebSocketResponse.__init__r,   c                 C   s8   | j d ur| j   d | _ | jd ur4| j  d | _d S r.   )rX   cancelrV   r/   r1   r1   r2   _cancel_heartbeatb   s    



z#WebSocketResponse._cancel_heartbeatc                 C   sP   |    | jd urL| jd us J t| j| j| j| jd urB| jjjndd| _d S Nr&   )Ztimeout_ceil_threshold)	r^   rU   rN   r   _send_heartbeat_req	_protocol_timeout_ceil_thresholdrV   r/   r1   r1   r2   _reset_heartbeatk   s    
z"WebSocketResponse._reset_heartbeatc                 C   st   | j d urp| jsp| jd usJ | j| j  | jd urD| j  t| j	| j
| j| jd urf| jjjndd| _d S r_   )rU   rJ   rN   Zcreate_taskrH   pingrX   r]   r   _pong_not_receivedrW   ra   rb   rc   r/   r1   r1   r2   r`   y   s    

z!WebSocketResponse._send_heartbeatc                 C   s>   | j d ur:| j jd ur:d| _tj| _t | _| j j	  d S )NT)
ra   	transportrJ   r   ABNORMAL_CLOSURErM   asyncioTimeoutErrorrP   closer/   r1   r1   r2   rf      s
    
z$WebSocketResponse._pong_not_received)requestr-   c                    s\   | j d ur| j S | |\}}t |I d H }|d us<J | ||| | I d H  |S r.   )_payload_writer
_pre_startrD   prepare_post_startdrain)r0   rl   r+   writerZpayload_writerr[   r1   r2   ro      s    
zWebSocketResponse.preparezCIMultiDict[str]c                 C   s  |j }d|tjd  kr8td|tjdd|tjd vrftd|tjdd }tj	|v rdd |tj	 
d	D }|D ]}|| jv r|} qqtd
|| j |tjd}|dvrtd| d|tj}z.|rtt|dkrtd|dW n( tjyB   td|dd Y n0 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".)textupgradezNo CONNECTION upgrade hdr: {}c                 S   s   g | ]}t | qS r1   )r9   strip).0protor1   r1   r2   
<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@   r~   Zserver_notakeover)"headersgetr
   UPGRADElowerrv   r   formatZ
CONNECTIONZSEC_WEBSOCKET_PROTOCOLsplitrF   r   warningZSEC_WEBSOCKET_VERSIONZSEC_WEBSOCKET_KEYlenbase64	b64decodebinasciiError	b64encodehashlibsha1encoder   digestdecoder   ZSEC_WEBSOCKET_ACCEPTrY   ZSEC_WEBSOCKET_EXTENSIONSr   r   )r0   rl   r   r+   Zreq_protocolsrx   versionkeyZ
accept_valresponse_headers
notakeoverr@   
extensionsZ
enabledextr1   r1   r2   
_handshake   s~    





zWebSocketResponse._handshakec                 C   sl   |j | _ | |\}}}}| d | j| |   || _|jj}|d usRJ t	|j|||d}||fS )NrB   )r@   r   )
rN   r   Z
set_statusr   updateZforce_closerY   rb   rg   r   )r0   rl   r   r+   r@   r   rg   rr   r1   r1   r2   rn      s    

zWebSocketResponse._pre_start)rl   r+   rr   r-   c                 C   sd   || _ || _|   | j}|d us&J t|jd|d| _|jt	| j| j
| jd |jd d S )Ni   )loopr@   F)rG   rH   rd   rN   r   rb   rI   r+   
set_parserr   rZ   rY   
keep_alive)r0   rl   r+   rr   r   r1   r1   r2   rp     s    zWebSocketResponse._post_startc                 C   sT   | j d urtdz| |\}}}}W n tyD   tdd  Y S 0 td|S d S )NzAlready startedFT)rH   RuntimeErrorr   r   r%   )r0   rl   _r+   r1   r1   r2   can_prepare  s    
zWebSocketResponse.can_preparec                 C   s   | j S r.   )rJ   r/   r1   r1   r2   closed   s    zWebSocketResponse.closedc                 C   s   | j S r.   )rM   r/   r1   r1   r2   
close_code$  s    zWebSocketResponse.close_codec                 C   s   | j S r.   )rG   r/   r1   r1   r2   ws_protocol(  s    zWebSocketResponse.ws_protocolc                 C   s   | j S r.   )rY   r/   r1   r1   r2   r@   ,  s    zWebSocketResponse.compress)namedefaultr-   c                 C   s0   | j }|du r|S |j}|du r$|S |||S )z}Get optional transport information.

        If no value associated with ``name`` is found, ``default`` is returned.
        N)rH   rg   get_extra_info)r0   r   r   rr   rg   r1   r1   r2   r   0  s    z WebSocketResponse.get_extra_infoc                 C   s   | j S r.   )rP   r/   r1   r1   r2   	exception=  s    zWebSocketResponse.exception    )messager-   c                    s(   | j d u rtd| j |I d H  d S NCall .prepare() first)rH   r   re   r0   r   r1   r1   r2   re   @  s    
zWebSocketResponse.pingc                    s(   | j d u rtd| j |I d H  d S r   )rH   r   pongr   r1   r1   r2   r   E  s    
zWebSocketResponse.pong)datar@   r-   c                    sH   | j d u 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@   )rH   r   
isinstancer9   	TypeErrortypesendr0   r   r@   r1   r1   r2   send_strK  s
    

zWebSocketResponse.send_strc                    sN   | j d u 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   )	rH   r   r   bytes	bytearray
memoryviewr   r   r   r   r1   r1   r2   
send_bytesR  s
    
zWebSocketResponse.send_bytes)dumps)r   r@   r   r-   c                   s   | j |||dI d H  d S )Nr   )r   )r0   r   r@   r   r1   r1   r2   	send_jsonY  s    zWebSocketResponse.send_jsonc                    s4   | j r
d S | jd u rtd|  I d H  d| _ d S )NzResponse has not been startedT)Z	_eof_sentrm   r   rk   r/   r1   r1   r2   	write_eofb  s    
zWebSocketResponse.write_eof)coder   )r   r   r-   c             
      s  | j d u rtd|   | j}|d us,J | jd urT| jsT|td | jI d H  | jsd| _z8| j ||I d H  | j	}|d usJ |
 I d H  W nV tjtjfy   tj| _ Y n4 ty } ztj| _|| _W Y d }~dS d }~0 0 | j rdS | j}|d usJ zVt| j4 I d H & | I d H }W d   I d H  qf1 I d H s\0    Y  W nT tjy   tj| _ Y n6 ty } ztj| _|| _W Y d }~dS d }~0 0 |jtjkr|j| _dS tj| _t | _dS dS d S )Nr   r   TF)rH   r   r^   rI   rO   rJ   Z	feed_datar   rk   rm   rq   ri   CancelledErrorrj   r   rh   rM   	ExceptionrP   rK   async_timeoutr:   rQ   readr   r   CLOSEr   )r0   r   r   readerrr   excmsgr1   r1   r2   rk   k  sV    
@
zWebSocketResponse.close)r:   r-   c              
      s  | j d u rtd| j}|d us$J | jd ur6td| jr`|  jd7  _| jtkr\tdtS | jrjt	S z|
 | _zvt|p| j4 I d H & | j  I d H }W d   I d H  q1 I d H s0    Y  |   W | j}t|d d | _n| j}t|d d | _0 W  n tjtjfy0   tj| _ Y n tyf   tj| _|  I d H  ttjd d  Y S  ty } z6|j| _| j|jdI d H  ttj|d W  Y d }~S d }~0  t y } z<|| _!d| _tj| _|  I d H  ttj|d W  Y d }~S d }~0 0 |j"tj#krFd| _|j$| _| js| j%r|  I d H  nZ|j"tj&kr\d| _nD|j"tj'kr| j(r| )|j$I d H  q$n|j"tj*kr| j(rq$|S )Nr   z+Concurrent call to receive() is not allowedr	   zWebSocket connection is closed.T)r   )+rI   r   rN   rO   rJ   rL   r'   r   rK   r   Zcreate_futurer   r:   rR   r   rd   r   ri   r   rj   r   rh   rM   r   OKrk   r   r   CLOSEDr   r   ERRORr   rP   r   r   r   rS   CLOSINGZPINGrT   r   ZPONG)r0   r:   r   r   waiterr   r1   r1   r2   receive  sn    



:


"$zWebSocketResponse.receiver:   c                   s<   |  |I d H }|jtjkr0td|j|jtt|jS )Nz.Received message {}:{!r} is not WSMsgType.TEXT)	r   r   r   ZTEXTr   r   r   r   r9   r0   r:   r   r1   r1   r2   receive_str  s    zWebSocketResponse.receive_strc                   sB   |  |I d H }|jtjkr6td|j d|jdtt|jS )NzReceived message :z is not bytes)r   r   r   ZBINARYr   r   r   r   r   r1   r1   r2   receive_bytes  s    zWebSocketResponse.receive_bytes)loadsr:   )r   r:   r-   c                   s   | j |dI d H }||S )Nr   )r   )r0   r   r:   r   r1   r1   r2   receive_json  s    zWebSocketResponse.receive_json)r   r-   c                    s   t dd S )Nz"Cannot call .write() for websocket)r   )r0   r   r1   r1   r2   write  s    zWebSocketResponse.writec                 C   s   | S r.   r1   r/   r1   r1   r2   	__aiter__  s    zWebSocketResponse.__aiter__c                    s,   |   I d H }|jtjtjtjfv r(t|S r.   )r   r   r   r   r   r   StopAsyncIteration)r0   r   r1   r1   r2   	__anext__  s    zWebSocketResponse.__anext__)r   r-   c                 C   s   | j d ur| j | d S r.   )rI   Zset_exception)r0   r   r1   r1   r2   _cancel  s    
zWebSocketResponse._cancel)N)r   )r   )N)N)N)N);r4   r5   r6   Z_length_checkfloatr   r7   r   r9   intrE   r^   rd   r`   rf   r    r   ro   r   r   r   rn   rp   r%   r   propertyr   r   r   r@   r   r   BaseExceptionr   r   re   r   r   r   jsonr   r   r   r   r   r   rk   r   r   r   r   r   r   r   r   r   r   r   __classcell__r1   r1   r[   r2   r$   :   s   $	U

 		7=
r$   );ri   r   r   r   r   systypingr   r   r   r   r   r   attrZ	multidictr   rs   r
   abcr   Zhelpersr   r   httpr   r   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!   version_infor   __all__r'   r   r8   sr%   r$   r1   r1   r1   r2   <module>   s4   
 4
