
    < j^              	        ^  S r SSKJr  SSKrSSKrSSKrSSKJrJr  SSK	J
r
  SSKJrJr  \(       a  SSKJr  SS	KJr  \" S
5       V ^ s/ s H  m \" U 4S j\" S
5       5       5      PM     sn r " S S5      r " S S5      rSrSrSrSrSr\rSrSrSrSr Sr!Sr"Sr# " S S\
5      r$ " S S\
5      r%\%RL                  \%RN                  \%RP                  4r)Sr*Sr+Sr,S r-S!r.S"r/S#r0S#r1\Rd                  " S$S5      r3 " S% S&\45      r5 " S' S(\5      r6 " S) S*\5      r7 " S+ S,\5      r8S6S- jr9 " S. S/5      r: " S0 S15      r; " S2 S35      r< " S4 S55      r=gs  sn f )7zY
wsproto/frame_protocol
~~~~~~~~~~~~~~~~~~~~~~

WebSocket frame protocol implementation.
    )annotationsN)IncrementalDecodergetincrementaldecoder)IntEnum)TYPE_CHECKING
NamedTuple)	Generator   )	Extension   c              3  ,   >#    U  H	  oT-  v   M     g 7fN ).0abs     g/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/wsproto/frame_protocol.py	<genexpr>r      s     .:aE:s   c                  (    \ rS rSrSS jrSS jrSrg)XorMaskerSimple   c                    Xl         g r   _masking_key)selfmasking_keys     r   __init__XorMaskerSimple.__init__   s    '    c                   [        U5      nU(       a  UnS U R                   5       u  p4pVU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'   [        U5      S-  nU R                  US  U R                  S U -   U l        U$ U$ )Nc              3  4   #    U  H  n[         U   v   M     g 7fr   )
_XOR_TABLE)r   ns     r   r   *XorMaskerSimple.process.<locals>.<genexpr>!   s     C1BA*Q-1Bs      r
         )	bytearrayr   	translatelen)r   data
data_arrayr   r   cdkey_rotations           r   processXorMaskerSimple.process   s    JC1B1BCJA!(1o77:JssO)!$Q$/99!<Jqt!t)!$Q$/99!<Jqt!t)!$Q$/99!<Jqt!t t9q=L!!,-043D3D]l3SS  r   r   N)r   zbytearray | bytesreturnNoner+   r(   r2   r(   )__name__
__module____qualname____firstlineno__r   r0   __static_attributes__r   r   r   r   r      s    (r   r   c                      \ rS rSrSS jrSrg)XorMaskerNull2   c                    U$ r   r   r   r+   s     r   r0   XorMaskerNull.process3   s    r   r   Nr4   )r5   r6   r7   r8   r0   r9   r   r   r   r;   r;   2   s    r   r;   ~      }   i  l       @             c                  :    \ rS rSrSrSrSrSrSrSr	Sr
SS	 jrS
rg)OpcodeM   z/
RFC 6455, Section 5.2 - Base Framing Protocol
r   r
   r&      	   
   c                    [        U S-  5      $ )NrK   )boolr   s    r   	iscontrolOpcode.iscontrold   s    D4K  r   r   Nr2   rO   )r5   r6   r7   r8   __doc__CONTINUATIONTEXTBINARYCLOSEPINGPONGrQ   r9   r   r   r   rI   rI   M   s6    
 L D F E D D!r   rI   c                  P    \ 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SrSrg)CloseReasonh   z0
RFC 6455, Section 7.4.1 - Defined Status Codes
  i  i  i  i  i  i  i  i  i  i  i  i  i  r   N)r5   r6   r7   r8   rT   NORMAL_CLOSURE
GOING_AWAYPROTOCOL_ERRORUNSUPPORTED_DATANO_STATUS_RCVDABNORMAL_CLOSUREINVALID_FRAME_PAYLOAD_DATAPOLICY_VIOLATIONMESSAGE_TOO_BIGMANDATORY_EXTINTERNAL_ERRORSERVICE_RESTARTTRY_AGAIN_LATERTLS_HANDSHAKE_FAILEDr9   r   r   r   r\   r\   h   sn     N J N  N  "& 
 O M
 N O O  r   r\   r^   i  i  i  i  i  z!Ic                  P   ^  \ rS rSr\R
                  4     SU 4S jjjrSrU =r$ )ParseFailed   c                0   > [         TU ]  U5        X l        g r   )superr   code)r   msgrr   	__class__s      r   r   ParseFailed.__init__   s     		r   )rr   )rs   strrr   r\   r2   r3   )	r5   r6   r7   r8   r\   ra   r   r9   __classcell__)rt   s   @r   rn   rn      s.    ,7,F,F)	 r   rn   c                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg)RsvBits   rO   rsv1rsv2rsv3r   Nr5   r6   r7   r8   __annotations__r9   r   r   r   ry   ry      s    
J
J
Jr   ry   c                  H    \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   Srg)Header   rO   finry   rsvrI   opcodeintpayload_lenbytes | Noner   r   Nr~   r   r   r   r   r      s    	I	LNr   r   c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	rg
)Frame   rI   r   zbytes | str | tuple[int, str]payloadrO   frame_finishedmessage_finishedr   Nr~   r   r   r   r   r      s    N**r   r   c                l    [        U 5      U::  a  U $ U S U n U R                  SSS9R                  S5      $ )Nutf-8ignore)errors)r*   decodeencode)r+   nbytess     r   _truncate_utf8r      s@    
4yF =D ;;wx;077@@r   c                  ^    \ rS rSrSSS jjrSS jrSS jrSS jrSS jrSS jr	SS	 jr
S
rg)Bufferi  Nc                b    [        5       U l        SU l        U(       a  U R                  U5        g g Nr   )r(   buffer
bytes_usedfeed)r   initial_bytess     r   r   Buffer.__init__  s&    kIIm$ r   c                .    U =R                   U-  sl         g r   )r   )r   	new_bytess     r   r   Buffer.feed  s    y r   c                    U(       d
  [        5       $ U R                  U R                  U R                  U-    nU =R                  [        U5      -  sl        U$ r   )r(   r   r   r*   )r   r   r+   s      r   consume_at_mostBuffer.consume_at_most  sA    ;{{4??T__v-EF3t9$r   c                r    [        U R                  5      U R                  -
  U:  a  g U R                  U5      $ r   )r*   r   r   r   )r   r   s     r   consume_exactlyBuffer.consume_exactly  s0    t{{doo-6##F++r   c                D    U R                   S U R                  2	 SU l        g r   r   r   rP   s    r   commitBuffer.commit  s    KK)$//)*r   c                    SU l         g r   )r   rP   s    r   rollbackBuffer.rollback  s	    r   c                ,    [        U R                  5      $ r   )r*   r   rP   s    r   __len__Buffer.__len__!  s    4;;r   r   r   )r   r   r2   r3   )r   bytesr2   r3   )r   r   r2   r(   )r   r   r2   zbytearray | Noner2   r3   )r2   r   )r5   r6   r7   r8   r   r   r   r   r   r   r   r9   r   r   r   r   r     s%    %!,
 r   r   c                  (    \ rS rSrSS jrSS jrSrg)MessageDecoderi%  c                     S U l         S U l        g r   )r   decoderrP   s    r   r   MessageDecoder.__init__&  s    %)26r   c                   UR                   R                  5       (       a   eU R                   c<  UR                   [        R                  L a  Sn[	        U5      eUR                   U l         O8UR                   [        R                  La  SUR                   < 3n[	        U5      eUR                   [        R
                  L a  [        S5      " 5       U l        UR                  =(       a    UR                  nU R                  c  UR                  nON[        UR                  [        [        45      (       d   e U R                  R                  UR                  U5      n['        U R                   XAR                  U5      nU(       a  S U l         S U l        U$ ! [         a(  n[	        [!        U5      ["        R$                  5      eS nAff = f)Nzunexpected CONTINUATIONzexpected CONTINUATION, got r   )r   rQ   rI   rU   rn   rV   r   r   r   r   r   
isinstancer   r(   r   UnicodeDecodeErrorrv   r\   re   r   )r   framers   finishedr+   excs         r   process_frameMessageDecoder.process_frame*  s_   <<))++++;;||v222/!#&&,,DK\\!4!44//?@Cc""<<6;;&09;DL''BE,B,B<<==DemmeY-?@@@@T||**5==(C dkk4)=)=xHDKDL & T!#c(K,R,RSSTs   6&F 
G#GG)r   r   Nr   r   r   r2   r   )r5   r6   r7   r8   r   r   r9   r   r   r   r   r   %  s    7 r   r   c                  |    \ rS rSr S
     SS jjrSS jrSS jrSS jr      SS jr        SS jr	S	r
g)FrameDecoderiM  Nc                    Xl         U=(       d    / U l        [        5       U l        S U l        S U l        S U l        SU l        SU l        g r   )	client
extensionsr   r   headereffective_opcodemaskerpayload_requiredpayload_consumed)r   r   r   s      r   r   FrameDecoder.__init__N  sD     $*h%)/3>B ! !r   c                :    U R                   R                  U5        g r   )r   r   r>   s     r   receive_bytesFrameDecoder.receive_bytes\  s    r   c                   U R                   (       d  U R                  5       (       d  g U R                   c   eU R                  c   eU R                  c   e[	        U R
                  5      U R                  :  a  g U R                   R                  U R                  -
  nU R
                  R                  U5      nU(       d  U R                   R                  S:  a  g U R
                  R                  5         U =R                  [	        U5      -  sl        U R                  U R                   R                  :H  nU R                  R                  U5      nU R                   HK  nUR                  U [        U5      5      n[        U[         5      (       a  Sn[#        Xe5      e[%        U5      nMM     U(       aq  [%        5       nU R                   HS  nUR'                  X R                   R(                  5      n[        U[         5      (       a  Sn[#        Xh5      eUc  MO  Xx-  nMU     X'-  n[+        U R                  [        U5      X0R                   R(                  5      n	U(       a  S U l         S U l        S U l        U	$ [,        R.                  U l        U	$ )Nr   error in extension)r   parse_headerr   r   r*   r   r   r   r   r   r   r0   r   frame_inbound_payload_datar   r   r\   rn   r(   frame_inbound_completer   r   rI   rU   )
r   payload_remainingr   r   	extensionpayload_rs   finalresultr   s
             r   process_bufferFrameDecoder.process_buffer_  s   {{4#4#4#6#6{{&&&{{&&&$$000t{{d333 KK33d6K6KK++--.?@4;;22Q6W-((DKK,C,CC++%%g.I ;;D%.QH(K00*!#00)G ) KE!__	"99$Pfk22.C%c22%OE - Gd++U7^X{{WDK$(D!DK  %+$7$7D!r   c                   U R                   R                  S5      nUc  U R                   R                  5         g[        US   [        -  5      n[        [        US   [        -  5      [        US   [        -  5      [        US   [        -  5      5      nUS   [        -  n [        U5      nUR                  5       (       a  U(       d  Sn[        U5      e[        US   [        -  5      nUS   [        -  nU R!                  XG5      nUc  U R                   R                  5         gU R#                  XCU5        U(       a  U R$                  (       a  Sn[        U5      eU(       d  U R$                  (       d  S	n[        U5      eU(       aJ  U R                   R                  S
5      n	U	c  U R                   R                  5         g['        U	5      U l        O[+        5       U l        U R                   R-                  5         [/        X#XHS 5      U l        U R0                  R2                  U l        U R0                  R2                  R                  5       (       a  Xl        OSU l        SU l        g! [         a    SUS 3n[        U5      ef = f)Nr&   Fr   zInvalid opcode z#xz)Invalid attempt to fragment control framer
   z'client received unexpected masked framez)server received unexpected unmasked framer%   T)r   r   r   rO   FIN_MASKry   	RSV1_MASK	RSV2_MASK	RSV3_MASKOPCODE_MASKrI   
ValueErrorrn   rQ   	MASK_MASKPAYLOAD_LEN_MASKparse_extended_payload_lengthextension_processingr   r   r   r;   r   r   r   r   r   r   r   )
r   r+   r   r   r   rs   has_maskpayload_len_shortr   r   s
             r   r   FrameDecoder.parse_header  s!   {{**1-<KK  "47X%&a9$%a9$%a9$%

 a;&	#F^F
 c=Cc""Q)+, G&6688SKK  "!!&{;;Cc""=Cc""++55a8K"$$&)+6DK'/DKSvDA $ 2 2;;''))$/!$%D! !Q  	##F2;/Cc""	#s   "I( (Jc                   UR                  5       (       a  U[        :  a  Sn[        U5      eU[        :X  aR  U R                  R                  S5      nUc  g [        R                  " SU5      u  nU[        ::  a  Sn[        U5      e U$ U[        :X  af  U R                  R                  S5      nUc  g [        R                  " SU5      u  nU[        ::  a  Sn[        U5      eUS-	  (       a  S	n[        U5      eU$ )
Nz$Control frame with payload len > 125r&   !Hz6Payload length used 2 bytes when 1 would have sufficedrK   !Qz6Payload length used 8 bytes when 2 would have sufficed?   z'8-byte payload length with non-zero MSB)
rQ   MAX_PAYLOAD_NORMALrn   PAYLOAD_LENGTH_TWO_BYTEr   r   structunpackPAYLOAD_LENGTH_EIGHT_BYTEMAX_PAYLOAD_TWO_BYTE)r   r   r   rs   r+   s        r   r   *FrameDecoder.parse_extended_payload_length  s    +0B"B8Cc""11;;..q1D|#]]46N[00N!  1* ! 55;;..q1D|#]]46N[22N!  b  @!#&&r   c                >   / SQnU R                    HX  nUR                  XX#5      n[        U[        5      (       a  Sn[	        Xv5      e[        U5       H  u  pU	(       d  M  SXH'   M     MZ     [        XB5       H"  u  pU(       d  M  U
(       a  M  Sn[	        U5      e   g )N)FFFr   TzReserved bit set unexpectedly)r   frame_inbound_headerr   r\   rn   	enumeratezip)r   r   r   r   rsv_usedr   r   rs   bitusedexpectedfounds               r   r   !FrameDecoder.extension_processing  s     )I33D#SF&+..*!#..&v.	4$(HM / )  #81OHuXX5!#&&  2r   )r   r   r   r   r   r   r   r   r   )r   rO   r   zlist[Extension] | Noner2   r3   r+   r   r2   r3   )r2   zFrame | NonerS   )r   rI   r   r   r2   
int | None)r   rI   r   ry   r   r   r2   r3   )r5   r6   r7   r8   r   r   r   r   r   r   r9   r   r   r   r   r   M  sv    AE""(>"	"1f7r  +. 	 D''#*'9<'	'r   r   c                      \ rS rSrSS jrSS jrSS jrSS jrSS jrSSS jjr	SSS	 jjr
SSS
 jjr S     SS jjrSS jr S       SS jjrSrg)FrameProtocoli  c                   Xl         U Vs/ s H  o3R                  5       (       d  M  UPM     snU l        [        U R                   U R                  5      U l        [        5       U l        U R                  5       U l        S U l	        g s  snf r   )
r   enabledr   r   _frame_decoderr   _message_decoder_parse_more_gen_parse_more_outbound_opcode)r   r   r   exts       r   r   FrameProtocol.__init__   sf    *4F*33*F +4;;H . 0//1/3 Gs
   BBc                4   UR                   n[        U[        [        45      (       d   eU(       d  [        R
                  S4nO[        U5      S:X  a  Sn[        U5      e[        R                  " SUS S 5      u  nU[        :  d
  U[        :  a  Sn[        U5      e[        R                  " [        5         [	        U5      nS S S 5        U[        ;   a  Sn[        U5      e[        U[        5      (       d  U[         ::  a  Sn[        U5      e USS  R#                  S	5      nXE4n[+        UR,                  X!R.                  UR0                  5      $ ! , (       d  f       N= f! [$         a+  n[        S
['        U5      -   [        R(                  5      eS nAff = f)N r
   zCLOSE with 1 byte payloadr   r&   zCLOSE with invalid codez#remote CLOSE with local-only reasonz CLOSE with unknown reserved coder   zError decoding CLOSE reason: )r   r   r   r(   r\   rc   r*   rn   r   r   MIN_CLOSE_REASONMAX_CLOSE_REASON
contextlibsuppressr   LOCAL_ONLY_CLOSE_REASONSMAX_PROTOCOL_CLOSE_REASONr   r   rv   re   r   r   r   r   )r   r   r+   rs   rr   reasonr   s          r   _process_closeFrameProtocol._process_close  sd   }}$	 23333  ..3DY!^-Cc""mmD$r(3GT&&$1A*A/!#&&$$Z0"4( 1//;!#&&dK00T=V5V8!#&&ab1 >DU\\4)=)=u?U?UVV# 10 & !3c#h>:: s$   7EE" 
E"
F,&FFc              #    #    U R                    Vs/ s H  oR                  5       (       d  M  UPM     snU l         SnU(       d  U R                  R                  5       nUbl  UR                  R                  5       (       d  U R                  R                  U5      nO1UR                  [        R                  :X  a  U R                  U5      nSnUv   U(       d  M  g g s  snf 7f)NFT)r   r  r  r   r   rQ   r  r   rI   rX   r  )r   r  closedr   s       r   r  FrameProtocol._parse_more_gen.  s      +///K/3[[]3/K''668E ||--// 11??FE\\V\\1 //6E!FK & Ls   C!CCB%C!C!c                :    U R                   R                  U5        g r   )r  r   r>   s     r   r   FrameProtocol.receive_bytesC  s    ))$/r   c              #  D   #    U R                    H  nUc    g Uv   M     g 7fr   )r	  )r   events     r   received_framesFrameProtocol.received_framesF  s"     %%E}	 &s    Nc                ~   [        5       nU[        R                  L a  S nUc  U(       a  Sn[        U5      eU[        ;   a  [        R
                  nUbK  U[        [        R                  " SU5      5      -  nUb%  U[        UR                  S5      [        S-
  5      -  nU R                  [        R                  U5      $ )Nz&cannot specify a reason without a coder   r   r&   )r(   r\   rc   	TypeErrorr  r_   r   packr   r   r   _serialize_framerI   rX   )r   rr   r  r   rs   s        r   closeFrameProtocol.closeM  s    +;---D<F:CC. ++--DyT4!899G!>MM'*,>,B  $$V\\7;;r   c                B    U R                  [        R                  U5      $ r   )r$  rI   rY   r   r   s     r   pingFrameProtocol.ping_      $$V[['::r   c                B    U R                  [        R                  U5      $ r   )r$  rI   rZ   r(  s     r   pongFrameProtocol.pongb  r+  r   c                   [        U[        [        [        45      (       a  [        R
                  nOD[        U[        5      (       a"  [        R                  nUR                  S5      nOSn[        U5      eU R                  c  X0l
        O,U R                  ULa  Sn[        U5      e[        R                  nU(       a  S U l
        U R                  X1U5      $ )Nr   zMust provide bytes or textz!Data type mismatch inside message)r   r   r(   
memoryviewrI   rW   rv   rV   r   r"  r
  rU   r$  )r   r   r   r   rs   s        r   	send_dataFrameProtocol.send_datae  s     gy*=>>]]F%%[[FnnW-G.CC.   ($*!""&05CC. ((F$(D!$$Vc::r   c                    [        U5      S-  n[        UR                  5      S-  [        UR                  5      S-  -   [        UR                  5      S-  -   n[        U5      nXE-  U-  $ )N         r%   )r   r{   r|   r}   )r   r   r   r   fin_bitsrsv_bitsopcode_bitss          r   _make_fin_rsv_opcode"FrameProtocol._make_fin_rsv_opcode~  s]    s8q=MQ&3sxx=A+=>#chh-STBTU&k"[00r   c           	     H   [        U5      n[        SSS5      n[        U R                  5       H"  nUR	                  XU[        U5      U5      u  pBM$     U R                  X4U5      n[        U5      nSnU[        ::  a  Un	S n
OU[        ::  a	  [        n	Un
O
[        n	Un
SnU R                  (       a  U	S-  n	[        Xi/5      nU
bp  UR                  5       (       a  Sn[        U5      eU(       a$  U[        [        R                   " SU
5      5      -  nO#U[        [        R                   " SU
5      5      -  nU R                  (       aR  [        ["        R$                  " S5      5      n['        U5      n[        X-   UR)                  [        U5      5      -   5      $ [        X-   5      $ )NFTrC   z"payload too long for control framer   r   r%   )r(   ry   reversedr   frame_outboundr   r:  r*   r   r   r   r   r   rQ   r   r   r#  osurandomr   r0   )r   r   r   r   r   r   fin_rsv_opcodepayload_lengthquad_payloadfirst_payloadsecond_payloadr   rs   r   r   s                  r   r$  FrameProtocol._serialize_frame  sr    G$eUE*!$//2I$33D#uW~WZ[LC 3 223VDW//*M!N333M+N5M+NL;;V#MN:;%!!: o%)FKKn$EFF)FKKn$EFF;; $BJJqM2K$[1FV1FNN9WCU4VVWW)**r   )r  r  r
  r	  r   r   )r   rO   r   zlist[Extension]r2   r3   r   )r2   z#Generator[Frame | None, None, None]r   )r2   zGenerator[Frame, None, None])NN)rr   r  r  z
str | Noner2   r(   )r   )r   r   r2   r(   )r   T)r   zbytes | bytearray | strr   rO   r2   r(   )r   rO   r   ry   r   rI   r2   r   )r   rI   r   zbytes | bytearrayr   rO   r2   r(   )r5   r6   r7   r8   r   r  r  r   r  r%  r)  r-  r1  r:  r$  r9   r   r   r   r  r    s    	4!WF*0<$;; CG;.;;?;	;21 MQ5+5+'85+EI5+	5+ 5+r   r  )r+   r   r   r   r2   r   )>rT   
__future__r   r  r?  r   codecsr   r   enumr   typingr   r   collections.abcr	   r   r   ranger   r"   r   r;   r   r   r   r   MAX_PAYLOAD_EIGHT_BYTEMAX_FRAME_PAYLOADr   r   r   r   r   r   r   rI   r\   rc   rd   rl   r  r  MIN_PROTOCOL_CLOSE_REASONr  MIN_LIBRARY_CLOSE_REASONMAX_LIBRARY_CLOSE_REASONMIN_PRIVATE_CLOSE_REASONMAX_PRIVATE_CLOSE_REASONr  r#  	NULL_MASK	Exceptionrn   ry   r   r   r   r   r   r   r  )r   s   pr   <module>rV     s   #  	  <  ,)% 9>c
C
1e.5:..
C
 2       " *  	  			!W !6T ' T r   $$             KKa 	) j Z J A!  ! H% %Po' o'd{+ {+S Ds   
"E