
    bfJ                        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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/m0Z0 ddl1m2Z2 ej3        dk    rd dl Z4nd dl4Z4dZ5dZ6ee7         e8d<    ej9        ddd           G d d                      Z: G d de2          Z;dS )    N)AnyFinalIterableOptionalTuplecast)CIMultiDict   )hdrs)AbstractStreamWriter)
call_laterset_exception
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)auto_attribsfrozenslotsc                   <    e Zd ZU eed<   ee         ed<   defdZdS )r'   okprotocolreturnc                     | j         S N)r.   selfs    H/var/www/html/Alfredo/env/lib/python3.11/site-packages/aiohttp/web_ws.py__bool__zWebSocketReady.__bool__6   s	    w    N)__name__
__module____qualname__bool__annotations__r   strr6    r7   r5   r'   r'   1   sJ         HHHsm$      r7   r'   c                       e Zd ZdZdddddddddded	ee         d
ededee         dee         dede	ddf fdZ
dEdZdEdZdEdZdEdZdedef fdZdededeeef         fdZdedeeef         fdZdedededdfdZdedefdZedefd            Zedee	         fd             Zedee         fd!            Zedefd"            ZdFd#ed$edefd%Zdee          fd&Z!dGd(e"ddfd)Z#dGd(e"ddfd*Z$dFd+edee         ddfd,Z%dFd+e"dee         ddfd-Z&	 dFe'j(        d.d+edee         d/e)ddfd0Z*dEd1Z+e,j-        d'dd2d3e	d(e"d4edefd5Z.d3e,ddfd6Z/d3e,ddfd7Z0dEd8Z1dFdee         de2fd9Z3dd:dee         defd;Z4dd:dee         de"fd<Z5e'j6        dd=d>e7dee         defd?Z8d+e"ddfd@Z9dHdAZ:de2fdBZ;dCe ddfdDZ< xZ=S )Ir&   Fg      $@NTr>   i  @ )timeoutreceive_timeout	autocloseautoping	heartbeat	protocolscompressmax_msg_sizer@   rA   rB   rC   rD   rE   rF   rG   r0   c                |   t                                          d           || _        d | _        d | _        d | _        d| _        d| _        d| _        d | _	        d | _
        d | _        d | _        || _        || _        || _        || _        || _        d | _        |
|dz  | _        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)
r4   r@   rA   rB   rC   rD   rE   rF   rG   	__class__s
            r5   rL   zWebSocketResponse.__init__>   s     	$$$#+/26BF*.:>
8<37 /#!#<@ #,s?D @D!)r7   c                     | j          | j                                          d | _         | j        "| j                                         d | _        d S d S r2   )r_   cancelr]   r3   s    r5   _cancel_heartbeatz#WebSocketResponse._cancel_heartbeatb   s\    !-"))+++%)D")%%'''!%D *)r7   c                     |                                   | j        J| j        J t          | j        | j        | j        | j        | j        j        j        nd          | _        d S d S Nr(   )timeout_ceil_threshold)	re   r\   rU   r   _send_heartbeat_req	_protocol_timeout_ceil_thresholdr]   r3   s    r5   _reset_heartbeatz"WebSocketResponse._reset_heartbeatk   sz       ?&:)))!+$
9( (,y':'R'R" " "D '&r7   c                 \   | j         | j        s| j        J | j                            | j                                                   | j        | j                                         t          | j	        | j
        | j        | j        | j        j        j        nd          | _        d S d S d S rg   )r\   rQ   rU   create_taskrO   pingr_   rd   r   _pong_not_receivedr^   rj   rk   rl   r3   s    r5   ri   z!WebSocketResponse._send_heartbeaty   s    ?&t|&:))) J""4<#4#4#6#6777%1&--///%/'$
9( (,y':'R'R& & &D""" '&&&r7   c                     | j         L| j         j        Bd| _        |                     t          j                   t          j                    | _        d S d S d S NT)	rj   	transportrQ   _set_code_close_transportr   ABNORMAL_CLOSUREasyncioTimeoutErrorrW   r3   s    r5   rq   z$WebSocketResponse._pong_not_received   sT    9 TY%8%DDL**;+GHHH%244DOOO ! %D%Dr7   requestc                   K   | j         | j         S |                     |          \  }}t                                          |           d {V }|J |                     |||           |                                 d {V  |S r2   )_payload_writer
_pre_startrK   prepare_post_startdrain)r4   ry   r/   writerpayload_writerrb   s        r5   r}   zWebSocketResponse.prepare   s      +''??733&$www77777777)))(F333""$$$$$$$$$r7   zCIMultiDict[str]c                 p   |j         }d|                    t          j        d                                                                          k    r@t          d                    |                    t          j                                      d|                    t          j        d                                          vr@t          d                    |                    t          j                                      d }t          j	        |v r\d |t          j	                 
                    d          D             }|D ]}|| j        v r|} nt          j        d	|| j                   |                    t          j        d          }|d
vrt          d|           |                    t          j                  }	 |r%t!          t#          j        |                    dk    rt          d|          n'# t&          j        $ r t          d|          d w xY wt#          j        t-          j        |                                t2          z                                                                                       }t9          t          j        dt          j        dt          j        |i          }	d}
d}| j        rV|                    t          j                  }tA          |d          \  }}
|r!tC          |d|
          }||	t          j        <   |r||	t          j	        <   |	|||
fS )N	websocket z@No WebSocket UPGRADE hdr: {}
 Can "Upgrade" only to "WebSocket".)textupgradezNo CONNECTION upgrade hdr: {}c                 P    g | ]#}t          |                                          $S r>   )r=   strip).0protos     r5   
<listcomp>z0WebSocketResponse._handshake.<locals>.<listcomp>   s8        EKKMM""  r7   ,u8   Client protocols %r don’t overlap server-known ones %r)1387zUnsupported version:    zHandshake error: Fr   T)isserver)rF   r   server_notakeover)"headersgetr   UPGRADElowerr   r    format
CONNECTIONSEC_WEBSOCKET_PROTOCOLsplitrM   r   warningSEC_WEBSOCKET_VERSIONSEC_WEBSOCKET_KEYlenbase64	b64decodebinasciiError	b64encodehashlibsha1encoder   digestdecoder	   SEC_WEBSOCKET_ACCEPTr`   SEC_WEBSOCKET_EXTENSIONSr   r   )r4   ry   r   r/   req_protocolsr   versionkey
accept_valresponse_headers
notakeoverrF   
extensions
enabledexts                 r5   
_handshakezWebSocketResponse._handshake   sg    /'++dlB77==??EEGGGG 5&T\2233	    GKK<<BBDDDD 4;;KK00     &'11 $T%@AGGLL  M
 ' 
 
DO++$HE ,
 !N!O   ++d8"==*** &Gg&G&GHHHH kk$011	M G#f.s3344::$*Ec*E*EFFFF ;~ 	M 	M 	M &A#&A&ABBBL	M %L.//6688
 

&(( 	 'k):
 
 
> 		M T%BCCJ $0
T#J#J#J Hj M'%
  
 CM !>? 	E<DT89	
 	
s   :H $H&c                 :   |j         | _         |                     |          \  }}}}|                     d           | j                            |           |                                  || _        |j        j        }|J t          |j        |||          }||fS )NrI   )rF   r   )
rU   r   
set_statusr   updateforce_closer`   rk   rt   r   )r4   ry   r   r/   rF   r   rt   r   s           r5   r|   zWebSocketResponse._pre_start   s    ]
26//'2J2J/8ZG$$$!%/	$$$ y8

 
 
 r7   r/   r   c                 >   || _         || _        |                                  | j        }|J t	          |j        d|          | _        |j                            t          | j        | j
        | j                             |j                            d           d S )Ni   )looprF   F)rN   rO   rm   rU   r   rk   rP   r/   
set_parserr   ra   r`   
keep_alive)r4   ry   r/   r   r   s        r5   r~   zWebSocketResponse._post_start  s     %z+G,=u4PPP##DL$*<t~VVV	
 	
 	
 	##E*****r7   c                     | j         t          d          	 |                     |          \  }}}}t          d|          S # t          $ r t          dd           cY S w xY w)NzAlready startedTF)rO   RuntimeErrorr   r'   r!   )r4   ry   _r/   s       r5   can_preparezWebSocketResponse.can_prepare  s}    <#0111	2 $ 8 8AxA "$111  	/ 	/ 	/!%.....	/s   A AAc                     | j         S r2   )rQ   r3   s    r5   closedzWebSocketResponse.closed  s
    |r7   c                     | j         S r2   )rT   r3   s    r5   
close_codezWebSocketResponse.close_code#  s    r7   c                     | j         S r2   )rN   r3   s    r5   ws_protocolzWebSocketResponse.ws_protocol'  s      r7   c                     | j         S r2   )r`   r3   s    r5   rF   zWebSocketResponse.compress+  s
    ~r7   namedefaultc                 Z    | j         }||S |j        }||S |                    ||          S )z}Get optional transport information.

        If no value associated with ``name`` is found, ``default`` is returned.
        )rO   rt   get_extra_info)r4   r   r   r   rt   s        r5   r   z WebSocketResponse.get_extra_info/  s>    
 >N$	N''g666r7   c                     | j         S r2   )rW   r3   s    r5   	exceptionzWebSocketResponse.exception<  s
    r7   r7   messagec                 v   K   | j         t          d          | j                             |           d {V  d S NCall .prepare() first)rO   r   rp   r4   r   s     r5   rp   zWebSocketResponse.ping?  sK      <6777l(((((((((((r7   c                 v   K   | j         t          d          | j                             |           d {V  d S r   )rO   r   pongr   s     r5   r   zWebSocketResponse.pongD  sK      <6777l(((((((((((r7   datac                    K   | j         t          d          t          |t                    st	          dt          |          z            | j                             |d|           d {V  d S )Nr   zdata argument must be str (%r)FbinaryrF   )rO   r   
isinstancer=   	TypeErrortypesendr4   r   rF   s      r5   send_strzWebSocketResponse.send_strJ  s      <6777$$$ 	K<tDzzIJJJlUXFFFFFFFFFFFr7   c                    K   | j         t          d          t          |t          t          t
          f          st          dt          |          z            | j                             |d|           d {V  d S )Nr   z#data argument must be byte-ish (%r)Tr   )	rO   r   r   bytes	bytearray
memoryviewr   r   r   r   s      r5   
send_byteszWebSocketResponse.send_bytesQ  s      <6777$	: >?? 	PADJJNOOOlTHEEEEEEEEEEEr7   )dumpsr   c                V   K   |                       ||          |           d {V  d S )Nr   )r   )r4   r   rF   r   s       r5   	send_jsonzWebSocketResponse.send_jsonX  s>       mmEE$KK(m;;;;;;;;;;;r7   c                    K   | j         rd S | j        t          d          |                                  d {V  d| _         d S )NzResponse has not been startedT)	_eof_sentr{   r   closer3   s    r5   	write_eofzWebSocketResponse.write_eofa  sX      > 	F'>???jjllr7   )coder   r   r   r   c                :  K   | j         t          d          |                                  | j        }|J | j        /| j        s(|                    t          d           | j         d{V  | j        rdS d| _        	 | j                             ||           d{V  | j	        }|J |r|
                                 d{V  nx# t          j        t          j        f$ r! |                     t          j                    t"          $ r1}|| _        |                     t          j                   Y d}~dS d}~ww xY w| j        r|                                  dS | j        }|J 	 t+          j        | j                  4 d{V  |                                 d{V }ddd          d{V  n# 1 d{V swxY w Y   nl# t          j        $ r! |                     t          j                    t"          $ r1}|| _        |                     t          j                   Y d}~dS d}~ww xY w|j        t4          j        k    r|                     |j                   dS |                     t          j                   t          j                    | _        dS )zClose websocket connection.Nr   r   FT)rO   r   re   rP   rV   rQ   	feed_datar   r   r{   r   rw   CancelledErrorrx   ru   r   rv   	ExceptionrW   rR   _close_transportasync_timeoutr@   rX   readr   r   CLOSEr   )r4   r   r   r   readerr   excmsgs           r5   r   zWebSocketResponse.closej  sw      <6777   !!! =$T\$/333-< 	5	,$$T7333333333)F%%% %llnn$$$$$$$&(<= 	 	 	**;+GHHH 	 	 	!DO**;+GHHH44444	
 = 	!!###4!!!		$,T];; * * * * * * * *"KKMM))))))* * * * * * * * * * * * * * * * * * * * * * * * * * *% 	 	 	**;+GHHH 	 	 	!DO**;+GHHH44444	
 8y&&**384444&&{'CDDD!.00tsV   ?AC AD=&D88D=)G F5#G 5
F??G F?G 8H0?&H++H0c                 "    d| _         || _        dS )z6Set the close code and mark the connection as closing.TN)rR   rT   r4   r   s     r5   _set_closingzWebSocketResponse._set_closing  s    r7   c                 <    || _         |                                  dS )z+Set the close code and close the transport.N)rT   r   r   s     r5   ru   z+WebSocketResponse._set_code_close_transport  s"    r7   c                 p    | j         ,| j         j        "| j         j                                         dS dS dS )zClose the transport.N)rj   rt   r   r3   s    r5   r   z"WebSocketResponse._close_transport  s?    9 TY%8%DI%%''''' ! %D%Dr7   c                   K   | j         t          d          | j        }|J 	 | j        t          d          | j        r6| xj        dz  c_        | j        t          k    rt          d          t          S | j        rt          S 	 |
                                | _        	 t          j        |p| j                  4 d {V  | j                                          d {V }d d d           d {V  n# 1 d {V swxY w Y   |                                  | j        }t!          |d           d | _        n## | j        }t!          |d           d | _        w xY wn,# t"          j        $ r  t&          $ rI t(          j        | _        |                                  d {V  t1          t2          j        d d           cY S t6          $ rR}|j        | _        |                     |j                   d {V  t1          t2          j        |d           cY d }~S d }~wt<          $ re}|| _        |                      t(          j!                   |                                  d {V  t1          t2          j        |d           cY d }~S d }~ww xY w|j"        t2          j#        k    rE|                      |j$                   | j        s#| j%        r|                     d           d {V  n|j"        t2          j&        k    r |                      t(          j                   n\|j"        t2          j'        k    r)| j(        r"| )                    |j$                   d {V  2|j"        t2          j*        k    r	| j(        rP|S )	Nr   Tz+Concurrent call to receive() is not allowedr
   zWebSocket connection is closed.)r   F)r   )+rP   r   rU   rV   rQ   rS   r)   r   rR   r   create_futurer   r@   rY   r   rm   r   rw   rx   r   r   OKrT   r   r   r   CLOSEDr   r   ERRORr   rW   r   rv   r   r   r   rZ   CLOSINGPINGr[   r   PONG)r4   r@   r   r   waiterr   s         r5   receivezWebSocketResponse.receive  sG     <6777z7	}("#PQQQ| *1$?&???&'HIII(( *))= $ 2 2 4 4),4W5U@UVV 8 8 8 8 8 8 8 8$(L$5$5$7$77777778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8))+++!]Fvt,,,$(DMM "]Fvt,,,$(DM((((M'    ? ? ?#.> jjll""""""" !14>>>>>! = = =#&8 jjchj///////// #t<<<<<<<< = = ="%!!+">???jjll""""""" #t<<<<<<<<	= x9?**!!#(+++| 2 2
 **5*111111111Y...!!+.1111Y^+++ii)))))))))Y^+++Jsu   E !!D8  C4"D8 4
C>>D8 C>D8 E 8 EE AJ>	JAHJJ!AJ;JJr@   c                   K   |                      |           d {V }|j        t          j        k    r-t	          d                    |j        |j                            t          t          |j                  S )Nz.Received message {}:{!r} is not WSMsgType.TEXT)	r  r   r   TEXTr   r   r   r   r=   r4   r@   r   s      r5   receive_strzWebSocketResponse.receive_str  sz      LL))))))))8y~%%@GGHch   
 C"""r7   c                   K   |                      |           d {V }|j        t          j        k    r t	          d|j         d|j        d          t          t          |j                  S )NzReceived message :z is not bytes)r  r   r   BINARYr   r   r   r   r	  s      r5   receive_byteszWebSocketResponse.receive_bytes  sq      LL))))))))8y'''TTT38TTTUUUE38$$$r7   )loadsr@   r  c                T   K   |                      |           d {V } ||          S )Nr  )r
  )r4   r  r@   r   s       r5   receive_jsonzWebSocketResponse.receive_json  s>       %%g%66666666uT{{r7   c                 $   K   t          d          )Nz"Cannot call .write() for websocket)r   )r4   r   s     r5   writezWebSocketResponse.write
  s      ?@@@r7   c                     | S r2   r>   r3   s    r5   	__aiter__zWebSocketResponse.__aiter__  s    r7   c                    K   |                                   d {V }|j        t          j        t          j        t          j        fv rt          |S r2   )r  r   r   r   r  r   StopAsyncIteration)r4   r   s     r5   	__anext__zWebSocketResponse.__anext__  sL      LLNN""""""8	):I<LMMM$$
r7   r   c                 P    d| _         | j        t          | j        |           d S d S rs   )rR   rP   r   )r4   r   s     r5   _cancelzWebSocketResponse._cancel  s3     <#$,,,,,, $#r7   )r0   Nr2   )r7   )r0   r&   )>r8   r9   r:   _length_checkfloatr   r;   r   r=   intrL   re   rm   ri   rq   r"   r   r}   r   r   r   r|   r~   r'   r   propertyr   r   r   rF   r   r   BaseExceptionr   r   rp   r   r   r   jsonr   r   r   r   r   r   r   r   ru   r   r   r  r
  r  r  r   r  r  r  r  r  __classcell__)rb   s   @r5   r&   r&   :   s        M
 +/%)#%+"* "* "* "* "%	"*
 "* "* E?"* C="* "* "* 
"* "* "* "* "* "*H& & & &      &5 5 5 5
[ 
5I 
 
 
 
 
 
S
"S
	!3d2	3S
 S
 S
 S
j +  %_8L2M        "+"+.1+;J+	+ + + +"2; 2> 2 2 2 2     X  HSM       X  !Xc] ! ! ! X! $    X7 73 7 7 7 7 7 78M2    ) )% )$ ) ) ) )
) )% )$ ) ) ) )G G3 G(4. GD G G G GF FU Fhtn FPT F F F F $(<
 "Z< < << 4.<
 < 
< < < <    )^cQU: : ::6;:JN:	: : : :x           
 k  d        
( ( ( (
= =Xe_ =	 = = = =~ ?C # # #HUO #s # # # # AE % % %huo % % % % % '+jT  #;CE?	   A A$ A A A A       -= -T - - - - - - - -r7   r&   )<rw   r   r   r   r   systypingr   r   r   r   r   r   attr	multidictr	   r   r   abcr   helpersr   r   r   httpr   r   r   r   r   r   r   r   r   r   r   logr   streamsr   r   typedefsr   r   web_exceptionsr    r!   web_requestr"   web_responser#   version_infor   __all__r)   r  r<   sr'   r&   r>   r7   r5   <module>r2     s        



 > > > > > > > > > > > > > > > >  ! ! ! ! ! !       % % % % % % : : : : : : : : : :                                4 4 4 4 4 4 4 4 . . . . . . . . 9 9 9 9 9 9 9 9 $ $ $ $ $ $ ( ( ( ( ( (w##### )* 5: ) ) ) T$d333       43a- a- a- a- a- a- a- a- a- a-r7   