
    ,i^              	          d Z ddlmZ ddl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 erddlmZ 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      Z8d6d-Z9 G d. d/      Z: G d0 d1      Z; G d2 d3      Z< G d4 d5      Z=yc c} w )7zY
wsproto/frame_protocol
~~~~~~~~~~~~~~~~~~~~~~

WebSocket frame protocol implementation.
    )annotationsN)IncrementalDecodergetincrementaldecoder)IntEnum)TYPE_CHECKING
NamedTuple)	Generator   )	Extension   c              3  (   K   | ]	  }|z    y wN ).0abs     e/var/www/system.tvplus.app.br/jogos/scrap/venv/lib/python3.12/site-packages/wsproto/frame_protocol.py	<genexpr>r      s     .aAE.s   c                      e Zd ZddZddZy)XorMaskerSimplec                    || _         y r   )_masking_key)selfmasking_keys     r   __init__zXorMaskerSimple.__init__   s
    '    c                   t        |      }|r|}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   | _        |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)r   data
data_arrayr   r   cdkey_rotations           r   processzXorMaskerSimple.process   s   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   N)r   zbytearray | bytesreturnNoner'   r$   r-   r$   )__name__
__module____qualname__r   r,   r   r   r   r   r      s    (r   r   c                      e Zd ZddZy)XorMaskerNullc                    |S r   r   r   r'   s     r   r,   zXorMaskerNull.process3   s    r   Nr/   )r0   r1   r2   r,   r   r   r   r4   r4   2   s    r   r4   ~      }   i  l       @             c                  0    e Zd ZdZdZdZdZdZdZdZ	d
dZ
y	)Opcodez7
    RFC 6455, Section 5.2 - Base Framing Protocol
    r   r
   r"      	   
   c                    t        | dz        S )NrA   )boolr   s    r   	iscontrolzOpcode.iscontrold   s    D4K  r   Nr-   rE   )r0   r1   r2   __doc__CONTINUATIONTEXTBINARYCLOSEPINGPONGrG   r   r   r   r@   r@   M   s6    
 L D F E D D!r   r@   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)r0   r1   r2   rI   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   rQ   rQ   h   sn     N J N  N  "& 
 O M
 N O O  r   rQ   rR   i  i  i  i  i  z!Ic                  B     e Zd Zej                  f	 	 	 	 	 d fdZ xZS )ParseFailedc                2    t         |   |       || _        y r   )superr   code)r   msgre   	__class__s      r   r   zParseFailed.__init__   s     		r   )rf   strre   rQ   r-   r.   )r0   r1   r2   rQ   rU   r   __classcell__)rg   s   @r   rb   rb      s.    ,7,F,F)	 r   rb   c                  ,    e Zd ZU ded<   ded<   ded<   y)RsvBitsrE   rsv1rsv2rsv3Nr0   r1   r2   __annotations__r   r   r   rk   rk      s    
J
J
Jr   rk   c                  @    e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   y)HeaderrE   finrk   rsvr@   opcodeintpayload_lenbytes | Noner   Nro   r   r   r   rr   rr      s    	I	LNr   rr   c                  6    e Zd ZU ded<   ded<   ded<   ded<   y)	Framer@   ru   zbytes | str | tuple[int, str]payloadrE   frame_finishedmessage_finishedNro   r   r   r   rz   rz      s    N**r   rz   c                p    t        |       |k  r| S | d | } | j                  dd      j                  d      S )Nutf-8ignore)errors)r&   decodeencode)r'   nbytess     r   _truncate_utf8r      s@    
4yF =D ;;wx;077@@r   c                  F    e Zd Zd	d
dZddZddZddZddZddZddZ	y)BufferNc                X    t               | _        d| _        |r| j                  |       y y Nr   )r$   buffer
bytes_usedfeed)r   initial_bytess     r   r   zBuffer.__init__  s&    kIIm$ r   c                .    | xj                   |z  c_         y r   )r   )r   	new_bytess     r   r   zBuffer.feed  s    y 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   rF   s    r   commitzBuffer.commit  s    KK)$//)*r   c                    d| _         y r   )r   rF   s    r   rollbackzBuffer.rollback  s	    r   c                ,    t        | j                        S r   )r&   r   rF   s    r   __len__zBuffer.__len__!  s    4;;r   r   )r   rx   r-   r.   )r   bytesr-   r.   )r   rv   r-   r$   )r   rv   r-   zbytearray | Noner-   r.   )r-   rv   )
r0   r1   r2   r   r   r   r   r   r   r   r   r   r   r   r     s%    %!,
 r   r   c                      e Zd ZddZddZy)MessageDecoderc                     d | _         d | _        y r   )ru   decoderrF   s    r   r   zMessageDecoder.__init__&  s    %)26r   c                ^   |j                   j                         rJ | j                   ;|j                   t        j                  u rd}t	        |      |j                   | _         n6|j                   t        j                  urd|j                   }t	        |      |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 r   )ru   rG   r@   rJ   rb   rK   r   r   r|   r}   r{   
isinstancer   r$   r   UnicodeDecodeErrorrh   rQ   rY   rz   )r   framerf   finishedr'   excs         r   process_framezMessageDecoder.process_frame*  s^   <<))+++;;||v222/!#&&,,DK\\!4!44//?@Cc""<<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   !&E; ;	F,#F''F,Nr   r   rz   r-   rz   )r0   r1   r2   r   r   r   r   r   r   r   %  s    7 r   r   c                  f    e Zd Z	 d	 	 	 	 	 d	dZd
dZddZddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZy)FrameDecoderNc                    || _         |xs g | _        t               | _        d | _        d | _        d | _        d| _        d| _        y r   )	client
extensionsr   r   headereffective_opcodemaskerpayload_requiredpayload_consumed)r   r   r   s      r   r   zFrameDecoder.__init__N  sF     $*h%)/3>B ! !r   c                :    | j                   j                  |       y r   )r   r   r6   s     r   receive_byteszFrameDecoder.receive_bytes\  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 ]F  }|j                  | t        |            }t        |t               rd}t#        ||      t%        |      }H |rlt%               }| j                  D ]N  }|j'                  | | j                   j(                        }t        |t               rd}t#        ||      |J||z  }P ||z  }t+        | j                  t        |      || j                   j(                        }	|rd | _         d | _        d | _        |	S t,        j.                  | _        |	S )Nr   error in extension)r   parse_headerr   r   r&   r   r   rw   r   r   r   r,   r   frame_inbound_payload_datar   r   rQ   rb   r$   frame_inbound_completers   rz   r@   rJ   )
r   payload_remainingr{   r   	extensionpayload_rf   finalresultr   s
             r   process_bufferzFrameDecoder.process_buffer_  s   {{4#4#4#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*!#x00)G	* KE!__ $	"99$Pfk2.C%c622%VOE$ uGd++U7^Xt{{W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d}t        |      t        |d   t        z        }|d   t        z  }| j!                  ||      }|| j                   j                          y| j#                  |||       |r| j$                  rd}t        |      |s| j$                  sd	}t        |      |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 d|d}t        |      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   rE   FIN_MASKrk   	RSV1_MASK	RSV2_MASK	RSV3_MASKOPCODE_MASKr@   
ValueErrorrb   rG   	MASK_MASKPAYLOAD_LEN_MASKparse_extended_payload_lengthextension_processingr   r   r   r4   r   rr   r   ru   r   r   r   )
r   r'   rs   rt   ru   rf   has_maskpayload_len_shortrw   r   s
             r   r   zFrameDecoder.parse_header  s5   {{**1-<KK  "47X%&a9$%a9$%a9$%

 a;&	#F^F
 c=Cc""Q)+, G&6688ARSKK  "!!&#{;;Cc""=Cc""++55a8K"$$&)+6DK'/DKS#v{DA $ 2 2;;'')$/D! !" %&D! !Q  	##F2;/Cc""	#s   !I	 	I$c                   |j                         r|t        kD  rd}t        |      |t        k(  rN| j                  j                  d      }|y t        j                  d|      \  }|t        k  rd}t        |      |S |t        k(  r^| j                  j                  d      }|y t        j                  d|      \  }|t        k  rd}t        |      |dz	  rd	}t        |      |S )
Nz$Control frame with payload len > 125r"   !Hz6Payload length used 2 bytes when 1 would have sufficedrA   !Qz6Payload length used 8 bytes when 2 would have sufficed?   z'8-byte payload length with non-zero MSB)
rG   MAX_PAYLOAD_NORMALrb   PAYLOAD_LENGTH_TWO_BYTEr   r   structunpackPAYLOAD_LENGTH_EIGHT_BYTEMAX_PAYLOAD_TWO_BYTE)r   ru   rw   rf   r'   s        r   r   z*FrameDecoder.parse_extended_payload_length  s     +0B"B8Cc""11;;..q1D|#]]46N[00N! & ! 55;;..q1D|#]]46N[22N!  b  @!#&&r   c                   g d}| j                   D ]O  }|j                  | |||      }t        |t              rd}t	        ||      t        |      D ]  \  }}	|	s	d||<    Q t        ||      D ]  \  }
}|s	|
rd}t	        |       y )N)FFFr   TzReserved bit set unexpectedly)r   frame_inbound_headerr   rQ   rb   	enumeratezip)r   ru   rt   rw   rsv_usedr   r   rf   bitusedexpectedfounds               r   r   z!FrameDecoder.extension_processing  s     ) 	)I33D&#{SF&+.*!#v..&v. )	T$(HSM)	)  #8S1 	'OHeX5!#&&	'r   r   )r   rE   r   zlist[Extension] | Noner-   r.   r'   r   r-   r.   )r-   zFrame | NonerH   )ru   r@   rw   rv   r-   
int | None)ru   r@   rt   rk   rw   rv   r-   r.   )	r0   r1   r2   r   r   r   r   r   r   r   r   r   r   r   M  sv    AE""(>"	"1f7r  +. 	 D''#*'9<'	'r   r   c                      e Zd ZddZddZddZddZddZdddZdddZ	ddd	Z
	 d	 	 	 	 	 dd
ZddZ	 d	 	 	 	 	 	 	 ddZy)FrameProtocolc                   || _         |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/3 Gs
   A?A?c                   |j                   }t        |t        t        f      sJ |st        j
                  df}nt        |      dk(  rd}t        |      t        j                  d|d d       \  }|t        k  s	|t        kD  rd}t        |      t        j                  t              5  t	        |      }d d d        |t        v rd}t        |      t        |t              s|t         k  rd}t        |      	 |dd  j#                  d	      }||f}t+        |j,                  ||j.                  |j0                        S # 1 sw Y   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: )r{   r   r   r$   rQ   rW   r&   rb   r   r   MIN_CLOSE_REASONMAX_CLOSE_REASON
contextlibsuppressr   LOCAL_ONLY_CLOSE_REASONSMAX_PROTOCOL_CLOSE_REASONr   r   rh   rY   rz   ru   r|   r}   )r   r   r'   rf   re   reasonr   s          r   _process_closezFrameProtocol._process_close  si   }}$	 2333  ..3DY!^-Cc""mmD$r(3GT&&$1A*A/!#&&$$Z0 )"4()//;!#&&dK0T=V5V8!#&&ab1 &>DU\\4)=)=u?U?UVV#) ) & !3c#h>:: s$   (D<8E <E	E<&E77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   rG   r   r   r@   rM   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c                :    | j                   j                  |       y r   )r   r   r6   s     r   r   zFrameProtocol.receive_bytesC  s    ))$/r   c              #  >   K   | j                   D ]
  }| y |  y wr   )r   )r   events     r   received_frameszFrameProtocol.received_framesF  s(     %% 	E}		s   Nc                f   t               }|t        j                  u rd }||rd}t        |      |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$   rQ   rW   	TypeErrorr   rS   r   packr   r   r   _serialize_framer@   rM   )r   re   r   r{   rf   s        r   closezFrameProtocol.closeM  s    +;---D<F:CC. ++--DyT4!899G!>MM'*,>,B  $$V\\7;;r   c                B    | j                  t        j                  |      S r   )r   r@   rN   r   r{   s     r   pingzFrameProtocol.ping_      $$V[['::r   c                B    | j                  t        j                  |      S r   )r   r@   rO   r  s     r   pongzFrameProtocol.pongb  r  r   c                   t        |t        t        t        f      rt        j
                  }n?t        |t              r"t        j                  }|j                  d      }nd}t        |      | j                  || _
        n+| j                  |urd}t        |      t        j                  }|rd | _
        | j                  |||      S )Nr   zMust provide bytes or textz!Data type mismatch inside message)r   r   r$   
memoryviewr@   rL   rh   rK   r   r   r   rJ   r   )r   r{   rs   ru   rf   s        r   	send_datazFrameProtocol.send_datae  s     gy*=>]]F%[[FnnW-G.CC.   ($*D!""&05CC. ((F$(D!$$VWc::r   c                    t        |      dz  }t        |j                        dz  t        |j                        dz  z   t        |j                        dz  z   }t        |      }||z  |z  S )N         r!   )rv   rl   rm   rn   )r   rs   rt   ru   fin_bitsrsv_bitsopcode_bitss          r   _make_fin_rsv_opcodez"FrameProtocol._make_fin_rsv_opcode~  s_    s8q=MQ&3sxx=A+=>#chh-STBTU&k("[00r   c           	        t        |      }t        ddd      }t        | j                        D ]#  }|j	                  | ||t        |      |      \  }}% | j                  |||      }t        |      }d}|t        k  r|}	d }
n|t        k  r	t        }	|}
n
t        }	|}
d}| j                  r|	dz  }	t        ||	g      }|
d|j                         rd}t        |      |r#|t        t        j                   d|
            z  }n"|t        t        j                   d|
            z  }| j                  rRt        t#        j$                  d            }t'        |      }t        ||z   |j)                  t        |            z         S t        ||z         S )NFTr:   z"payload too long for control framer   r   r!   )r$   rk   reversedr   frame_outboundr   r  r&   r   r   r   r   r   rG   r   r   r   osurandomr   r,   )r   ru   r{   rs   rt   r   fin_rsv_opcodepayload_lengthquad_payloadfirst_payloadsecond_payloadr   rf   r   r   s                  r   r   zFrameProtocol._serialize_frame  s    G$eUE*!$//2 	\I$33D&#uW~WZ[LC	\ 223VDW//*M!N333M+N5M+NL;;V#MNM:;%!: o%)FKKn$EFF)FKKn$EFF;; $BJJqM2K$[1FVk1FNN9WCU4VVWW')**r   )r   rE   r   zlist[Extension]r-   r.   r   )r-   z#Generator[Frame | None, None, None]r   )r-   zGenerator[Frame, None, None])NN)re   r   r   z
str | Noner-   r$   )r   )r{   r   r-   r$   )r   T)r{   zbytes | bytearray | strrs   rE   r-   r$   )rs   rE   rt   rk   ru   r@   r-   rv   )ru   r@   r{   zbytes | bytearrayrs   rE   r-   r$   )r0   r1   r2   r   r   r   r   r   r   r  r  r  r  r   r   r   r   r   r     s    	4!WF*0<$;; CG;.;;?;	;21 MQ5+5+'85+EI5+	5+r   r   )r'   r   r   rv   r-   r   )>rI   
__future__r   r   r  r   codecsr   r   enumr   typingr   r   collections.abcr	   r   r   ranger   r   r   r4   r   r   r   r   MAX_PAYLOAD_EIGHT_BYTEMAX_FRAME_PAYLOADr   r   r   r   r   r   r   r@   rQ   rW   rX   r`   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	Exceptionrb   rk   rr   rz   r   r   r   r   r   )r   s   pr   <module>r*     s   #  	  <  ,)% 9>c
C1e.5:..C
 2       " *  	  			!W !6T ' T r   $$             FKKa 	) j Z J A!  ! H% %Po' o'd{+ {+S Ds   E	