ó
    ÖÁ“iµ  ã                   óÐ  • 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 2025 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   é1   Ú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       ÚQ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/websocket/_handshake.pyÚ__init__Úhandshake_response.__init__2   s'   € ØŒØŒØ&ÔÜ�‰�g—k‘k ,Ó/Õ0ó    )r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚintÚdictr   Ú__static_attributes__© r   r   r   r   1   s   † ð1˜sð 1¨T÷ 1r   r   ÚurlÚhostnameÚportÚresourceÚreturnc                 ó,  • [        XAX#U5      u  pgSR                  U5      n[        X5        [        SU5        [	        U 5      u  pšU	[
        ;   a  [        XšS 5      $ [        X§UR                  S5      5      u  p¼U(       d  [        S5      e[        XšU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   9   s‹   € ô *¨(¸ÈÓQ�L€Gà—‘˜WÓ%€JÜˆÔÜÐ	˜:Ô&ä$ TÓ*�L€FØÔ,Ó,Ü! &°Ó5Ð5Ü! $¨W¯[©[¸Ó-HÓIÑ€GÞÜ Ð!;Ó<Ð<ä˜f¨HÓ5Ð5r   c                 ó   • SU ;   a  SU  S3$ U $ )NÚ:Ú[Ú]r&   )r(   s    r   Ú_pack_hostnamer=   L   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      (       a9  U
R                  5        VVs/ s H  u  p¼U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.   S   s’  € ð �h�Z˜yÐ)Ð+?Ð@€GØˆyÓÜ! $Ó'‰ä$ TÓ*Ð+¨1¨T¨FÐ3ˆØ‡{�{�6×ÑØ�‰˜ ¨¡Ð0Ð1Õ2à�‰˜ ˜zÐ*Ô+ð —)‘)˜C Ó#�K€FØ�;‰;Ð(×)Ñ)Ø�wÓ 7¨8Ñ#4Ñ#@Ø�N‰N˜X g¨hÑ&7Ð%8Ð9Õ:Ø�u‹_Ø�N‰NÐ-¨h¨ZÐ8Õ9à�N‰N˜_¨X¨JÐ7Ô8ä
#Ó
%€Cð �;‰;�x× Ñ Ð$7¸wÀxÑ?PÓ$PØ�‰Ð,¨S¨EÐ2Õ3à�hÑÐ 3Ñ4ˆà�;‰;�x× Ñ Ð$;À7È8ÑCTÓ$TØ�‰Ð0´°	Ð:Ô;à�;‰;�|×$Ñ$Ø�‰Ð,Õ-à�‰�w˜|Ñ,Ô-à—{‘{ >Ó2Ð2€|Õ2Ø�‰Ð1°#·(±(¸<Ó2HÐ1IÐJÔKà—‘˜XÓ&Ð&€vÕ&Ü�fœd×#Ñ#Ø4:·L±L´NÔT²N©D¨AÀaÓ'�d—i‘i  Ö'±NˆFÑTØ�‰�vÔä—M‘M $Ó'€MØ—K‘K ¨$Ó/€Mà—‘œ6 $¨Ð(FÓGÓHÐH€vÕHØ�‰˜ & Ð*Ô+à‡N�N�8ÔØˆ<Ðùó Us   È	KÈ+KÚsuccess_statusesc           
      ó(  • [        U 5      u  p#nX!;  a}  UR                  S5      nU(       aH  SSKJn  Sn[	        U5      nUS:”  a.  [        US5      n	U" X	5      n
Xz-  nU[        U
5      -  nUS:”  a  M.  OS n[        SU SU S	U S	U 3UUUU5      eX#4$ )
Nzcontent-lengthr   )Úrecvr   r   i @  zHandshake status Ú z -+-+- )r	   r   Ú_socketrY   r#   ÚminÚlenr   )r2   rW   r   Úresp_headersÚstatus_messageÚcontent_lenrY   Úresponse_bodyÚ	remainingÚ
chunk_sizeÚchunks              r   r0   r0   �   sÄ   € Ü+7¸Ó+=Ñ(€F˜.ØÓ%Ø"×&Ñ&Ð'7Ó8ˆÞå%àˆMÜ˜KÓ(ˆIØ˜a“-Ü  ¨EÓ2�
Ù˜TÓ.�ØÑ&�ØœS ›ZÑ'�	ð	 ˜a•-øð !ˆMÜ)Ø ˜x q¨Ð(8¸À¸~ÈWÐUbÐTcÐdØØØØó
ð 	
ð ÐÐr   Ú	websocketÚupgrade)rf   rE   r4   c                 óŒ  • S n[         R                  5        Hc  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  Mc    g   U(       aj  U R                  SS 5      nU(       a2  UR                  5       U Vs/ s H  oˆR                  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                  " X¹5      (       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Ü!×'Ñ'Ö)‰ˆØ�K‰K˜˜4Ó ˆÞÙØ()¯©°¬Ó5ª 1�W‰W‹Y�_‰_Ö©ˆÐ5Ø�:Ùñ *ö Ø—;‘;Ð7¸Ó>ˆÞ˜8Ÿ>™>Ó+Á|Ó3TÂ|À!·G±G¶IÁ|Ñ3TÓTÜÐ)¨,¨Ð8Ô9ØØ—>‘>Ó#ˆà�[‰[Ð/°Ó6€FÞØØ�\‰\‹^€Fä�&œ#×ÑØ—‘˜wÓ'ˆàˆeÐ7Ð8×?Ñ?ÀÓH€EÜœ'Ÿ,š, uÓ-×4Ñ4Ó6Ó7×=Ñ=Ó?×EÑEÓG€Fä×Ò˜6×*Ñ*Ø�Xˆ~Ðàùò3 6ùò 4Us   Á
'F<Â1Gc                  ó~   • [         R                  " S5      n [        U 5      R                  S5      R	                  5       $ )Né   rh   )ÚosÚurandomrn   Údecoderj   )Ú
randomnesss    r   rK   rK   Ð   s.   € Ü—’˜B“€JÜ˜
Ó#×*Ñ*¨7Ó3×9Ñ9Ó;Ð;r   ),Ú__doc__ro   rr   r|   Úbase64r   rn   Úhttpr   Ú
_cookiejarr   Ú_exceptionsr   r   Ú_httpr	   Ú_loggingr
   r   r[   r   Ú__all__rL   ÚMOVED_PERMANENTLYÚFOUNDÚ	SEE_OTHERÚTEMPORARY_REDIRECTÚPERMANENT_REDIRECTr   ÚSWITCHING_PROTOCOLSÚSUCCESS_STATUSESr   r   rl   r#   r   r=   r$   Útupler.   r0   ri   r1   rK   r&   r   r   Ú<module>r�      sT  ðñó& Û Û 	Ý .Ý å 'ß HÝ ß !Ý â
L€ð €ð × Ñ Ø×ÑØ×ÑØ×!Ñ!Ø×!Ñ!ðÐ ð /°*×2PÑ2PÐ1RÑRÐ áÓ€	÷1ñ 1ð6Øð6Ø!ð6Ø),ð6Ø8;ð6àô6ð&˜Sð  Sô ð7Øð7Øð7Ø#&ð7Ø.1ð7Ø<@ð7à
ô7ðt 7Gñ  ¨eð  È5õ  ð8 ØñÐ ð˜Cð °%ô ðD< 3õ <r   