
    3Cflh              	          U d Z 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Zddlm	Z	 ddl
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! dZ" G d de	      Z#e#D  ch c]
  }  e$|        c} Z%eee$      e&d<   dZ' G d de	      Z(dZ)ee*   e&d<    ed      jV                  Z, ed      jV                  Z- ed      j\                  Z/ ed      j`                  Z1 ed      j`                  Z2 ed      j`                  Z3 ed      j`                  Z4dZ5ee$   e&d<   dZ6ee$   e&d<    G d de      Z7 e7e(jp                  dd      Z9 e7e(jt                  dd      Z; G d d e<      Z= G d! d"e<      Z>ej~                  Z@eeA   e&d#<   ej                  d$ee*   fd%       ZCd&e*d'eDd$dfd(ZEereEZFn		 dd)lGmHZH eHZF e*g d*      ZJee*   e&d+<    ej                  d,      ZLeeeA      e&d-<    ej                  d.      ZMeeeA      e&d/<   d<d0eeA   d1eNd$ee$eNf   fd2ZO	 d=d3e$d1eNd4eNd$eAfd5ZP G d6 d7e	      ZQ G d8 d9      ZR G d: d;      ZSyc c} w # eI$ r eEZFY w xY w)>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                   @    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZy)r     i  i  i  i  i  i  i  i  i  i  i  i  N)__name__
__module____qualname__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     V/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/aiohttp/http_websocket.pyr   r   ,   sG    	BJNLONOOKr3   r   ALLOWED_CLOSE_CODESi   c                   P    e Zd ZdZdZdZdZdZdZdZ	dZ
d	ZeZeZeZeZeZe	Ze
ZeZy
)r   r   r      	   
         i  i  N)r"   r#   r$   CONTINUATIONTEXTBINARYPINGPONGCLOSECLOSINGCLOSEDERRORtextbinarypingpongcloseclosingclosederrorr2   r3   r4   r   r   H   sY    LDFDDE GFEDFDDEGFEr3   r   s$   258EAFA5-E914-47DA-95CA-C5AB0DC85B11r   z!Hz!Qz!BBz!BBHz!BBQi @  MSG_SIZE   DEFAULT_LIMITc                   h    e Zd ZU eed<   eed<   ee   ed<   ej                  dde
egef   defdZy)	r   typedataextra)loadsrT   returnc                &     || j                         S )zAReturn parsed JSON data.

        .. versionadded:: 0.22
        )rR   )selfrT   s     r4   jsonzWSMessage.jsont   s    
 TYYr3   N)r"   r#   r$   r   __annotations__r   r
   strrX   rT   r   r2   r3   r4   r   r   n   s;    
O
IC=48JJ  XseSj1  3  r3   r   c                   <     e Zd ZdZdededdf fdZdefdZ xZS )r   z WebSocket protocol parser error.codemessagerU   Nc                 4    || _         t        | 	  ||       y N)r\   super__init__)rW   r\   r]   	__class__s      r4   ra   zWebSocketError.__init__   s    	w'r3   c                 <    t        t        | j                  d         S )Nr   )r   rZ   argsrW   s    r4   __str__zWebSocketError.__str__   s    C1&&r3   )	r"   r#   r$   __doc__intrZ   ra   rf   __classcell__)rb   s   @r4   r   r      s,    *(S (3 (4 (' 'r3   r   c                       e Zd ZdZy)WSHandshakeErrorz#WebSocket protocol handshake error.N)r"   r#   r$   rg   r2   r3   r4   rk   rk      s    -r3   rk   native_byteorderrU   c            	      x     t        d      D   cg c]   t         fdt        d      D              ! c} S c c} w )Nr;   c              3   (   K   | ]	  }|z    y wr_   r2   ).0abs     r4   	<genexpr>z_xor_table.<locals>.<genexpr>   s     ,A!a%,   )rangebytes)rq   s   `r4   
_xor_tablerv      s*    6;CjAE,s,,AAAs   $7maskrR   c                    t        |t              sJ |       t        |       dk(  sJ |        |rt               fd| D        \  }}}}|ddd   j	                  |      |ddd<   |ddd   j	                  |      |ddd<   |ddd   j	                  |      |ddd<   |ddd   j	                  |      |ddd<   yy)aw  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   (   K   | ]	  }|     y wr_   r2   )ro   n
_XOR_TABLEs     r4   rr   z)_websocket_mask_python.<locals>.<genexpr>   s     2jm2rs   Nr   r7      )
isinstance	bytearraylenrv   	translate)rw   rR   rp   rq   cdr|   s         @r4   _websocket_mask_pythonr      s     dI&,,&t9>4>\
2T2
1a1I''*SqS	!$Q$Z))!,QTT
!$Q$Z))!,QTT
!$Q$Z))!,QTT
 r3   )_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                 D   | syd}d}t         j                  |       D ]  }|j                  d      }|sd} ||fS t        j	                  |      }|rd}|rP|j                  d      r't        |j                  d            }|dkD  s|dk  rd}p|j                  d      rd} ||fS |j                  d	      r/t        |j                  d	            }|dkD  s|dk  rt        d
      |j                  d      rd} ||fS |rt        d|j                  d      z          ||fS )N)r   Fr   Fr      ry   r8   T   zInvalid window sizer7   z#Extension for deflate not supported)r   finditergroupr   matchrh   rk   )r   r   compress
notakeoverextdefextr   s          r4   ws_ext_parser      sP   HJ((0 (Y1HJ ZI   (H ;;q>"5;;q>2H
  "}1#$ ;;q>!%J$ Z! ;;q>"5;;q>2H
  "}1./DEE;;q>!%J
 Z "#H399UV<#WXXQ(YT Zr3   r   server_notakeoverc                     | dk  s| dkD  rt        d      dg}|s|j                  d       | dk  r|j                  dt        |       z          |r|j                  d       dj                  |      S )	Nr8   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appendrZ   join)r   r   r   
enabledexts       r4   
ws_ext_genr      s    
 !|x"}T
 	
 ''J23"}3c(mCD67 99Z  r3   c                       e Zd ZdZdZdZdZy)WSParserStater   r7   r}   ry   N)r"   r#   r$   READ_HEADERREAD_PAYLOAD_LENGTHREAD_PAYLOAD_MASKREAD_PAYLOADr2   r3   r4   r   r     s    KLr3   r   c            
           e Zd Z	 ddee   dededdfdZddZde	de
ee	f   fd	Zde	de
ee	f   fd
Zde	dee
eee   eee   f      fdZy)r   queuemax_msg_sizer   rU   Nc                 .   || _         || _        d | _        t               | _        t
        j                  | _        d | _        d| _	        d | _
        t               | _        d| _        d| _        d | _        d| _        d| _        d | _        d | _        || _        y )NFr3   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)rW   r   r   r   s       r4   ra   zWebSocketReader.__init__  s     
)-1	!#//&*,0'k
,0 $%!+/:>!r3   c                 8    | j                   j                          y r_   )r   feed_eofre   s    r4   r   zWebSocketReader.feed_eof2  s    

r3   rR   c                     | j                   rd|fS 	 | j                  |      S # t        $ r'}|| _         t        | j                  |       Y d }~yd }~ww xY w)NT)Tr3   )r   
_feed_data	Exceptionr   r   )rW   rR   excs      r4   	feed_datazWebSocketReader.feed_data5  sO    99:	??4(( 	DI$**c*	s   # 	AAAc           
         | j                  |      D ]f  \  }}}}|r| j                  st        d      | _        |t        j                  k(  rt        |      dk\  rlt        |d d       d   }|dk  r%|t        vrt        t        j                  d|       	 |dd  j                  d      }t        t        j                  ||      }	n@|r#t        t        j                  d	| d
| d
|      t        t        j                  dd      }	| j                  j!                  |	d       |t        j"                  k(  r@| j                  j!                  t        t        j"                  |d      t        |             f|t        j$                  k(  r@| j                  j!                  t        t        j$                  |d      t        |             |t        j&                  t        j(                  fvr)| j*                  t        t        j                  d|      |s|t        j,                  k7  r|| _        | j.                  j1                  |       | j2                  sIt        | j.                        | j2                  k\  smt        t        j4                  dj7                  t        | j.                        | j2                              | j.                  r<|t        j,                  k7  r)t        t        j                  dj7                  |            |t        j,                  k(  r!| j*                  J | j*                  }d | _        | j.                  j1                  |       | j2                  rit        | j.                        | j2                  k\  rGt        t        j4                  dj7                  t        | j.                        | j2                              |r| j                  J | j.                  j1                  t8               | j                  j;                  | j.                  | j2                        }
| j                  j<                  rut        | j                  j<                        }t        t        j4                  dj7                  | j2                  |z   | j2                              t?        | j.                        }
| j.                  jA                          |t        j&                  k(  rR	 |
j                  d      }| j                  j!                  t        t        j&                  |d      t        |             )| j                  j!                  t        t        j(                  |
d      t        |
             i y# t        $ r }t        t        j                  d      |d }~ww xY w# t        $ r }t        t        j                  d      |d }~ww xY w)NT)suppress_deflate_headerr7   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 {})Fr3   )!parse_framer   r   r   rA   r   UNPACK_CLOSE_CODEr5   r   r   r'   decodeUnicodeDecodeErrorr*   r   r   r   r?   r@   r=   r>   r   r<   r   extendr   r,   formatr   decompress_syncunconsumed_tailru   clear)rW   rR   finopcodepayload
compressed
close_codeclose_messager   msgpayload_mergedleftrE   s                r4   r   zWebSocketReader._feed_data@  s   040@0@0F w	,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  }}!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w	r Y . #,'446R"##D  2 '"0 + 8 8:V##&''s1   U=*AV)=	V&V!!V&)	W2WWbufc                 r   g }| j                   r| j                   |z   dc}| _         d}t        |      }	 | j                  t        j                  k(  rG||z
  dk\  r<|||dz    }|dz  }|\  }}|dz	  dz  }|dz	  dz  }	|dz	  dz  }
|d	z	  dz  }|d
z  }|
s|s|	r&| j
                  st        t        j                  d      |dkD  r|dk(  rt        t        j                  d      |dz	  dz  }|dz  }|dkD  r|dkD  rt        t        j                  d      | j                  s| j                  |	rdnd| _
        n|	rt        t        j                  d      t        |      | _	        || _        t        |      | _        || _        t        j                  | _        nn| j                  t        j                  k(  r
| j                  }|dk(  r^||z
  dk\  rT|||dz    }|dz  }t!        |      d   }|| _        | j                  rt        j$                  nt        j&                  | _        nn|dkD  r^||z
  dk\  rT|||dz    }|dz  }t)        |      d   }|| _        | j                  rt        j$                  nt        j&                  | _        n:n|| _        | j                  rt        j$                  nt        j&                  | _        | j                  t        j$                  k(  r2||z
  d	k\  r(|||d	z    | _        |d	z  }t        j&                  | _        nn| j                  t        j&                  k(  r| j"                  }| j,                  }||z
  }||k\  r!||z
  | _        |j/                  ||d        |}n#d| _        |j/                  ||||z           ||z   }| j"                  dk(  r| j                  r$| j*                  J t1        | j*                  |       |j3                  | j                  | j                  || j                  f       t5               | _        t        j                  | _        nn||d | _         |S )z&Return the next frame from the socket.r3   r   Tr7      r   r      ry   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   )rW   r   frames	start_pos
buf_lengthrR   
first_bytesecond_byter   rsv1rsv2rsv3r   has_masklengthr   	chunk_lens                    r4   r   zWebSocketReader.parse_frame  sR    ::"jj3.OC	X
{{m777	)Q.y9q=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)/D&%)(^DN06D-"/"C"CDK {{m???22S=!I-2"9y1}=!Q	!,T!21!5/5,  $~~ *;;!.!;!;  c\!I-2"9y1}=!Q	!,T!21!5/5,  $~~ *;;!.!;!;  +1D(  >> &77*77 K {{m===	)Q.'*9y1}'ED$NI"/"<"<DK{{m888----&2	Y&+1I+=D(NN3yz?3 *I+,D(NN3y9v3E#FG )F 2I''1,~~#//;;;'(8(8'BMM$*<*<gtGWGWX +4+D'"/";";DKU X _
r3   )T)rU   N)r"   r#   r$   r   r   rh   r   ra   r   ru   r   r   r   r   r
   r   r   r2   r3   r4   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r3   r   c                   P   e Zd Zde ej
                         ddddedej                  de	de
dej
                  d	e
d
e	ddfdZ	 ddede
d	ee
   ddfdZd	e
defdZdeddfdZddeeef   ddfdZddeeef   ddfdZ	 	 ddeeef   de	d	ee
   ddfdZdde
deeef   ddfdZy)r   Fr   )use_masklimitrandomr   r   protocol	transportr   r   r   r   r   rU   Nc                    || _         || _        || _        |j                  | _        || _        || _        d| _        || _        d| _        d | _	        y )NFr   )
r   r   r   	randranger   r   _closing_limit_output_size_compressobj)rW   r   r   r   r   r   r   r   s           r4   ra   zWebSocketWriter.__init__Y  sR     !" )) $!%r3   r]   r   c                 :  K   | j                   r|t        j                  z  st        d      d}|s| j                  r|dk  r|r| j                  |      }n8| j                  s | j                  | j                        | _        | j                  }|j	                  |       d{   }||j                  | j                  rt        j                  nt        j                        z  }|j                  t              r|dd }|dz  }t        |      }| j                  }|rd}nd}|dk  rt!        d|z  |z  ||z        }	n2|d	k  rt#        d|z  |z  d|z  |      }	nt%        d|z  |z  d
|z  |      }	|r| j'                  dd      }
|
j)                  dd      }t+        |      }t-        ||       | j/                  |	|z   |z          | xj0                  t        |	      t        |      z   |z   z  c_        na|t2        kD  r#| j/                  |	       | j/                  |       n| j/                  |	|z          | xj0                  t        |	      |z   z  c_        | j0                  | j4                  kD  r*d| _        | j6                  j9                          d{    yy7 7 	w)<Send a frame over the websocket with message as its payload.!Cannot write to closing transportr   r:   N@      r   rN   r   l    ry   big)r   r   rA   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   rM   r   r   _drain_helper)rW   r]   r   r   rsvcompressobj
msg_lengthr   mask_bitheadermask_intrw   s               r4   _send_framezWebSocketWriter._send_frameo  sa     ==&9??":&'JKK
 6A:"55h?(((,(?(?(ND%"//'0099G
 {((%)__!!$:K:K G  45!#2,*C\
==HHtczF2J4I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$FW,-Vz!99
 t{{* !D----/// +[ :^ 0s%   B J"J#G,JJJJc                 D    t        t        j                  | t              S )N)levelwbitsmax_sync_chunk_size)r   r  Z_BEST_SPEEDWEBSOCKET_MAX_SYNC_CHUNK_SIZE)rW   r   s     r4   r  z"WebSocketWriter._make_compress_obj  s     ##) =
 	
r3   rR   c                     | j                   | j                   j                         rt        d      | j                   j                  |       y )Nr   )r   
is_closingr  write)rW   rR   s     r4   r  zWebSocketWriter._write  s9    >>!T^^%>%>%@&'JKKT"r3   c                    K   t        |t              r|j                  d      }| j                  |t        j
                         d{    y7 w)zSend pong message.r   N)r~   rZ   encoder  r   r@   rW   r]   s     r4   rH   zWebSocketWriter.pong  8     gs#nnW-Gw	777   AAAAc                    K   t        |t              r|j                  d      }| j                  |t        j
                         d{    y7 w)zSend ping message.r   N)r~   rZ   r  r  r   r?   r   s     r4   rG   zWebSocketWriter.ping  r!  r"  rF   c                    K   t        |t              r|j                  d      }|r*| j                  |t        j
                  |       d{    y| j                  |t        j                  |       d{    y7 /7 w)r   r   N)r~   rZ   r  r  r   r>   r=   )rW   r]   rF   r   s       r4   sendzWebSocketWriter.send  sg      gs#nnW-G""7I,<,<hGGG""7INNHEEE HEs$   AA>
A:)A>4A<5A><A>r\   c                    K   t        |t              r|j                  d      }	 | j                  t	        |      |z   t
        j                         d{    d| _        y7 # d| _        w xY ww)z<Close the websocket, sending the specified code and message.r   )r   NT)r~   rZ   r  r  PACK_CLOSE_CODEr   rA   r   )rW   r\   r]   s      r4   rI   zWebSocketWriter.close  sk     gs#nnW-G	!""%/	 #    !DM	 !DMs.   "A00A$ A"A$ A0"A$ $	A--A0r_   )r3   )FN)r!   r3   )r"   r#   r$   rO   r   Randomr   asyncio	Transportr   rh   ra   ru   r
   r  r   r  r  r   rZ   rH   rG   r%  rI   r2   r3   r4   r   r   X  su    " - && $$&
 & & & & & 
&. 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 	!r3   r   )F)r   FF)Trg   r)  	functoolsrX   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   rh   r5   rY   r  r   r   ru   unpack_fromr   r   unpackr   packr  r	  r
  r'  rM   rO   r   rC   r   rB   r   r   r   rk   	byteorderrl   rZ   	lru_cacherv   r   r   r   
_websocketr   ImportErrorr   compiler   r   r   r   r   r   r   r   )is   0r4   <module>r?     s   +     	 
       ( ? 1 
'   9D'D1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'#,  )3

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 I"!I"