
    DQc                        d Z ddlZddlZddlZddlZddlmZ ddlT ddlT ddl	T ddl
T  eed          rej        rddlmZ nddlmZ  eed          r(ej        r! eed	          rej        rdd
lmZ nddlmZ nddlZg dZ eed          rej        Znd ZdZej        ej        ej        fZeej        fz   Z e            Z G d de           Z!d Z"d Z#d Z$efdZ%dddZ&d Z'd Z(dS )aH  
websocket - WebSocket client library for Python

Copyright (C) 2010 Hiroki Ohtani(liris)

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

    N   )SimpleCookieJar)*PY3)encodebytes)encodestringPY34)client)
HTTPStatus)handshake_response	handshakeSUPPORTED_REDIRECT_STATUSEScompare_digestc                     | |k    S )N )s1s2s     4lib/python3.11/site-packages/websocket/_handshake.pyr   r   3   s    Rx       c                       e Zd Zd ZdS )r   c                     || _         || _        || _        t                              |                    d                     d S )Nz
set-cookie)statusheaderssubprotocol	CookieJaraddget)selfr   r   r   s       r   __init__zhandshake_response.__init__A   s<    &gkk,//00000r   N)__name__
__module____qualname__r    r   r   r   r   r   ?   s#        1 1 1 1 1r   r   c                    t          ||||          \  }}d                    |          }t          | |           t          d|           t	          |           \  }}	|t
          v rt          ||	d           S t          |	||                    d                    \  }
}|
st          d          t          ||	|          S )Nz
zrequest headersubprotocolszInvalid WebSocket Header)
_get_handshake_headersjoinsenddump_get_resp_headersr   r   	_validater   WebSocketException)sockhostnameportresourceoptionsr   key
header_strr   respsuccesssubprotos               r   r   r   H   s    )(HdGLLLGSW%%Jz	:&&&$T**LFD,, 6!&$555!$W[[-H-HIIGX = !;<<<fdH555r   c                     d| v rd| z   dz   S | S )N:[]r   )r.   s    r   _pack_hostnamer;   Y   s"    
h $X~##Or   c                 l   d| z  dg}|dk    s|dk    rt          |          }ndt          |          |fz  }d|v r'|d         |                    d|d         z             n|                    d|z             d|vs|d         sCd	|v r'|d	         |                    d
|d	         z             n|                    d|z             t                      }d|vs
d|d         vr't                      }|                    d|z             n|d         d         }d|vs
d|d         vr|                    dt          z             d|vs|d         |                    d           n|                    |d                    |                    d          }|r+|                    dd                    |          z             d|v rP|d         }t          |t                    rd |                                D             }|	                    |           t                              |          }	|                    dd           }
d                    t          d |	|
g                    }|r|                    d|z             |                    d           |                    d           ||fS )NzGET %s HTTP/1.1zUpgrade: websocketP   i  z%s:%dhostzHost: %ssuppress_originoriginz
Origin: %szOrigin: http://%sheaderzSec-WebSocket-KeyzSec-WebSocket-Key: %szSec-WebSocket-VersionzSec-WebSocket-Version: %s
connectionzConnection: Upgrader%   zSec-WebSocket-Protocol: %s,c                 F    g | ]\  }}|d                     ||g          S )Nz: )r'   ).0kvs      r   
<listcomp>z*_get_handshake_headers.<locals>.<listcomp>   sB       Aq		1a&!!  r   cookiez; z
Cookie: %s )r;   append_create_sec_websocket_keyVERSIONr   r'   
isinstancedictitemsextendr   filter)r0   r>   r/   r1   r   hostportr2   r%   rA   server_cookieclient_cookierI   s               r   r&   r&   `   s   H$G rz :TS[ :!$''nT22D99 .WV_ .zGFO34444zH,---' ;w7H/I ;w 	;78#4 	;NN<'(*;;<<<<NN.9:::
#
%
%C w 5"5WX=N"N 5')).45555h 34w >"9AR"R >2W<===7" .gl&; .,----w|,---;;~..L N3chh|6L6LLMMM7 "fd## 	 "LLNN  F
 	vMM$''MKK$//MYYvd]M$BCCDDF .|f,---NN2NN2C<r   c                 \    t          |           \  }}}||vrt          d|||          ||fS )NzHandshake status %d %s)read_headersWebSocketBadStatusException)r-   success_statusesr   resp_headersstatus_messages        r   r*   r*      sF    +7+=+=(FL.%% j)*BFN\hiii<r   	websocketupgrade)r]   rB   c                 Z   d }t                                           D ]=\  }}|                     |d           }|s dS |                                }||k    r dS >|rm|                     dd           }|r |                                d |D             vr!t	          dt          |          z              dS |                                }|                     dd           }|sdS |                                }t          |t          j                  r|	                    d          }|dz   	                    d          }t          t          j        |                                                                                                                    }	t          |	|          }
|
rd|fS dS )	N)FNzsec-websocket-protocolc                 6    g | ]}|                                 S r   )lower)rE   ss     r   rH   z_validate.<locals>.<listcomp>   s     3T3T3T!AGGII3T3T3Tr   zInvalid subprotocol: zsec-websocket-acceptutf-8z$258EAFA5-E914-47DA-95CA-C5AB0DC85B11T)_HEADERS_TO_CHECKrP   r   r`   errorstrrN   six	text_typeencodebase64encodehashlibsha1digeststripr   )r   r2   r%   r6   rF   rG   rresultvaluehashedr5   s              r   r+   r+      s   H!''))  1KK4   	;;GGII6 	;;	  $;;7>> 	8>>++3T3T|3T3T3TT 	)C,=,==>>>;>>##[[/66F {\\^^F&#-(( (w''99AA'JJE',u--446677==??EEGGFVV,,G X~{r   c                      t          j        d          } t          |                               d                                          S )N   rb   )osurandomri   decoderm   )
randomnesss    r   rL   rL      s7    BJ
##**73399;;;r   ))__doc__rj   hmacrt   rf   
_cookiejarr   _exceptions_http_logging_sockethasattrr   base64r   ri   r   r	   httpr
   r   httplib__all__r   rM   MOVED_PERMANENTLYFOUND	SEE_OTHERr   SWITCHING_PROTOCOLSSUCCESS_STATUSESr   objectr   r   r;   r&   r*   rc   r+   rL   r   r   r   <module>r      sN   (   				 



 ' ' ' ' ' '                
73 437 42222222333333
73 !37 !wsF $ $-------#######    
L
L
L
74!"" (NN   );Z=MzOce .*2P1RR O	1 1 1 1 1 1 1 16 6 6"  > > >B .>                F< < < < <r   