
    <g"                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 ddlmZ dZdZ e       Z ej"                  d dd	d
dd      Z ej"                  ddddddddddddd      Z G d d      Z G d d      Zy)     N)bidi)tcp)bitshumanstrutils   )Maskeri   l                  	   
   )CONTINUETEXTBINARYCLOSEPINGPONGi  i  i  i  i  i  i  i  i  i  i  i  i  )NORMAL_CLOSURE
GOING_AWAYPROTOCOL_ERRORUNSUPPORTED_DATARESERVEDRESERVED_NO_STATUSRESERVED_ABNORMAL_CLOSUREINVALID_PAYLOAD_DATAPOLICY_VIOLATIONMESSAGE_TOO_BIGMANDATORY_EXTENSIONINTERNAL_ERRORRESERVED_TLS_HANDHSAKE_FAILEDc            	       l    e Zd Zej                  dddddeeef	dZed        Zd Z	d Z
ed        Zd Zy	)
FrameHeaderr   Fc
                 J   d|cxk  rdk  st        d       t        d      || _        || _        || _        || _        || _        || _        |	t        u r!| j                  | j                        | _	        n|	| _	        |t        u r|t        u s	|dk(  s|du rd| _
        d| _        nO|t        u rd| _
        || _        n8|t        u r"|| _
        t        j                  d      | _        n|| _
        || _        | j                  r$t        | j                        dk7  rt        d      y y )	Nr      zopcode must be 0-16F    r      zMasking key must be 4 bytes.)
ValueErroropcodepayload_lengthfinrsv1rsv2rsv3DEFAULT_make_length_codelength_codemaskmasking_keyosurandomlen)
selfr(   r)   r*   r+   r,   r-   r2   r1   r0   s
             j/var/www/html/myenv/lib/python3.12/site-packages/seleniumwire/thirdparty/mitmproxy/net/websockets/frame.py__init__zFrameHeader.__init__.   s    F#V#233 $233,			'!#55d6I6IJD*DGOw 6419PUDI"DW_DI*DG#DI!zz!}DDI*DD$4$4 5 :;<< !;r%   c                 (    |dk  r|S |dk\  r|dk  ryy)z
         A WebSocket frame contains an initial length_code, and an optional
         extended length code to represent the actual length if length code is
         larger than 125
        }   ~   i      )r6   lengths     r7   r/   zFrameHeader._make_length_codeX   s#     S=Ms]vr%   c                     dt         j                  | j                  t        | j                              j	                         g}g }dD ]   }t        | |      s|j                  |       " |r"|j                  ddj                  |      g       | j                  r'|j                  dt        | j                        z         | j                  r1|j                  dt        j                  | j                        z         dj                  |      S )Nz	ws frame:)r*   r+   r,   r-   r1   :|z:key=%sz %s )OPCODEget_namer(   hexlowergetattrappendextendjoinr2   reprr)   r   pretty_size)r6   valsflagsis       r7   __repr__zFrameHeader.__repr__f   s    OODKKT[[)9:@@B
 8 	 AtQQ	  KKchhuo./KK	D)9)9$::;KK 1 1$2E2E FFGwwt}r%   c                    t        j                  dd| j                        }t        j                  |d| j                        }t        j                  |d| j                        }t        j                  |d| j
                        }|| j                  z  }t        j                  | j                  d| j                        }t        ||g      }| j                  dk  rny| j                  t        k  r$|t        j                  d| j                        z  }nB| j                  t        k  r$|t        j                  d| j                        z  }nt        d	      | j                   r|| j                   z  }|S )
Nr            r&   r;   !H!Qz$Payload length exceeds 64bit integer)r   setbitr*   r+   r,   r-   r(   r0   r1   bytesr)   MAX_16_BIT_INTstructpackMAX_64_BIT_INTr'   r2   )r6   
first_bytesecond_bytebs       r7   	__bytes__zFrameHeader.__bytes__w   s$   [[Atxx0
[[Q		:
[[Q		:
[[Q		:
$++-
kk$"2"2AtyyA:{+,$  >1 T4#6#677A  >1 T4#6#677ACDD!!!Ar%   c                 &   |j                  d      \  }}t        j                  |d      }t        j                  |d      }t        j                  |d      }t        j                  |d      }|dz  }t        j                  |d      }	|dz  }
|
dk  r|
}nT|
d	k(  r(t        j                  d
|j                  d            \  }n't        j                  d|j                  d            \  }|	dk(  r|j                  d      }nd} | ||||||	|
||	      S )z1
          read a WebSocket frame header
        r
   rR   rS   rT   r&      r<   r:   r;   rU   rV   r   r   N)	r*   r+   r,   r-   r(   r1   r0   r)   r2   )	safe_readr   getbitrZ   unpack)clsfpr]   r^   r*   r+   r,   r-   r(   mask_bitr0   r)   r2   s                r7   	from_filezFrameHeader.from_file   s   
 #%,,q/
Kkk*a({{:q){{:q){{:q)c!;;{A.!D( #(NC$mmD",,q/BON$mmD",,q/BON q=,,q/KK#)#

 
	
r%   c                 R    t        |t              rt        |       t        |      k(  S yNF)
isinstancer"   rX   r6   others     r7   __eq__zFrameHeader.__eq__   s"    e[);%,..r%   N)__name__
__module____qualname__rC   r   r.   r8   classmethodr/   rP   r`   ri   ro   r=   r%   r7   r"   r"   ,   sa     {{(=T  "8 &
 &
Pr%   r"   c                   J    e Zd ZdZd	dZed        Zd Zd Zed        Z	d Z
y)
Framea  
    Represents a single WebSocket frame.
    Constructor takes human readable forms of the frame components.
    from_bytes() reads from a file-like object to create a new Frame.

    WebSocket frame as defined in RFC6455

       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-------+-+-------------+-------------------------------+
      |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
      |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
      |N|V|V|V|       |S|             |   (if payload len==126/127)   |
      | |1|2|3|       |K|             |                               |
      +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
      |     Extended payload length continued, if payload len == 127  |
      + - - - - - - - - - - - - - - - +-------------------------------+
      |                               |Masking-key, if MASK set to 1  |
      +-------------------------------+-------------------------------+
      | Masking-key (continued)       |          Payload Data         |
      +-------------------------------- - - - - - - - - - - - - - - - +
      :                     Payload Data continued ...                :
      + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
      |                     Payload Data continued ...                |
      +---------------------------------------------------------------+
    c                 n    || _         |j                  dt        |            |d<   t        di || _        y )Nr)   r=   )payloadgetr5   r"   header)r6   rw   kwargss      r7   r8   zFrame.__init__   s3    #)::.>G#M !+F+r%   c                 p    | j                  t        j                  t        j                  |                  S )z
          Construct a websocket frame from an in-memory bytestring
          to construct a frame from a stream of bytes, use from_file() directly
        )ri   r   ReaderioBytesIO)rf   
bytestrings     r7   
from_byteszFrame.from_bytes   s%     }}SZZ

:(>?@@r%   c                     t        | j                        }| j                  r%|dz   t        j                  | j                        z   }|S )Nz

Payload:
)rK   ry   rw   r   bytes_to_escaped_str)r6   rets     r7   rP   zFrame.__repr__   s:    4;;<<&)F)Ft||)TTC
r%   c                     t        | j                        }| j                  j                  r4| t        | j                  j                        | j                        z  }|S || j                  z  }|S )zK
            Serialize the frame to wire format. Returns a string.
        )rX   ry   r2   r	   rw   )r6   r_   s     r7   r`   zFrame.__bytes__   s`     $++;;""0//0>>A  Ar%   c                     t         j                  |      }|j                  |j                        }|j                  dk(  r'|j
                  r t        |j
                        |      } | |      }||_        |S )z
          read a WebSocket frame sent by a server or client

          fp is a "file like" object that could be backed by a network
          stream or a disk or an in memory stream reader
        r   )r"   ri   rc   r)   r1   r2   r	   ry   )rf   rg   ry   rw   frames        r7   ri   zFrame.from_file   sh     &&r*,,v445;;! 2 20fV//09GGr%   c                 R    t        |t              rt        |       t        |      k(  S yrk   )rl   ru   rX   rm   s     r7   ro   zFrame.__eq__  s"    eU#;%,..r%   N)r%   )rp   rq   rr   __doc__r8   rs   r   rP   r`   ri   ro   r=   r%   r7   ru   ru      sE    4,
 A A	  "r%   ru   )r}   r3   rZ   +seleniumwire.thirdparty.mitmproxy.coretypesr   %seleniumwire.thirdparty.mitmproxy.netr   'seleniumwire.thirdparty.mitmproxy.utilsr   r   r   maskerr	   rY   r\   objectr.   BiDirC   CLOSE_REASONr"   ru   r=   r%   r7   <module>r      s    	 	  < 5 I I 
( 
	
		
 tyy""&"S SlN Nr%   