
    a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n&# e$ r ej        Zde j         d	e j         d
efdZY nw xY w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*dS )#    N)Lock)CallableOptionalUnionAny   )WebSocketPayloadExceptionWebSocketProtocolException)validate_utf8)XorMaskerSimple
mask_value
data_valuereturnc                 J    t          |                               |          }|S N)r   process)r   r   mask_results      _/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/websocket/_abnf.py_maskr   %   s#    ,Z88@@LL    c                    t          |          }t                              |t                    }t                              | |dz  z  | d |dz           z   t                    }||z                      |t                    S )N   )lenint
from_bytesnative_byteorderto_bytes)r   r   datalenint_data_valueint_mask_values        r   r   r   -   ss    j//
4DEE'Q,'*]w{]*CCEU
 
 /99'CST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                      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dS ))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        | _	        dS )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__   sO     			$<D	Jr   F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dS |dk    s|dk    rt          d          |dk    r-|s+t          | j        dd                   st          d          t          | j        t                    r| j        dd         n!| j        dd                             d	          }t!          j        d
|          d         }|                     |          st          d|          dS dS )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   s    9 	L	 	LTY 	L,-JKKK;dl**,-@$+NNN;$***48*,-BCCC;$+++di..K a;##5#501GHHHa,  %dim44   11GHHH di//3	"1"Yrr]))'22 
 =z2215D..t44 R01JDQQQ) ,+&R Rr   rY   c                 4    | t           v pd| cxk    odk     nc S )Ni  i  )VALID_CLOSE_STATUS)rY   s    r   rV   zABNF._is_valid_close_status   s/    ))Bdd.A.A.A.AT.A.A.A.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__   sH    !+DIs!;!;PDIIdi	FdhFFFF9FFFr   c           	          |t           j        k    r*t          | t                    r|                     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   sL      T%%%*T3*?*?%;;w''DCAq&!T2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                                d	          }|t          j        k     r1|t          | j        dz  |z                                d	          z  }n|t          j        k     rI|t          | j        dz  d
z                                d	          z  }|t#          j        d|          z  }nH|t          | j        dz  dz                                d	          z  }|t#          j        d|          z  }| j        sCt'          | j
        t(                    r| j
                            d          | _
        || j
        z   S |                     d          }||                     |          z   S )zR
        Format this object to string(byte array) to send data to server.
        c              3      K   | ]}|d vV  	dS ))r   r   N ).0xs     r   	<genexpr>zABNF.format.<locals>.<genexpr>   s&      TT1qTTTTTTr   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T49di(STTTTT 	+\***;dl**-...TYT^##/000HMi1ni1n i1n k	
 
 &

 	 DM!!C1 4v =>>EEiPPPLLdn$$C1 4t ;<<CCINNNLFKf555LLC1 4t ;<<CCINNNLFKf555L 	,$)S)) 6 I,,W55	$)++$$Q''d..x8888r   r{   c                     t                               || j                  }t          |t                    r|                    d          }||z   S )NrL   )r!   maskrC   rQ   r^   rS   )rH   r{   ss      r   rx   zABNF._get_masked  sD    IIh	**h$$ 	0w//H!|r   c                    |d}t          | t                    r|                     d          } t          |t                    r|                    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.
        Nr=   rn   B)rQ   r^   rS   r   array)r{   rC   s     r   r~   z	ABNF.mask  s|     <Dh$$ 	2y11HdC   	*;;y))DU[h//S$1G1GH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 %RT %Rd %R %R %R %RN CS CT C C C \CG G G G G 3 35, 3c 3 3F 3 3 3 \3(!9 !9 !9 !9 !9FE#u*$5 %     IuS%Z( Ic5j0A Ie I I I \I 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dS )r#   rm   rl   recv_fnrJ   r   Nc                 ~    || _         || _        g | _        |                                  t	                      | _        d S r   )recvrJ   recv_bufferclearr   lock)rH   r   rJ   s      r   rI   zframe_buffer.__init__5  s9     	$8! "$

FF			r   c                 0    d | _         d | _        d | _        d S 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                     |                      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| _        d S )
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                 F    | j         sdS | j         t          j                 }|S )NF)r   r#   _HEADER_MASK_INDEX)rH   
header_vals     r   r   zframe_buffer.has_maskV  s&    { 	5+l&EF
r   c                     | j         d u S r   )ry   r   s    r   needs_lengthzframe_buffer.needs_length\  r   r   c                 l   | j         t          d          | j         t          j                 }|dz  }|dk    r7|                     d          }t          j        d|          d         | _        d S |dk    r7|                     d          }t          j        d|          d         | _        d S || _        d S )	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C{<<=Tk$  ##A -a003DKKKD    ##A -a003DKKK%DKKKr   c                     | j         d u S r   )r   r   s    r   
needs_maskzframe_buffer.needs_maskm  s    $&&r   c                 f    |                                  r|                     d          nd| _        d S )Nr   r=   )r   r   r   r   s    r   	recv_maskzframe_buffer.recv_maskp  s-    15H$**1---br   c           
         | j         5  |                                 r|                                  | j        t	          d          | j        \  }}}}}}}|                                 r|                                  | j        }|                                 r| 	                                 | j
        }	|t	          d          |                     |          }
|r,|	t	          d          t                              |	|
          }
|                                  t          |||||||
          }|                    | j                   d d d            n# 1 swxY w Y   |S )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   Y 	6 	6  "" #  """{"01FGGG;?;8S$dFHa   "" #  """[F    !   J ~01FGGG&&v..G 9%45HIII))J88 JJLLLdD$'JJENN44555?	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6B s   EEEEbufsizec                    t          |t                    st          d          |t          d | j        D                       z
  }|dk    rl|                     t          d|                    }t          |t                    r-| j                            |           |t          |          z  }nn|dk    ld
                    | j                  }|dk    r	g | _        |S ||d          g| _        |d |         S )Nzbufsize must be an integerc              3   4   K   | ]}t          |          V  d S r   )r   )rh   bufs     r   rj   z+frame_buffer.recv_strict.<locals>.<genexpr>  s(       F FcS F F F F F Fr   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 F FT5E F F FFFFll YYs5(3344F&%((  ''///CKK'  ll ((4+,,q==!DN ' 12D8G8$$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  sb       	s
+	CG			 	 	 	< < < <
#d # # # #M M M M%c	*    #d # # # #& & & &'D ' ' ' 'I I I I"D " " " "H%3 %5 % % % % % %r   r#   c                   r    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dS )r"   fire_cont_framerJ   r   Nc                 >    || _         || _        d | _        d | _        d S 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         r.|j        t          j        t          j        fv rt	          d          d S d S )NzIllegal frame)r   rB   r!   r   r
   rc   r   rH   r   s     r   rZ   zcontinuous_frame.validate  sx    " 	>u|t7G'G'G,_=== 	>5<4
 $
 $
 -_===		> 	> $
 $
r   c                     | j         r| j         dxx         |j        z  cc<   n>|j        t          j        t          j        fv r|j        | _        |j        |j        g| _         |j        r	d | _        d S d S )Nr   )r   rC   rB   r!   rc   r   r   r>   r   s     r   addzcontinuous_frame.add  s    > 	8N1+| 0$2DEEE&+l##lEJ7DN9 	'"&D	' 	'r   c                     |j         p| j        S r   )r>   r   r   s     r   is_firezcontinuous_frame.is_fire  s    y0D00r   c                 L   | j         }|t          d          d | _         |d         |_        | j        sW|U|d         t          j        k    r?| j        s8t          |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N!W
$	R Q4+++- ,!%*-- , ,,Pd5:>N>N,P,PQQQ<,-MNNNAw~r   )r   r   r   r   rI   r!   rZ   r   r   r   r   tupler   rg   r   r   r"   r"     s        2 2D 2T 2 2 2 2>d >t > > > >	' 	'$ 	' 	' 	' 	'1T 1eD#I&6 1 1 1 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      sy    				  



       1 1 1 1 1 1 1 1 1 1 1 1 N N N N N N N N ! ! ! ! ! !&U
 0/////%+ 5; 5       
U 
U 
U}U%+ U5; U5 U U U U U U	
U  (   # "      "    !     DI DI DI DI DI DI DI DIN@% @% @% @% @% @% @% @%F. . . . . . . . . .s   A  A10A1