
    ,i!=                        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mZm	Z	m
Z
 ddlmZmZ ddlmZ 	 	 d dlmZ de j                   d	e j                   d
efdZg 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&eeeeeee e!e"e#e$e%fZ' G d d      Z( G d d       Z) G d! d"      Z*y# e$ r- ej*                  Zde j                   d	e j                   d
efdZY w xY w)#    N)Lock)CallableOptionalUnionAny   )WebSocketPayloadExceptionWebSocketProtocolException)validate_utf8)XorMaskerSimple
mask_value
data_valuereturnc                 :    t        |       j                  |      }|S N)r   process)r   r   mask_results      ^/var/www/system.tvplus.app.br/jogos/scrap/venv/lib/python3.12/site-packages/websocket/_abnf.py_maskr   %   s    ,Z8@@L    c                     t        |      }t        j                  |t              }t        j                  | |dz  z  | d |dz   z   t              }||z  j	                  |t              S )N   )lenint
from_bytesnative_byteorderto_bytes)r   r   datalenint_data_valueint_mask_values        r   r   r   -   sd    j/
4DE'Q,'*]w{*CCEU
 /99'CSTTr   )ABNFcontinuous_frameframe_bufferSTATUS_NORMALSTATUS_GOING_AWAYSTATUS_PROTOCOL_ERRORSTATUS_UNSUPPORTED_DATA_TYPESTATUS_STATUS_NOT_AVAILABLESTATUS_ABNORMAL_CLOSEDSTATUS_INVALID_PAYLOADSTATUS_POLICY_VIOLATIONSTATUS_MESSAGE_TOO_BIGSTATUS_INVALID_EXTENSIONSTATUS_UNEXPECTED_CONDITIONSTATUS_BAD_GATEWAYSTATUS_TLS_HANDSHAKE_ERRORi  i  i  i  i  i  i  i  i  i  i  i  i  i  i  c                   f   e Zd ZdZdZdZdZdZdZdZ	eeeeee	fZ
eded	ed
edede	diZdZdZdZddddeddfdededededededeeeef      ddfdZd&deddfdZededefd       Zdefd Zed'deeef   dededd fd!       Zdefd"Zd#eeef   defd$Zed#eeef   deeef   defd%       Zy)(r!   z}
    ABNF frame class.
    See http://tools.ietf.org/html/rfc5234
    and http://tools.ietf.org/html/rfc6455#section-5.2
    r   r         	   
   conttextbinaryclosepingpong~   i   l             finrsv1rsv2rsv3opcoder   datar   Nc                     || _         || _        || _        || _        || _        || _        |d}|| _        t        j                  | _	        y)zG
        Constructor for ABNF. Please check RFC for arguments.
        Nr=   )
r>   r?   r@   rA   rB   r   rC   osurandomget_mask_key)selfr>   r?   r@   rA   rB   r   rC   s           r   __init__zABNF.__init__   sK     			$<D	JJr   skip_utf8_validationc                    | j                   s| j                  s| j                  rt        d      | j                  t
        j                  vrt        d| j                        | j                  t
        j                  k(  r| j                  st        d      | j                  t
        j                  k(  rt        | j                        }|sy|dk(  s|dk\  rt        d      |dkD  r%|s#t        | j                  dd       st        d      t        | j                  t              r| j                  dd n| j                  dd j                  d	      }t!        j"                  d
|      d   }| j%                  |      st        d|      yy)z
        Validate the ABNF frame.

        Parameters
        ----------
        skip_utf8_validation: skip utf8 validation.
        zrsv is not implemented, yetzInvalid opcode %rzInvalid ping frame.Nr   r<   zInvalid close frame.r2   utf-8!Hr   zInvalid close opcode %r)r?   r@   rA   r
   rB   r!   OPCODESOPCODE_PINGr>   OPCODE_CLOSEr   rC   r   
isinstancebytesencodestructunpack_is_valid_close_status)rH   rJ   data_length
data_bytescodes        r   validatezABNF.validate   sJ    99		TYY,-JKK;;dll*,-@$++NN;;$***488,-BCC;;$+++dii.Ka;##501GHHa,%diim401GHH dii/ 		"1YYr]))'2 
 ==z215D..t401JDQQ 5' ,r   rY   c                 6    | t         v xs d| cxk  xr dk  S c S )Ni  i  )VALID_CLOSE_STATUS)rY   s    r   rV   zABNF._is_valid_close_status   s#    ))Bdd.AT.AB.ABr   c                     t        | j                  t              r| j                  nt        | j                        }d| j                   d| j
                   d| S )Nzfin=z opcode=z data=)rQ   rC   strreprr>   rB   )rH   	data_reprs     r   __str__zABNF.__str__   sC    !+DIIs!;DIIdii	dhhZx}F9+FFr   c           	          |t         j                  k(  r!t        | t              r| j	                  d      } t        |ddd|d|       S )a  
        Create frame to send text, binary and other data.

        Parameters
        ----------
        data: str
            data to send. This is string value(byte array).
            If opcode is OPCODE_TEXT and this value is unicode,
            data value is converted into unicode string, automatically.
        opcode: int
            operation code. please see OPCODE_MAP.
        fin: int
            fin flag. if set to 0, create continue fragmentation.
        rL   r   r   )r!   OPCODE_TEXTrQ   r^   rS   )rC   rB   r>   s      r   create_framezABNF.create_frame   s@      T%%%*T3*?;;w'DCAq&!T22r   c                    t        d | j                  | j                  | j                  | j                  fD              rt        d      | j                  t        j                  vrt        d      t        | j                        }|t        j                  k\  rt        d      t        | j                  dz  | j                  dz  z  | j                  dz  z  | j                  dz  z  | j                  z        j                  d	      }|t        j                  k  r.|t        | j                  dz  |z        j                  d	      z  }n|t        j                   k  rG|t        | j                  dz  d
z        j                  d	      z  }|t#        j$                  d|      z  }nF|t        | j                  dz  dz        j                  d	      z  }|t#        j$                  d|      z  }| j                  sIt'        | j                  t(              r | j                  j                  d      | _
        || j                  z   S | j+                  d      }|| j-                  |      z   S )zR
        Format this object to string(byte array) to send data to server.
        c              3   $   K   | ]  }|d v 
 yw))r   r   N ).0xs     r   	<genexpr>zABNF.format.<locals>.<genexpr>   s     T1qTs   z
not 0 or 1zInvalid OPCODEzdata is too long         r   latin-1r<   rM      !QrL   )anyr>   r?   r@   rA   
ValueErrorrB   r!   rN   r   rC   	LENGTH_63chrrS   LENGTH_7r   	LENGTH_16rT   packrQ   r^   rG   _get_masked)rH   lengthframe_headermask_keys       r   formatzABNF.format   s    T499dii(STT\**;;dll*-..TYYT^^#/00HHMii1nii1n ii1n kk	
 &
 	 DMM!C1 4v =>EEiPPLdnn$C1 4t ;<CCINNLFKKf55LC1 4t ;<CCINNLFKKf55L$))S) II,,W5	$))++$$Q'd..x888r   r{   c                     t         j                  || j                        }t        |t              r|j                  d      }||z   S )NrL   )r!   maskrC   rQ   r^   rS   )rH   r{   ss      r   rx   zABNF._get_masked  s8    IIh		*h$w/H!|r   c                     |d}t        | t              r| j                  d      } t        |t              r|j                  d      }t        t	        j                  d|       t	        j                  d|            S )z
        Mask or unmask data. Just do xor for each byte

        Parameters
        ----------
        mask_key: bytes or str
            4 byte mask.
        data: bytes or str
            data to mask/unmask.
        r=   rn   B)rQ   r^   rS   r   array)r{   rC   s     r   r~   z	ABNF.mask  sa     <Dh$y1HdC ;;y)DU[[h/S$1GHHr   )F)r   )__name__
__module____qualname____doc__OPCODE_CONTrc   OPCODE_BINARYrP   rO   OPCODE_PONGrN   
OPCODE_MAPru   rv   rs   r   r   r   r^   rR   rI   boolrZ   staticmethodrV   ra   rd   r|   rx   r~   rg   r   r   r!   r!   j   s    KKMLKK 	G 	VVxgVVJ HII !,.'' ' 	'
 ' ' ' uS%Z()' 
'0%RT %Rd %RN CS CT C CG G 35, 3c 3 3F 3 3(!9 !9FE#u*$5 %  IuS%Z( Ic5j0A Ie I Ir   r!   c                       e Zd ZdZdZdeegef   deddfdZddZ	defd	Z
dd
Zdeeef   fdZdefdZddZdefdZddZdefdZdedefdZy)r#   rm   rl   recv_fnrJ   r   Nc                 l    || _         || _        g | _        | j                          t	               | _        y r   )recvrJ   recv_bufferclearr   lock)rH   r   rJ   s      r   rI   zframe_buffer.__init__5  s/     	$8! "$

F	r   c                 .    d | _         d | _        d | _        y r   )headerry   r   rH   s    r   r   zframe_buffer.clear@  s    '+%)7;r   c                     | j                   d u S r   )r   r   s    r   needs_headerzframe_buffer.needs_headerE      {{d""r   c                     | j                  d      }|d   }|dz	  dz  }|dz	  dz  }|dz	  dz  }|dz	  dz  }|dz  }|d   }|dz	  dz  }	|d	z  }
||||||	|
f| _        y )
Nr2   r   rk   r   rl   rm   r      ro   )recv_strictr   )rH   r   b1r>   r?   r@   rA   rB   b2has_masklength_bitss              r   recv_headerzframe_buffer.recv_headerH  s    !!!$AYAgkQw{Qw{Qw{cAY7Q;4iD$fhLr   c                 Z    | j                   sy| j                   t        j                     }|S )NF)r   r#   _HEADER_MASK_INDEX)rH   
header_vals     r   r   zframe_buffer.has_maskV  s&    {{++l&E&EF
r   c                     | j                   d u S r   )ry   r   s    r   needs_lengthzframe_buffer.needs_length\  r   r   c                 X   | j                   t        d      | j                   t        j                     }|dz  }|dk(  r0| j	                  d      }t        j                  d|      d   | _        y |dk(  r0| j	                  d      }t        j                  d|      d   | _        y || _        y )	NHeader not receivedro   r<   r2   rM   r   r3   rp   )r   r
   r#   _HEADER_LENGTH_INDEXr   rT   rU   ry   )rH   bitsr   vs       r   recv_lengthzframe_buffer.recv_length_  s    ;;,-BCC{{<<<=Tk$  #A --a03DKD   #A --a03DK%DKr   c                     | j                   d u S r   )r   r   s    r   
needs_maskzframe_buffer.needs_maskm  s    $&&r   c                 `    | j                         r| j                  d      | _        y d| _        y )Nr   r=   )r   r   r   r   s    r   	recv_maskzframe_buffer.recv_maskp  s"    15$**1-br   c           
         | j                   5  | j                         r| j                          | j                  t	        d      | j                  \  }}}}}}}| j                         r| j                          | j                  }| j                         r| j                          | j                  }	|t	        d      | j                  |      }
|r#|	t	        d      t        j                  |	|
      }
| j                          t        |||||||
      }|j                  | j                          d d d        |S # 1 sw Y   S xY w)Nr   zLength not receivedzMask not received)r   r   r   r   r
   r   r   ry   r   r   r   r   r!   r~   r   rZ   rJ   )rH   r>   r?   r@   rA   rB   r   _ry   r   payloadframes               r   
recv_framezframe_buffer.recv_frames  s-   YY 	6  "  "{{"01FGG;?;;8S$dFHa   "  "[[F   J ~01FGG&&v.G%45HII))J8 JJLdD$'JENN4445?	6B C	6B s   D#D::Ebufsizec                    t        |t              st        d      |t        d | j                  D              z
  }|dkD  r\| j                  t        d|            }t        |t              r*| j                  j                  |       |t        |      z  }nn|dkD  r\dj                  | j                        }|dk(  r	g | _        |S ||d  g| _        |d | S )Nzbufsize must be an integerc              3   2   K   | ]  }t        |        y wr   )r   )rh   bufs     r   rj   z+frame_buffer.recv_strict.<locals>.<genexpr>  s      FcS Fs   r   i @  r   )rQ   r   rr   sumr   r   minrR   appendr   join)rH   r   shortagebytes_unifieds        r   r   zframe_buffer.recv_strict  s    '3'9::S FT5E5E FFFl YYs5(34F&%(  ''/CK'  l ((4++,q=!DN ' 12D8G$$r   )r   N)r   r   r   r   r   r   r   r   rI   r   r   r   r   r   r   r   r   r   r!   r   rR   r   rg   r   r   r#   r#   1  s    	s
+	CG			<
#d #M%c	* #d #&'D 'I"D "H%3 %5 %r   r#   c                   j    e Zd ZdededdfdZdeddfdZdeddfdZdedeee	f   fd	Z
dedefd
Zy)r"   fire_cont_framerJ   r   Nc                 <    || _         || _        d | _        d | _        y r   )r   rJ   	cont_datarecving_frames)rH   r   rJ   s      r   rI   zcontinuous_frame.__init__  s!    .$8!.2-1r   r   c                     | j                   s(|j                  t        j                  k(  rt	        d      | j                   r8|j                  t        j
                  t        j                  fv rt	        d      y y )NzIllegal frame)r   rB   r!   r   r
   rc   r   rH   r   s     r   rZ   zcontinuous_frame.validate  sg    ""u||t7G7G'G,_==5<<4
 $
 -_==	$
r   c                 <   | j                   r"| j                   dxx   |j                  z  cc<   nZ|j                  t        j                  t        j
                  fv r|j                  | _        |j                  |j                  g| _         |j                  rd | _        y y )Nr   )r   rC   rB   r!   rc   r   r   r>   r   s     r   addzcontinuous_frame.add  sr    >>NN1+|| 0 0$2D2DEE&+ll##llEJJ7DN99"&D r   c                 6    |j                   xs | j                  S r   )r>   r   r   s     r   is_firezcontinuous_frame.is_fire  s    yy0D000r   c                 J   | j                   }|t        d      d | _         |d   |_        | j                  sZ|X|d   t        j
                  k(  rB| j                  s6t        |j                        s!t        dt        |j                               |t        d      |d   |fS )NzNo continuation data availabler   r   zcannot decode: )
r   r
   rC   r   r!   rc   rJ   r   r	   r_   )rH   r   rC   s      r   extractzcontinuous_frame.extract  s    ~~<,-MNN!W
$$ Q4+++--!%**-+od5::>N=O,PQQ<,-MNNAw~r   )r   r   r   r   rI   r!   rZ   r   r   r   r   tupler   rg   r   r   r"   r"     sq    2 2D 2T 2>d >t >	' 	'$ 	'1T 1eD#I&6 1T e r   r"   )+r   rE   rT   sys	threadingr   typingr   r   r   r   _exceptionsr	   r
   _utilsr   wsaccel.xormaskr   rR   r   ImportError	byteorderr   __all__r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   STATUS_SERVICE_RESTARTSTATUS_TRY_AGAIN_LATERr/   r0   r\   r!   r#   r"   rg   r   r   <module>r      sL    	  
  1 1 N !&U
 0%++ 5;; 5 "(   # "      "    !     DI DIN@% @%F. .W  
U}}U%++ U5;; U5 U	
Us   $B& &/CC