
    <g	                     z    d Z ddlZddlZddlZddlmZ ddlmZ dZdZ	ddZ
ddZd	 Zd
 Zd Zd Zd Zd Zd Zy)zh
Collection of WebSocket protocol utility functions (RFC6455)
Spec: https://tools.ietf.org/html/rfc6455
    N)http)strutilss$   258EAFA5-E914-47DA-95CA-C5AB0DC85B1113c                     | t         } |7t        j                  t        j                  d            j                  d      }t        j                  dd| |      }|||d<   |||d<   |S )z
        Create the headers for a valid HTTP upgrade request. If Key is not
        specified, it is generated, and can be found in sec-websocket-key in
        the returned header set.

        Returns an instance of http.Headers
       asciiupgrade	websocket)
connectionr	   sec_websocket_versionsec_websocket_keysec-websocket-protocolsec-websocket-extensions)VERSIONbase64	b64encodeosurandomdecoder   Headers)versionkeyprotocol
extensionshs        j/var/www/html/myenv/lib/python3.12/site-packages/seleniumwire/thirdparty/mitmproxy/net/websockets/utils.pyclient_handshake_headersr      sy     
{rzz"~.55g>%		A &.
"#(2
$%H    c                 d    t        j                  ddt        |             }|||d<   |||d<   |S )zh
      The server response is a valid HTTP 101 response.

      Returns an instance of http.Headers
    r	   r
   )r   r	   sec_websocket_acceptr   r   )r   r   create_server_nonce)
client_keyr   r   r   s       r   server_handshake_headersr#   +   sI     	0<	A
 &.
"#(2
$%Hr   c                     d| j                  dd      j                         v xrM | j                  dd      j                         dk(  xr( | j                  d      d uxs | j                  d      d uS )Nr	   r    r
   sec-websocket-keysec-websocket-accept)getlowerheaderss    r   check_handshaker,   =   sr    W[[r288:: 	jIr"((*k9	j	(	)	5	hE[9\dh9hr   c                     t        j                  t        j                  t	        j
                  |       t        z         j                               S )N)r   r   hashlibsha1r   always_bytesMAGICdigest)client_nonces    r   r!   r!   E   s5    GLL)>)>|)Lu)TU\\^__r   c                 4    | j                  dd      t        k(  S )Nzsec-websocket-versionr%   )r(   r   r*   s    r   check_client_versionr5   I   s    ;;.3w>>r   c                 &    | j                  dd       S )Nr   r(   r*   s    r   get_extensionsr8   M   s    ;;1488r   c                 &    | j                  dd       S )Nr   r7   r*   s    r   get_protocolr:   Q   s    ;;/66r   c                 &    | j                  dd       S )Nr&   r7   r*   s    r   get_client_keyr<   U   s    ;;*D11r   c                 &    | j                  dd       S )Nr'   r7   r*   s    r   get_server_acceptr>   Y   s    ;;-t44r   )NNNN)NN)__doc__r   r.   r   %seleniumwire.thirdparty.mitmproxy.netr   'seleniumwire.thirdparty.mitmproxy.utilsr   r1   r   r   r#   r,   r!   r5   r8   r:   r<   r>    r   r   <module>rC      sS      	 6 </
2$`?9725r   