
    ,hi[              	           d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZ erddlmZ  ed      D   cg c]    e fd	 ed      D               c} Z G d
 d      Z G d d      ZdZdZdZdZdZeZdZdZdZdZ dZ!dZ"dZ# G d de      Z$ G d de      Z%e%jL                  e%jN                  e%jP                  fZ)dZ*dZ+dZ,dZ-dZ.d Z/d!Z0d!Z1 ejd                  d"d      Z3 G d# d$e4      Z5 G d% d&e      Z6 G d' d(e      Z7 G d) d*e      Z8d+ed,e9d-efd.Z: G d/ d0      Z; G d1 d2      Z< G d3 d4      Z= G d5 d6      Z>yc c} w )7zY
wsproto/frame_protocol
~~~~~~~~~~~~~~~~~~~~~~

WebSocket frame protocol implementation.
    N)getincrementaldecoderIncrementalDecoder)IntEnum)	GeneratorList
NamedTupleOptionalTupleTYPE_CHECKINGUnion   )	Extension   c              3   (   K   | ]	  }|z    y wN ).0abs     X/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/wsproto/frame_protocol.py	<genexpr>r      s     .aAE.s   c                   ,    e Zd ZdeddfdZdedefdZy)XorMaskerSimplemasking_keyreturnNc                     || _         y r   )_masking_key)selfr   s     r   __init__zXorMaskerSimple.__init__   s
    '    datac                    |rt        |      }d | j                  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<   t        |      dz  }| j                  |d  | j                  d | z   | _        t	        |      S |S )Nc              3   .   K   | ]  }t         |     y wr   )
_XOR_TABLE)r   ns     r   r   z*XorMaskerSimple.process.<locals>.<genexpr>   s     CA*Q-Cs      r         )	bytearrayr   	translatelenbytes)r   r!   
data_arrayr   r   cdkey_rotations           r   processzXorMaskerSimple.process   s   "4JC1B1BCJAq!Q(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    )__name__
__module____qualname__r,   r   r1   r   r    r   r   r      s(    (E (d (E e r    r   c                       e Zd ZdedefdZy)XorMaskerNullr!   r   c                     |S r   r   r   r!   s     r   r1   zXorMaskerNull.process.   s    r    N)r2   r3   r4   r,   r1   r   r    r   r6   r6   -   s    E e r    r6   ~      }   i  l       @             c                   4    e Zd ZdZdZdZdZdZdZdZ	de
fd	Zy
)Opcodez7
    RFC 6455, Section 5.2 - Base Framing Protocol
    r   r   r'      	   
   r   c                     t        | dz        S )NrC   )boolr   s    r   	iscontrolzOpcode.iscontrol_   s    D4K  r    N)r2   r3   r4   __doc__CONTINUATIONTEXTBINARYCLOSEPINGPONGrG   rI   r   r    r   rB   rB   H   s=    
 L D F E D D!4 !r    rB   c                   H    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dZdZy)CloseReasonz8
    RFC 6455, Section 7.4.1 - Defined Status Codes
      i  i  i  i  i  i  i  i  i  i  i  i  i  N)r2   r3   r4   rJ   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_FAILEDr   r    r   rR   rR   c   sn     N J N  N  "& 
 O M
 N O O  r    rR   rS   i  i  i  i  i  z!Ic                   D     e Zd Zej                  fdededdf fdZ xZS )ParseFailedmsgcoder   Nc                 2    t         |   |       || _        y r   )superr   re   )r   rd   re   	__class__s      r   r   zParseFailed.__init__   s     		r    )r2   r3   r4   rR   rV   strr   __classcell__)rh   s   @r   rc   rc      s.    ,7,F,F)	 r    rc   c                   ,    e Zd ZU eed<   eed<   eed<   y)RsvBitsrsv1rsv2rsv3N)r2   r3   r4   rG   __annotations__r   r    r   rl   rl      s    
J
J
Jr    rl   c                   F    e Zd ZU eed<   eed<   eed<   eed<   ee	   ed<   y)Headerfinrsvopcodepayload_lenr   N)
r2   r3   r4   rG   rp   rl   rB   intr	   r,   r   r    r   rr   rr      s!    	I	LN% r    rr   c                   L    e Zd ZU eed<   eeeee	ef   f   ed<   e
ed<   e
ed<   y)Frameru   payloadframe_finishedmessage_finishedN)r2   r3   r4   rB   rp   r   r,   ri   r
   rw   rG   r   r    r   ry   ry      s-    N5#uS#X.//r    ry   r!   nbytesr   c                 t    t        |       |k  r| S | d | } | j                  dd      j                  d      } | S )Nutf-8ignore)errors)r+   decodeencode)r!   r}   s     r   _truncate_utf8r      sD    
4yF =D ;;wx;077@DKr    c                   v    e Zd Zddee   ddfdZdeddfdZdedefdZdedee   fd	Z	dd
Z
ddZdefdZy)BufferNinitial_bytesr   c                 X    t               | _        d| _        |r| j                  |       y y Nr   )r)   buffer
bytes_usedfeed)r   r   s     r   r   zBuffer.__init__   s&    kIIm$ r    	new_bytesc                 .    | xj                   |z  c_         y r   )r   )r   r   s     r   r   zBuffer.feed  s    y r    r}   c                     |s
t               S | j                  | j                  | j                  |z    }| xj                  t        |      z  c_        |S r   )r)   r   r   r+   )r   r}   r!   s      r   consume_at_mostzBuffer.consume_at_most  sA    ;{{4??T__v-EF3t9$r    c                 p    t        | j                        | j                  z
  |k  ry | j                  |      S r   )r+   r   r   r   )r   r}   s     r   consume_exactlyzBuffer.consume_exactly  s0    t{{doo-6##F++r    c                 D    | j                   d | j                  = d| _        y r   )r   r   rH   s    r   commitzBuffer.commit  s    KK)$//)*r    c                     d| _         y r   )r   rH   s    r   rollbackzBuffer.rollback  s	    r    c                 ,    t        | j                        S r   )r+   r   rH   s    r   __len__zBuffer.__len__  s    4;;r    r   r   N)r2   r3   r4   r	   r,   r   r   rw   r   r   r   r   r   r   r    r   r   r      sl    %huo % %!e ! !c e ,c ,huo ,
   r    r   c                   $    e Zd ZddZdedefdZy)MessageDecoderr   Nc                      d | _         d | _        y r   )ru   decoderrH   s    r   r   zMessageDecoder.__init__"  s    (,59r    framec                 V   |j                   j                         rJ | j                   9|j                   t        j                  u rt	        d      |j                   | _         n4|j                   t        j                  urt	        d|j                   z        |j                   t        j
                  u r t        d             | _        |j                  xr |j                  }| j                  |j                  }nIt        |j                  t        t        f      sJ 	 | j                  j                  |j                  |      }t'        | j                   ||j                  |      }|rd | _         d | _        |S # t        $ r(}t	        t!        |      t"        j$                        d }~ww xY w)Nzunexpected CONTINUATIONzexpected CONTINUATION, got %rr   )ru   rI   rB   rK   rc   rL   r   r   r{   r|   rz   
isinstancer,   r)   r   UnicodeDecodeErrorri   rR   rZ   ry   )r   r   finishedr!   excs        r   process_framezMessageDecoder.process_frame&  sM   <<))++;;||v222!";<<,,DK\\!4!44=LMM<<6;;&9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   &E7 7	F( #F##F(r   )r2   r3   r4   r   ry   r   r   r    r   r   r   !  s    :5 U r    r   c                       e Zd Z	 ddedeed      ddfdZdeddfdZdee	   fd	Z
defd
Zdededee   fdZdedededdfdZy)FrameDecoderNclient
extensionsr   r   c                     || _         |xs g | _        t               | _        d | _        d | _        d | _        d| _        d| _        y r   )	r   r   r   r   headereffective_opcodemaskerpayload_requiredpayload_consumed)r   r   r   s      r   r   zFrameDecoder.__init__H  sF     $*h(,26CG ! !r    r!   c                 :    | j                   j                  |       y r   )r   r   r8   s     r   receive_byteszFrameDecoder.receive_bytesV  s    r    c                    | j                   s| j                         sy | j                   J | j                  J | j                  J t	        | j
                        | j                  k  ry | j                   j                  | j                  z
  }| j
                  j                  |      }|s| j                   j                  dkD  ry | j
                  j                          | xj                  t	        |      z  c_        | j                  | j                   j                  k(  }| j                  j                  |      }| j                  D ]2  }|j                  | |      }t        |t              rt!        d|      |}4 |rjt#               }| j                  D ]L  }|j%                  | | j                   j&                        }t        |t              rt!        d|      |H||z  }N ||z  }t)        | j                  ||| j                   j&                        }|rd | _         d | _        d | _        |S t*        j,                  | _        |S )Nr   error in extension)r   parse_headerr   r   r+   r   r   rv   r   r   r   r1   r   frame_inbound_payload_datar   rR   rc   r)   frame_inbound_completers   ry   rB   rK   )	r   payload_remainingrz   r   	extensionpayload_finalresultr   s	            r   process_bufferzFrameDecoder.process_bufferY  s   {{$$&{{&&{{&&$$00t{{d333 KK33d6K6KK++--.?@4;;22Q6W-((DKK,C,CC++%%g. 	I ;;D'JH(K0!"6AAG		 KE!__ $	"99$Pfk2%&:FCC%VOE$ uGd++WhPDK$(D!DK  %+$7$7D!r    c                    | j                   j                  d      }|| j                   j                          yt        |d   t        z        }t        t        |d   t        z        t        |d   t        z        t        |d   t        z              }|d   t        z  }	 t        |      }|j                         r|st        d      t        |d   t        z        }|d   t        z  }| j!                  ||      }|| j                   j                          y| j#                  |||       |r| j$                  rt        d      |s| j$                  st        d	      |rI| j                   j                  d
      }|| j                   j                          yt'        |      | _        nt+               | _        | j                   j-                          t/        ||||d       | _        | j0                  j2                  | _        | j0                  j2                  j                         r|| _        d| _        yd| _        d| _        y# t        $ r t        d|d      w xY w)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   rG   FIN_MASKrl   	RSV1_MASK	RSV2_MASK	RSV3_MASKOPCODE_MASKrB   
ValueErrorrc   rI   	MASK_MASKPAYLOAD_LEN_MASKparse_extended_payload_lengthextension_processingr   r   r   r6   r   rr   r   ru   r   r   r   )	r   r!   rs   rt   ru   has_maskpayload_len_shortrv   r   s	            r   r   zFrameDecoder.parse_header  s$   {{**1-<KK  "47X%&a9$%a9$%a9$%

 a;&	=F^F cIJJQ)+, G&6688ARSKK  "!!&#{;GHHIJJ++55a8K"$$&)+6DK'/DKS#v{DA $ 2 2;;'')$/D! !" %&D! !I  	=r{;<<	=s   !I Iru   rv   c                    |j                         r|t        kD  rt        d      |t        k(  rL| j                  j                  d      }|y t        j                  d|      \  }|t        k  rt        d      |S |t        k(  rZ| j                  j                  d      }|y t        j                  d|      \  }|t        k  rt        d      |dz	  rt        d	      |S )
Nz$Control frame with payload len > 125r'   !Hz6Payload length used 2 bytes when 1 would have sufficedrC   !Qz6Payload length used 8 bytes when 2 would have sufficed?   z'8-byte payload length with non-zero MSB)
rI   MAX_PAYLOAD_NORMALrc   PAYLOAD_LENGTH_TWO_BYTEr   r   structunpackPAYLOAD_LENGTH_EIGHT_BYTEMAX_PAYLOAD_TWO_BYTE)r   ru   rv   r!   s       r   r   z*FrameDecoder.parse_extended_payload_length  s     +0B"BDEE11;;..q1D|#]]46N[00!L "  55;;..q1D|#]]46N[22!L  b  ""KLLr    rt   c                    g d}| j                   D ]M  }|j                  | |||      }t        |t              rt	        d|      t        |      D ]  \  }}|s	d||<    O t        ||      D ]  \  }	}
|
s	|	rt	        d       y )N)FFFr   TzReserved bit set unexpectedly)r   frame_inbound_headerr   rR   rc   	enumeratezip)r   ru   rt   rv   rsv_usedr   r   bitusedexpectedfounds              r   r   z!FrameDecoder.extension_processing  s     ) 	)I33D&#{SF&+.!"6??&v. )	T$(HSM)		)  #8S1 	COHeX!"ABB	Cr    r   )r2   r3   r4   rG   r	   r   r   r,   r   ry   r   r   rB   rw   r   rl   r   r   r    r   r   r   G  s    FJ""(0k1B(C"	"% D 0 0d3d 3j+.	#<CC#*C9<C	Cr    r   c            	          e Zd Zdeded   ddfdZdedefdZdee	e   ddf   fd	Z
d
eddfdZdeeddf   fdZdde	e   de	e   defdZddedefdZddedefdZ	 ddeeeef   dedefdZdedededefdZ	 ddedededefdZy)FrameProtocolr   r   r   r   Nc                    || _         |D cg c]  }|j                         s| c}| _        t        | j                   | j                        | _        t               | _        | j                         | _        d | _	        y c c}w r   )
r   enabledr   r   _frame_decoderr   _message_decoder_parse_more_gen_parse_more_outbound_opcode)r   r   r   exts       r   r   zFrameProtocol.__init__  sf    *4F33F +4;;H . 0//126 Gs
   A?A?r   c                    |j                   }t        |t        t        f      sJ |st        j
                  df}nt        |      dk(  rt        d      t        j                  d|d d       \  }|t        k  s	|t        kD  rt        d      	 t	        |      }|t        v rt        d      t        |t              s|t        k  rt        d      	 |dd  j                  d	      }||f}t'        |j(                  ||j*                  |j,                        S # t        $ r Y w xY w# t         $ r+}t        d
t#        |      z   t        j$                        d }~ww xY w)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: )rz   r   r,   r)   rR   rX   r+   rc   r   r   MIN_CLOSE_REASONMAX_CLOSE_REASONr   LOCAL_ONLY_CLOSE_REASONSMAX_PROTOCOL_CLOSE_REASONr   r   ri   rZ   ry   ru   r{   r|   )r   r   r!   re   reasonr   s         r   _process_closezFrameProtocol._process_close  sN   }}$	 233  ..3DY!^9::mmD$r(3GT&&$1A*A!";<<"4( //!"GHHdK0T=V5V!"DEEab1 &>DU\\4)=)=u?U?UVV   & !3c#h>:: s*   D D" 	DD"	E+&EEc              #     K   | j                   D cg c]  }|j                         s| c}| _         d}|s| j                  j                         }|f|j                  j                         s| j                  j                  |      }n0|j                  t        j                  k(  r| j                  |      }d}| |sy y c c}w w)NFT)r   r   r   r   ru   rI   r   r   rB   rN   r   )r   r   closedr   s       r   r   zFrameProtocol._parse_more_gen  s      +///K3S[[]3K''668E ||--/ 11??FE\\V\\1 //6E!FK  Ls   CCCBC Cr!   c                 :    | j                   j                  |       y r   )r   r   r8   s     r   r   zFrameProtocol.receive_bytes0  s    ))$/r    c              #   >   K   | j                   D ]
  }| y |  y wr   )r   )r   events     r   received_frameszFrameProtocol.received_frames3  s(     %% 	E}		s   re   r   c                 b   t               }|t        j                  u rd }||rt        d      |t        v rt        j
                  }|I|t        t        j                  d|            z  }|%|t        |j                  d      t        dz
        z  }| j                  t        j                  |      S )Nz&cannot specify a reason without a coder   r   r'   )r)   rR   rX   	TypeErrorr   rT   r   packr   r   r   _serialize_framerB   rN   )r   re   r   rz   s       r   closezFrameProtocol.close:  s    +;---D<FDEE++--DyT4!899G!>MM'*,>,B  $$V\\7;;r    rz   c                 B    | j                  t        j                  |      S r   )r   rB   rO   r   rz   s     r   pingzFrameProtocol.pingK      $$V[['::r    c                 B    | j                  t        j                  |      S r   )r   rB   rP   r   s     r   pongzFrameProtocol.pongN  r   r    rs   c                    t        |t        t        t        f      rt        j
                  }n=t        |t              r"t        j                  }|j                  d      }nt        d      | j                  || _
        n)| j                  |urt        d      t        j                  }|rd | _
        | j                  |||      S )Nr   zMust provide bytes or textz!Data type mismatch inside message)r   r,   r)   
memoryviewrB   rM   ri   rL   r   r   r   r   rK   r   )r   rz   rs   ru   s       r   	send_datazFrameProtocol.send_dataQ  s     gy*=>]]F%[[FnnW-G9::  ($*D!""&0?@@((F$(D!$$VWc::r    rt   ru   c                     t        |      dz  }t        |j                        dz  t        |j                        dz  z   t        |j                        dz  z   }t        |      }||z  |z  S )N         r&   )rw   rm   rn   ro   )r   rs   rt   ru   fin_bitsrsv_bitsopcode_bitss          r   _make_fin_rsv_opcodez"FrameProtocol._make_fin_rsv_opcodeh  s_    s8q=MQ&3sxx=A+=>#chh-STBTU&k("[00r    c                    t        ddd      }t        | j                        D ]  }|j                  | ||||      \  }} | j	                  |||      }t        |      }d}|t        k  r|}	d }
n|t        k  r	t        }	|}
n
t        }	|}
d}| j                  r|	dz  }	t        ||	g      }|
b|j                         rt        d      |r#|t        t        j                  d|
            z  }n"|t        t        j                  d|
            z  }| j                  r7t!        j"                  d      }t%        |      }||z   |j'                  |      z   S ||z   S )NFTr<   z"payload too long for control framer   r   r&   )rl   reversedr   frame_outboundr	  r+   r   r   r   r   r   r)   rI   r   r   r   osurandomr   r1   )r   ru   rz   rs   rt   r   fin_rsv_opcodepayload_lengthquad_payloadfirst_payloadsecond_payloadr   r   r   s                 r   r   zFrameProtocol._serialize_frameo  s[    eUE*!$//2 	UI$33D&#wPSTLC	U 223VDW//*M!N333M+N5M+NL;;V#MNM:;%! !EFF)FKKn$EFF)FKKn$EFF;; **Q-K$[1FK'&..*AAAr    )NN)r    )r    T)r2   r3   r4   rG   r   r   ry   r   r   r	   r   r,   r   r   rw   ri   r   r   r   r   r)   r  rl   rB   r	  r   r   r    r   r   r     sE   	7t 	7k1B 	7t 	7WE We WB8E?D$+F!G *0% 0D 05$+<!= <(3- < <QV <";E ;E ;;E ;E ; HL;UIs23;@D;	;.1 17 1F 1s 1 AE2 2 ',2 9=2 	2 r    r   )?rJ   r  r   codecsr   r   enumr   typingr   r   r   r	   r
   r   r   r   r   ranger,   r$   r   r6   r   r   r   r   MAX_PAYLOAD_EIGHT_BYTEMAX_FRAME_PAYLOADr   r   r   r   r   r   r   rB   rR   rX   rY   ra   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	Exceptionrc   rl   rr   ry   rw   r   r   r   r   r   )r   s   pr   <module>r!     s   
  <  U U U% 9>c
C1e.5:..C
 0       " *  	  			!W !6T ' T r   $$             FKKa 	) j !Z !J     !  ! H# #LdC dCNs  s y Ds   E	