
    vKg                        S r SSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
  SSKJrJr  SSKJr  SS	KJrJr  SS
KJr  / SQrSr\R.                  \R0                  \R2                  \R4                  \R6                  4r\\R:                  4-   r\
" 5       r " S S5      r S\!S\!S\"S\!S\ 4
S jr#S\!S\!4S jr$S\!S\!S\!S\"S\%S\&4S jr'\4S\&S\&4S jjr(SSS.r)S\!S\&4S jr*S\!4S  jr+g)!ad  
_handshake.py
websocket - WebSocket client library for Python

Copyright 2024 engn33r

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
    N)encodebytes)
HTTPStatus   )SimpleCookieJar)WebSocketExceptionWebSocketBadStatusException)read_headers)dumperror)send)handshake_response	handshakeSUPPORTED_REDIRECT_STATUSES   c                   &    \ rS rSrS\S\4S jrSrg)r   0   statusheadersc                 p    Xl         X l        X0l        [        R	                  UR                  S5      5        g )Nz
set-cookie)r   r   subprotocol	CookieJaraddget)selfr   r   r   s       T/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/websocket/_handshake.py__init__handshake_response.__init__1   s'    &gkk,/0    )r   r   r   N)__name__
__module____qualname____firstlineno__intdictr   __static_attributes__ r   r   r   r   0   s    1s 1T 1r   r   urlhostnameportresourcereturnc                 ,   [        XAX#U5      u  pgSR                  U5      n[        X5        [        SU5        [	        U 5      u  pU	[
        ;   a  [        XS 5      $ [        XUR                  S5      5      u  pU(       d  [        S5      e[        XU5      $ )Nz
zrequest headersubprotocolszInvalid WebSocket Header)
_get_handshake_headersjoinr   r
   _get_resp_headersr   r   	_validater   r   )sockr'   r(   r)   r*   optionsr   key
header_strr   respsuccesssubprotos                r   r   r   8   s     *(QLGW%J	:&$T*LF,,!&55!$W[[-HIG !;<<fH55r   c                     SU ;   a  SU  S3$ U $ )N:[]r&   )r(   s    r   _pack_hostnamer=   K   s    
h8*AOr   hostr3   c                    SU  S3S/nUS;   a  [        U5      nO[        U5       SU 3nUR                  S5      (       a  UR                  SUS    35        OUR                  SU 35        UR                  SS5      u  pqUR                  S	5      (       dS  S
U;   a  US
   b  UR                  SUS
    35        O/US:X  a  UR                  SU 35        OUR                  SU 35        [	        5       nUR                  S5      (       a	  SUS   ;  a  UR                  SU 35        OUS   S   nUR                  S5      (       a	  SUS   ;  a  UR                  S[
         35        UR                  S5      (       d  UR                  S5        OUR                  US   5        UR                  S5      =n	(       a#  UR                  SSR                  U	5       35        UR                  S5      =n
(       a^  [        U
[        5      (       a8  U
R                  5        VVs/ sH  u  pUc  M
  SR                  X/5      PM     n
nnUR                  U
5        [        R                  U5      nUR                  SS 5      nSR                  [        S X/5      5      =n(       a  UR                  SU 35        UR                  S5        XX4$ s  snnf )NzGET z	 HTTP/1.1zUpgrade: websocket)P   i  r:   r>   zHost: r   suppress_originoriginzOrigin: wsszOrigin: https://zOrigin: http://headerzSec-WebSocket-KeyzSec-WebSocket-Key: zSec-WebSocket-VersionzSec-WebSocket-Version: 
connectionzConnection: Upgrader-   zSec-WebSocket-Protocol: ,z: cookiez; zCookie: ) rH   )r=   r   appendsplit_create_sec_websocket_keyVERSIONr/   
isinstancer$   itemsextendr   filter)r*   r'   r>   r)   r3   r   hostportschemer4   r-   rD   kvserver_cookieclient_cookierG   s                   r   r.   r.   R   s    hZy)+?@Gy!$'$T*+1TF3{{6012z*+ ))C#KF;;())w78#4#@NNXgh&7%89:u_NN-hZ89NN_XJ78
#
%C ;;x  $7wx?P$P,SE23h 34;;x  $;78CT$T0	:;;;|$$,-w|,-{{>22|21#((<2H1IJKX&&v&fd##4:LLNTNDAa'dii'NFTvMM$'MKK$/M6$(FGHHvH&*+NN8< Us   K*Ksuccess_statusesc           
          [        U 5      u  p#nX!;  aP  UR                  S5      nU(       a  U R                  [        U5      5      nOS n[	        SU SU SU SU 3UUUU5      eX#4$ )Nzcontent-lengthzHandshake status  z -+-+- )r	   r   recvr#   r   )r2   rW   r   resp_headersstatus_messagecontent_lenresponse_bodys          r   r0   r0      s    +7+=(F.%"&&'78 IIK M !M)xq(8~WUbTcd
 	
 r   	websocketupgrade)r`   rE   r4   c                    S n[         R                  5        Hb  u  pEU R                  US 5      nU(       d    gUR                  S5       Vs/ sH   owR	                  5       R                  5       PM"     nnXV;  d  Mb    g   U(       ai  U R                  SS 5      nU(       a1  UR                  5       U Vs/ sH  oR                  5       PM     sn;  a  [        SU 35        gUR                  5       nU R                  SS 5      n	U	(       d  gU	R                  5       n	[        U	[        5      (       a  U	R                  S5      n	U S3R                  S5      n
[        [        R                  " U
5      R                  5       5      R	                  5       R                  5       n[        R                  " X5      (       a  SU4$ gs  snf s  snf )	N)FNrF   zsec-websocket-protocolzInvalid subprotocol: zsec-websocket-acceptutf-8z$258EAFA5-E914-47DA-95CA-C5AB0DC85B11T)_HEADERS_TO_CHECKrN   r   rJ   striplowerr   rM   strencodebase64encodehashlibsha1digesthmaccompare_digest)r   r4   r-   r8   rS   rT   rxsresultvaluehasheds               r   r1   r1      sf   H!'')KK4 ()51WWY__5: * ;;7>8>>+|3T|!GGI|3TT),89>>#[[/6F\\^F&#w'e78??HE',,u-4467==?EEGF6**X~3 6 4Us   
&F:0F?c                  ~    [         R                  " S5      n [        U 5      R                  S5      R	                  5       $ )N   rb   )osurandomrh   decoderd   )
randomnesss    r   rK   rK      s.    BJ
#**7399;;r   ),__doc__ri   rl   rv   base64r   rh   httpr   
_cookiejarr   _exceptionsr   r   _httpr	   _loggingr
   r   _socketr   __all__rL   MOVED_PERMANENTLYFOUND	SEE_OTHERTEMPORARY_REDIRECTPERMANENT_REDIRECTr   SWITCHING_PROTOCOLSSUCCESS_STATUSESr   r   rf   r#   r   r=   r$   tupler.   r0   rc   r1   rK   r&   r   r   <module>r      sT  $   	 .  ' H  ! 
L    !!!!  /*2P2P1RR 	1 166!6),68;66&S S 777#&7.17<@7
7t 7G  e  5  *  C % D<3 <r   