
    bCilh              	          % S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
Jr  SSKJrJrJrJrJrJrJrJrJrJrJr  SSKJr  SSKJrJr  SS	KJrJr  SS
K J!r!  Sr" " S S\	5      r#\# V s1 s H  n \$" U 5      iM     sn r%\\\$      \&S'   Sr' " S S\	5      r(Sr)\\*   \&S'   \" S5      RV                  r,\" S5      RV                  r-\" S5      R\                  r/\" S5      R`                  r1\" S5      R`                  r2\" S5      R`                  r3\" S5      R`                  r4Sr5\\$   \&S'   Sr6\\$   \&S'    " S S\5      r7\7" \(Rp                  SS5      r9\7" \(Rt                  SS5      r; " S S \<5      r= " S! S"\<5      r>\R~                  r@\\A   \&S#'   \R                  S$\\*   4S% j5       rCS&\*S'\DS$S4S( jrE\(       a  \ErFO	 SS)KGJHrH  \HrF\*" / S*Q5      rJ\\*   \&S+'   \R                  " S,5      rL\\\A      \&S-'   \R                  " S.5      rM\\\A      \&S/'   S<S0\\A   S1\NS$\\$\N4   4S2 jjrO S=S3\$S1\NS4\NS$\A4S5 jjrP " S6 S7\	5      rQ " S8 S95      rR " S: S;5      rSgs  sn f ! \I a    \ErF Nf = f)>z%WebSocket protocol versions 13 and 8.    N)IntEnum)Struct)AnyCallableFinalList
NamedTupleOptionalPatternSetTupleUnioncast   )BaseProtocol)ZLibCompressorZLibDecompressor)NO_EXTENSIONSset_exception)	DataQueue)	WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWS_KEYWebSocketReaderWebSocketWriter	WSMessageWebSocketError	WSMsgTypeWSCloseCodec                   H    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrg)r   ,     i  i  i  i  i  i  i  i  i  i  i  i   N)__name__
__module____qualname____firstlineno__OK
GOING_AWAYPROTOCOL_ERRORUNSUPPORTED_DATAABNORMAL_CLOSUREINVALID_TEXTPOLICY_VIOLATIONMESSAGE_TOO_BIGMANDATORY_EXTENSIONINTERNAL_ERRORSERVICE_RESTARTTRY_AGAIN_LATERBAD_GATEWAY__static_attributes__r#       P/home/james-whalen/.local/lib/python3.13/site-packages/aiohttp/http_websocket.pyr   r   ,   sG    	BJNLONOOKr6   r   ALLOWED_CLOSE_CODESi   c                   X    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
r\r\r\r\r\	r\
r\r\rSrg)r   H   r   r      	   
         i  i  r#   N)r$   r%   r&   r'   CONTINUATIONTEXTBINARYPINGPONGCLOSECLOSINGCLOSEDERRORtextbinarypingpongcloseclosingclosederrorr5   r#   r6   r7   r   r   H   sY    LDFDDE GFEDFDDEGFEr6   r   s$   258EAFA5-E914-47DA-95CA-C5AB0DC85B11r   z!Hz!Qz!BBz!BBHz!BBQi @  MSG_SIZE   DEFAULT_LIMITc                   t    \ rS rSr% \\S'   \\S'   \\   \S'   \	R                  S.S\\/\4   S\4S jjr	S	rg
)r   n   typedataextra)loadsrY   returnc                &    U" U R                   5      $ )z1Return parsed JSON data.

.. versionadded:: 0.22
)rW   )selfrY   s     r7   jsonWSMessage.jsont   s    
 TYYr6   r#   N)r$   r%   r&   r'   r   __annotations__r   r
   strr]   rY   r   r5   r#   r6   r7   r   r   n   s@    
O
IC=48JJ  XseSj1  3    r6   r   c                   J   ^  \ rS rSrSrS\S\SS4U 4S jjrS\4S jrS	r	U =r
$ )
r      z WebSocket protocol parser error.codemessagerZ   Nc                 0   > Xl         [        TU ]	  X5        g N)rc   super__init__)r\   rc   rd   	__class__s      r7   rh   WebSocketError.__init__   s    	'r6   c                 <    [        [        U R                  S   5      $ )Nr   )r   r`   argsr\   s    r7   __str__WebSocketError.__str__   s    C1&&r6   )rc   )r$   r%   r&   r'   __doc__intr`   rh   rn   r5   __classcell__)ri   s   @r7   r   r      s1    *(S (3 (4 (' ' 'r6   r   c                       \ rS rSrSrSrg)WSHandshakeError   z#WebSocket protocol handshake error.r#   N)r$   r%   r&   r'   rp   r5   r#   r6   r7   rt   rt      s    -r6   rt   native_byteorderrZ   c            	         ^  [        S5       V ^ s/ s H!  m [        U 4S j[        S5       5       5      PM#     sn $ s  sn f )Nr?   c              3   ,   >#    U  H	  oT-  v   M     g 7frf   r#   ).0abs     r7   	<genexpr>_xor_table.<locals>.<genexpr>   s     ,Aa%s   )rangebytes)r{   s   `r7   
_xor_tabler      s.    6;CjAjE,s,,jAAAs   (;maskrW   c                   ^ [        U[        5      (       d   U5       e[        U 5      S:X  d   U 5       eU(       a  [        5       mU4S jU  5       u  p#pEUSSS2   R	                  U5      USSS2'   USSS2   R	                  U5      USSS2'   USSS2   R	                  U5      USSS2'   USSS2   R	                  U5      USSS2'   gg)a[  Websocket masking function.

`mask` is a `bytes` object of length 4; `data` is a `bytearray`
object of any length. The contents of `data` are masked with `mask`,
as specified in section 5.3 of RFC 6455.

Note that this function mutates the `data` argument.

This pure-python implementation may be replaced by an optimized
version when available.

   c              3   .   >#    U  H
  nTU   v   M     g 7frf   r#   )ry   n
_XOR_TABLEs     r7   r|   )_websocket_mask_python.<locals>.<genexpr>   s     2TjmTs   Nr   r;      )
isinstance	bytearraylenr   	translate)r   rW   rz   r{   cdr   s         @r7   _websocket_mask_pythonr      s     dI&&,,&t9>4>\
2T2
a1I''*SqS	!$Q$Z))!,QTT
!$Q$Z))!,QTT
!$Q$Z))!,QTT
 r6   )_websocket_mask_cython)r   r      r   _WS_DEFLATE_TRAILINGz^(?:;\s*(?:(server_no_context_takeover)|(client_no_context_takeover)|(server_max_window_bits(?:=(\d+))?)|(client_max_window_bits(?:=(\d+))?)))*$
_WS_EXT_REzpermessage-deflate([^,]+)?_WS_EXT_RE_SPLITextstrisserverc                    U (       d  gSnSn[         R                  U 5       GH*  nUR                  S5      nU(       d  Sn  X#4$ [        R	                  U5      nU(       a  SnU(       a\  UR                  S5      (       a*  [        UR                  S5      5      nUS:  d  US:  a  SnM  UR                  S5      (       a  Sn  X#4$ UR                  S	5      (       a1  [        UR                  S	5      5      nUS:  d  US:  a  [        S
5      eUR                  S5      (       a  Sn  X#4$ U(       a  GM  [        SUR                  S5      -   5      e   X#4$ )N)r   Fr   Fr      r   r<   T   zInvalid window sizer;   z#Extension for deflate not supported)r   finditergroupr   matchrq   rt   )r   r   compress
notakeoverextdefextr   s          r7   ws_ext_parser      sK   HJ((01HJ I   (H ;;q>>"5;;q>2H
  "}1#$ ;;q>>!%J$ ! ;;q>>"5;;q>2H
  "}1./DEE;;q>>!%J
  "#H399UV<#WXXQ 1T r6   r   server_notakeoverc                     U S:  d  U S:  a  [        S5      eS/nU(       d  UR                  S5        U S:  a  UR                  S[        U 5      -   5        U(       a  UR                  S5        SR                  U5      $ )	Nr<   r   zCCompress wbits must between 9 and 15, zlib does not support wbits=8zpermessage-deflateclient_max_window_bitszserver_max_window_bits=server_no_context_takeoverz; )
ValueErrorappendr`   join)r   r   r   
enabledexts       r7   
ws_ext_genr      s    
 !|x"}T
 	
 ''J23"}3c(mCD67 99Z  r6   c                   $    \ rS rSrSrSrSrSrSrg)WSParserStatei  r   r;   r   r   r#   N)	r$   r%   r&   r'   READ_HEADERREAD_PAYLOAD_LENGTHREAD_PAYLOAD_MASKREAD_PAYLOADr5   r#   r6   r7   r   r     s    KLr6   r   c            
           \ rS rSr SS\\   S\S\SS4S jjrSS jr	S	\
S\\\
4   4S
 jrS	\
S\\\
4   4S jrS\
S\\\\\   \\\   4      4S jrSrg)r   i  queuemax_msg_sizer   rZ   Nc                 (   Xl         X l        S U l        [        5       U l        [
        R                  U l        S U l        SU l	        S U l
        [        5       U l        SU l        SU l        S U l        SU l        SU l        S U l        S U l        X0l        g )NFr6   r   )r   _max_msg_size_excr   _partialr   r   _state_opcode
_frame_fin_frame_opcode_frame_payload_tail	_has_mask_frame_mask_payload_length_payload_length_flag_compressed_decompressobj	_compress)r\   r   r   r   s       r7   rh   WebSocketReader.__init__  s     
)-1	!#//&*,0'k
,0 $%!+/:>!r6   c                 8    U R                   R                  5         g rf   )r   feed_eofrm   s    r7   r   WebSocketReader.feed_eof2  s    

r6   rW   c                     U R                   (       a  SU4$  U R                  U5      $ ! [         a&  nX l         [        U R                  U5         S nAgS nAff = f)NT)Tr6   )r   
_feed_data	Exceptionr   r   )r\   rW   excs      r7   	feed_dataWebSocketReader.feed_data5  sM    99:	??4(( 	I$**c*	s   ( 
AAAc           
      4   U R                  U5       GH  u  p#pEU(       a  U R                  (       d  [        SS9U l        U[        R                  :X  a  [        U5      S:  an  [        US S 5      S   nUS:  a'  U[        ;  a  [        [        R                  SU 35      e USS  R                  S5      n[        [        R                  Xg5      n	OFU(       a$  [        [        R                  S	U S
U S
U< 35      e[        [        R                  SS5      n	U R                  R!                  U	S5        GM#  U[        R"                  :X  aA  U R                  R!                  [        [        R"                  US5      [        U5      5        GMx  U[        R$                  :X  aA  U R                  R!                  [        [        R$                  US5      [        U5      5        GM  U[        R&                  [        R(                  4;  a+  U R*                  c  [        [        R                  SU< 35      eU(       d  U[        R,                  :w  a  X0l        U R.                  R1                  U5        U R2                  (       am  [        U R.                  5      U R2                  :  aG  [        [        R4                  SR7                  [        U R.                  5      U R2                  5      5      eGM  GM  U R.                  (       a=  U[        R,                  :w  a)  [        [        R                  SR7                  U5      5      eU[        R,                  :X  a"  U R*                  c   eU R*                  nS U l        U R.                  R1                  U5        U R2                  (       aj  [        U R.                  5      U R2                  :  aG  [        [        R4                  SR7                  [        U R.                  5      U R2                  5      5      eU(       a  U R                  c   eU R.                  R1                  [8        5        U R                  R;                  U R.                  U R2                  5      n
U R                  R<                  (       a`  [        U R                  R<                  5      n[        [        R4                  SR7                  U R2                  U-   U R2                  5      5      eO[?        U R.                  5      n
U R.                  RA                  5         U[        R&                  :X  aS   U
R                  S5      nU R                  R!                  [        [        R&                  US5      [        U5      5        GMj  U R                  R!                  [        [        R(                  U
S5      [        U
5      5        GM     g! [         a   n[        [        R                  S5      UeS nAff = f! [         a   n[        [        R                  S5      UeS nAff = f)NT)suppress_deflate_headerr;   r   i  zInvalid close code: utf-8zInvalid UTF-8 text messagezInvalid close frame:   zUnexpected opcode=z Message size {} exceeds limit {}z<The opcode in non-fin frame is expected to be zero, got {!r}z-Decompressed message size {} exceeds limit {})Fr6   )!parse_framer   r   r   rE   r   UNPACK_CLOSE_CODEr8   r   r   r*   decodeUnicodeDecodeErrorr-   r   r   r   rC   rD   rA   rB   r   r@   r   extendr   r/   formatr   decompress_syncunconsumed_tailr   clear)r\   rW   finopcodepayload
compressed
close_codeclose_messager   msgpayload_mergedleftrI   s                r7   r   WebSocketReader._feed_data@  s   040@0@0F,C$"5"5&6t&T#(w<1$!272A;!?!BJ!D(Z?R-R,'662:,? #(/(:(:7(C
 $IOOZOC(#22/uAfXQwkJ 
 $IOOQ;C

$$S!,9>>)

$$inngr:CL 9>>)

$$inngr:CL
 y~~y/?/?@@LL($..2DVJ0O 
 !7!77'-MM((1))c$--.@DDVDV.V,'77>EE #DMM 2D4F4F  /W) }}!Y%;%;;"0 + : :!77=vf~#  !7!77#||777!%'+MM((1))c$--.@DDVDV.V,'77>EE #DMM 2D4F4F  "#22>>>,,-AB)-)<)<)L)L MM4+=+=*  ..>>#&t':':'J'J#KD"0 + ; ; O V V$($6$6$=t?Q?Q!"#  ? */t}})=MM'')/'#1#8#8#AD JJ00 ))..$ CSY 

,,%i&6&6K/i 1Gr Y . #,'446R"##D  2 '"0 + 8 8:V##&''s1   !W *AW- 
W*
W%%W*-
X7XXbufc                    / nU R                   (       a  U R                   U-   Ssol         Sn[        U5      n U R                  [        R                  :X  Gak  XC-
  S:  Ga`  XUS-    nUS-  nUu  pgUS-	  S-  nUS-	  S-  n	US-	  S-  n
US	-	  S-  nUS
-  nU
(       d  U(       d  U	(       a+  U R
                  (       d  [        [        R                  S5      eUS:  a   US:X  a  [        [        R                  S5      eUS-	  S-  nUS-  nUS:  a   US:  a  [        [        R                  S5      eU R                  (       d  U R                  c  U	(       a  SOSU l
        O!U	(       a  [        [        R                  S5      e[        U5      U l	        Xl        [        U5      U l        Xl        [        R                  U l        OGOU R                  [        R                  :X  Ga  U R                  nUS:X  aa  XC-
  S:  aW  XUS-    nUS-  n[!        U5      S   nXl        U R                  (       a  [        R$                  O[        R&                  U l        OGOUS:  aa  XC-
  S:  aW  XUS-    nUS-  n[)        U5      S   nXl        U R                  (       a  [        R$                  O[        R&                  U l        O>GOXl        U R                  (       a  [        R$                  O[        R&                  U l        U R                  [        R$                  :X  a1  XC-
  S	:  a'  XUS	-    U l        US	-  n[        R&                  U l        OGO"U R                  [        R&                  :X  Ga   U R"                  nU R,                  nXC-
  nUU:  a   UU-
  U l        UR/                  XS 5        UnO SU l        UR/                  XX>-    5        X>-   nU R"                  S:X  a  U R                  (       a%  U R*                  c   e[1        U R*                  U5        UR3                  U R                  U R                  XR                  45        [5        5       U l        [        R                  U l        OOGM0  XS U l         U$ )z&Return the next frame from the socket.r6   r   Tr;      r   r      r   r   z*Received frame with non-zero reserved bitsz!Received fragmented control frame   }   z5Control frame payload cannot be larger than 125 bytesNF~   r>   )r   r   r   r   r   r   r   r   r*   r   r   boolr   r   r   r   UNPACK_LEN2r   r   r   UNPACK_LEN3r   r   r   _websocket_maskr   r   )r\   r   frames	start_pos
buf_lengthrW   
first_bytesecond_byter   rsv1rsv2rsv3r   has_masklengthr   	chunk_lens                    r7   r   WebSocketReader.parse_frame  s&    ::"jj3.OC	X
{{m777)Q.9q=9DNI.2+J%?a/C&!Oq0D&!Oq0D&!Oq0D'#-F tT^^,'66H 
 |q,'66? 
 !,q 0A5H(4/F |,'66V  $*:*:*B374U(,'66H 
 '+3iDO)/&%)(^DN06-"/"C"CDK {{m???22S=!-2"y1}=!Q	!,T!21!5/5,  $~~ *;;!.!;!;  c\!-2"y1}=!Q	!,T!21!5/5,  $~~ *;;!.!;!;  +1(  >> &77*77 K {{m===)Q.'*y1}'ED$NI"/"<"<DK{{m888----&2	Y&+1I+=D(NN3z?3 *I+,D(NN393E#FG ) 2I''1,~~#//;;;'(8(8'BMM$*<*<gGWGWX +4+D'"/";";DKU X _
r6   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )T)rZ   N)r$   r%   r&   r'   r   r   rq   r   rh   r   r   r   r   r   r   r
   r   r   r5   r#   r6   r7   r   r     s    OS"y)"9<"HL"	"0	e 	dEk(: 	zu ztU{); zxYY	eD(3-HTNBC	DYr6   r   c                   t   \ rS rSrS\\R                  " 5       SSS.S\S\R                  S\
S\S	\R                  S
\S\
SS4S jjr SS\S\S
\\   SS4S jjrS
\S\4S jrS\SS4S jrSS\\\4   SS4S jjrSS\\\4   SS4S jjr  SS\\\4   S\
S
\\   SS4S jjrSS\S\\\4   SS4S jjrSrg) r   iX  Fr   )use_masklimitrandomr   r   protocol	transportr   r   r  r   r   rZ   Nc                    Xl         X l        X0l        UR                  U l        X`l        Xpl        SU l        X@l        SU l        S U l	        g )NFr   )
r  r  r   	randranger   r   _closing_limit_output_size_compressobj)r\   r  r  r   r   r  r   r   s           r7   rh   WebSocketWriter.__init__Y  sF     !" )) $!%r6   rd   r   c                   #    U R                   (       a#  U[        R                  -  (       d  [        S5      eSnU(       d  U R                  (       a  US:  a  U(       a  U R                  U5      nO=U R                  (       d   U R                  U R                  5      U l        U R                  nUR	                  U5      I Sh  vN nXR                  U R                  (       a  [        R                  O[        R                  5      -  nUR                  [        5      (       a  USS nUS-  n[        U5      nU R                  nU(       a  SnOSnUS:  a  [!        SU-  U-  Xh-  5      n	O3US	:  a  [#        SU-  U-  SU-  U5      n	O[%        SU-  U-  S
U-  U5      n	U(       a~  U R'                  SS5      n
U
R)                  SS5      n[+        U5      n[-        X5        U R/                  X-   U-   5        U =R0                  [        U	5      [        U5      -   U-   -  sl        OaU[2        :  a#  U R/                  U	5        U R/                  U5        OU R/                  X-   5        U =R0                  [        U	5      U-   -  sl        U R0                  U R4                  :  a*  SU l        U R6                  R9                  5       I Sh  vN   gg GN N	7f)<Send a frame over the websocket with message as its payload.!Cannot write to closing transportr   r>   N@   rb   r   rR   r   l    r   big)r  r   rE   ConnectionResetErrorr   _make_compress_objr	  flushr   zlibZ_FULL_FLUSHZ_SYNC_FLUSHendswithr   r   r   	PACK_LEN1	PACK_LEN2	PACK_LEN3r  to_bytesr   r   _writer  rQ   r  r  _drain_helper)r\   rd   r   r   rsvcompressobj
msg_lengthr   mask_bitheadermask_intr   s               r7   _send_frameWebSocketWriter._send_frameo  sX     ==&9??":&'JKK
 6A:"55h?(((,(?(?(ND%"//'0099G
 ((%)__!!$:K:K G  455!#2,*C\
==HHtczF2J4IJF7#tczF2C(NJOFtczF2C(NJOF~~a4H$$Q.D(GD*KK/0Vs4y!8:!EEH$F#G$F,-Vz!99
 t{{* !D----/// +[ :^ 0s%   B?KKG?KKKKc                 >    [        [        R                  U* [        S9$ )N)levelwbitsmax_sync_chunk_size)r   r  Z_BEST_SPEEDWEBSOCKET_MAX_SYNC_CHUNK_SIZE)r\   r   s     r7   r  "WebSocketWriter._make_compress_obj  s     ##) =
 	
r6   rW   c                     U R                   b  U R                   R                  5       (       a  [        S5      eU R                   R                  U5        g )Nr  )r  
is_closingr  write)r\   rW   s     r7   r  WebSocketWriter._write  s<    >>!T^^%>%>%@%@&'JKKT"r6   c                    #    [        U[        5      (       a  UR                  S5      nU R                  U[        R
                  5      I Sh  vN   g N7f)zSend pong message.r   N)r   r`   encoder$  r   rD   r\   rd   s     r7   rL   WebSocketWriter.pong  :     gs##nnW-Gw	777   A
AAAc                    #    [        U[        5      (       a  UR                  S5      nU R                  U[        R
                  5      I Sh  vN   g N7f)zSend ping message.r   N)r   r`   r2  r$  r   rC   r3  s     r7   rK   WebSocketWriter.ping  r5  r6  rJ   c                   #    [        U[        5      (       a  UR                  S5      nU(       a*  U R                  U[        R
                  U5      I Sh  vN   gU R                  U[        R                  U5      I Sh  vN   g N/ N7f)r  r   N)r   r`   r2  r$  r   rB   rA   )r\   rd   rJ   r   s       r7   sendWebSocketWriter.send  sh      gs##nnW-G""7I,<,<hGGG""7INNHEEE HEs$   ABB)B>B?BBrc   c                    #    [        U[        5      (       a  UR                  S5      n U R                  [	        U5      U-   [
        R                  S9I Sh  vN   SU l        g N! SU l        f = f7f)z<Close the websocket, sending the specified code and message.r   )r   NT)r   r`   r2  r$  PACK_CLOSE_CODEr   rE   r  )r\   rc   rd   s      r7   rM   WebSocketWriter.close  sm     gs##nnW-G	!""%/	 #    !DM	 !DMs.   'A2-A& A$A& A2$A& &	A//A2)
r  r	  r  r  r   r   r  r  r  r   rf   )r6   )FN)r"   r6   )r$   r%   r&   r'   rS   r  Randomr   asyncio	Transportr   rq   rh   r   r
   r$  r   r  r  r   r`   rL   rK   r:  rM   r5   r#   r6   r7   r   r   X  sx    " & && $$&
 & & & & & 
&. FJD0D0&)D05=c]D0	D0L
3 
> 
#5 #T #
8%s
"3 8d 88%s
"3 8d 8 "&	FsEz"F F 3-	F
 
F	! 	!U5#:5F 	!QU 	! 	!r6   r   )F)r   FF)Trp   r@  	functoolsr]   r  resysr  enumr   structr   typingr   r   r   r   r	   r
   r   r   r   r   r   base_protocolr   compression_utilsr   r   helpersr   r   streamsr   __all__r   rq   r8   r_   r+  r   r   r   unpack_fromr   r   unpackr   packr  r  r  r=  rQ   rS   r   rG   r   rF   r   r   r   rt   	byteorderrv   r`   	lru_cacher   r   r   r   
_websocketr   ImportErrorr   compiler   r   r   r   r   r   r   r   )is   0r7   <module>rV     s   +     	 
       ( ? 1 
'   9D'D1A'D U3s8_ D !)  0 ?e > Tl&&Tl&&4L'' 5M	6N	6N	,##%* !uSz ! 
   i..d; y00$= 'Y '.y .  #}} %* , BDK B B- -i -D -2 ,O160 &++C%D eEl D #%**/#
E'#,  )+

3P(Q %% Q0 # 0 $ 0 5dCS 0 h KP!!"&!CG!!,G | |~	L! L!y (Ex  101s   3I!I& &I10I1