Ë
    Bü´j†  ã                   ó&  — 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m	Z	 ddl
mZmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZ g d¢ZdZe	j8                  e	j:                  e	j<                  e	j>                  e	j@                  fZ!e!e	jD                  fz   Z# e«       Z$ G d„ d«      Z%dej                  de&de&de'de&dede%fd„Z(de&de&fd„Z)de&de&de&de'de*de+fd„Z,e#fdej                  de+de+fd„Z-dddœZ.d e*d!e&d"eee&      de+fd#„Z/de&fd$„Z0y)%ad  
_handshake.py
websocket - WebSocket client library for Python

Copyright 2026 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)ÚAnyÚListÚOptionalé   )ÚSimpleCookieJar)ÚWebSocketExceptionÚWebSocketBadStatusException)Úread_headers)ÚdumpÚerror)Úsend)Úhandshake_responseÚ	handshakeÚSUPPORTED_REDIRECT_STATUSESé   c                   ó*   — e Zd Zdededee   ddfd„Zy)r   ÚstatusÚheadersÚsubprotocolÚreturnNc                 óv   — || _         || _        || _        t        j	                  |j                  d«      «       y )Nz
set-cookie)r   r   r   Ú	CookieJarÚaddÚget)Úselfr   r   r   s       úR/root/workspace/ytshorts/venv/lib/python3.12/site-packages/websocket/_handshake.pyÚ__init__zhandshake_response.__init__4   s-   € ØˆŒØˆŒØ&ˆÔÜ�‰�g—k‘k ,Ó/Õ0ó    )Ú__name__Ú
__module__Ú__qualname__ÚintÚdictr   Ústrr   © r    r   r   r   3   s(   „ ð1˜sð 1¨Tð 1ÀÈÁð 1ÐRVô 1r    r   ÚsockÚurlÚhostnameÚportÚresourceÚoptionsr   c                 ó0  — t        |||||«      \  }}dj                  |«      }t        | |«       t        d|«       t	        | «      \  }	}
|	t
        v rt        |	|
d «      S t        |
||j                  d«      «      \  }}|st        d«      ‚t        |	|
|«      S )Nz
zrequest headerÚsubprotocolszInvalid WebSocket Header)
Ú_get_handshake_headersÚjoinr   r   Ú_get_resp_headersr   r   Ú	_validater   r
   )r(   r)   r*   r+   r,   r-   r   ÚkeyÚ
header_strr   ÚrespÚsuccessÚsubprotos                r   r   r   ;   s�   € ô *¨(°C¸À4ÈÓQ�L€GˆSà—‘˜WÓ%€JÜˆˆzÔÜÐ	˜:Ô&ä$ TÓ*�L€FˆDØÔ,Ñ,Ü! &¨$°Ó5Ð5Ü! $¨¨W¯[©[¸Ó-HÓIÑ€GˆXÙÜ Ð!;Ó<Ð<ä˜f d¨HÓ5Ð5r    c                 ó   — d| v rd| › d�S | S )Nú:ú[ú]r'   )r*   s    r   Ú_pack_hostnamer=   S   s   € à
ˆh�Ø�8�*˜AˆÐØ€Or    Úhostc                 óN  — d| › d�dg}|dv rt        |«      }nt        |«      › d|› �}|j                  d«      s=|j                  d«      r|j                  d|d   › �«       n|j                  d|› �«       |j                  dd	«      \  }}|j                  d
«      sOd|v r|d   �|j                  d|d   › �«       n.|dk(  r|j                  d|› �«       n|j                  d|› �«       t	        «       }|j                  d«      rd|d   vr|j                  d|› �«       n|d   d   }|j                  d«      rd|d   vr|j                  dt
        › �«       |j                  d«      s|j                  d«       n|j                  |d   «       |j                  d«      x}	r#|j                  ddj                  |	«      › �«       |j                  d«      x}
rWt        |
t        «      r6|
j                  «       D ��cg c]  \  }}|€Œ	dj                  ||g«      ‘Œ }
}}|j                  |
«       t        j                  |«      }|j                  dd «      }dj                  t        d ||g«      «      x}r|j                  d|› �«       |j                  d«       ||fS c c}}w )NzGET z	 HTTP/1.1zUpgrade: websocket)éP   i»  r:   Úsuppress_hostr>   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: )Ú rI   )r=   r   ÚappendÚsplitÚ_create_sec_websocket_keyÚVERSIONr1   Ú
isinstancer%   ÚitemsÚextendr   Úfilter)r,   r)   r>   r+   r-   r   ÚhostportÚschemer4   r/   rE   ÚkÚvÚserver_cookieÚclient_cookierH   s                   r   r0   r0   Z   s”  € ð �h�Z˜yÐ)Ð+?Ð@€GØˆyÑÜ! $Ó'‰ä$ TÓ*Ð+¨1¨T¨FÐ3ˆØ�;‰;�Ô'Ø�;‰;�vÔØ�N‰N˜V G¨F¡OÐ#4Ð5Õ6à�N‰N˜V H :Ð.Ô/ð —)‘)˜C Ó#�K€FˆCØ�;‰;Ð(Ô)Ø�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©D¨A¨qÀaÁm�d—i‘i  A Õ'ÐTˆFÑTØ�‰�vÔä—M‘M $Ó'€MØ—K‘K ¨$Ó/€Mà—‘œ6 $¨¸Ð(FÓGÓHÐH€vÐHØ�‰˜ & Ð*Ô+à‡N�N�8ÔØ�Cˆ<Ðùó Us   Ç>
J!È	J!Úsuccess_statusesc                 ó€  — t        | «      \  }}}||vr�|j                  d«      }|rHddlm} d}	 t	        |«      }|dkD  r1t        |d«      }	 || |	«      }
||
z  }|t        |
«      z  }|dkD  rŒ.nd }t        d|› d	|› d
|› d
|r|j                  dd¬«      nd › �||||«      ‚||fS # t
        $ r t        d|›�«      ‚w xY w)Nzcontent-lengthr   )Úrecvr    zInvalid content-length header: r   i @  zHandshake status ú z -+-+- úutf-8Úreplace)Úerrors)r   r   Ú_socketrZ   r$   Ú
ValueErrorr
   ÚminÚlenr   Údecode)r(   rX   r   Úresp_headersÚstatus_messageÚcontent_lenrZ   Úresponse_bodyÚ	remainingÚ
chunk_sizeÚchunks              r   r2   r2   •   s.  € ô ,8¸Ó+=Ñ(€FˆL˜.ØÐ%Ñ%Ø"×&Ñ&Ð'7Ó8ˆÙå%àˆMðÜ Ó,�	ð
 ˜a’-Ü  ¨EÓ2�
Ù˜T :Ó.�Ø Ñ&�ØœS ›ZÑ'�	ð	 ˜a”-ð !ˆMÜ)Ø ˜x q¨Ð(8¸À¸~ÈWñ  IVÐUb×UiÑUiÐjqð  {DÐUiô  VEð  \`ð  Uað  bØØØØó
ð 	
ð �<ÐÐøô% ò Ü(Ø5°k°_ÐEóð ðús   °B% Â%B=Ú	websocketÚupgrade)rl   rF   r   r4   r/   c                 ó>  — d }t         j                  «       D ][  \  }}| j                  |d «      }|s y|j                  d«      D �cg c]   }|j	                  «       j                  «       ‘Œ" }}||vsŒ[ y |ra| j                  dd «      }|r.|j                  «       |D �cg c]  }|j                  «       ‘Œ c}vrt        d|› �«       y|j                  «       }| j                  dd «      }	|	sy|	j                  «       }	t        |	t        «      r|	j                  d«      }	|› d�j                  d«      }
t        t        j                  |
«      j                  «       «      j	                  «       j                  «       }t        j                  ||	«      rd|fS yc c}w c c}w )	N)FNrG   zsec-websocket-protocolzInvalid subprotocol: zsec-websocket-acceptr\   z$258EAFA5-E914-47DA-95CA-C5AB0DC85B11T)Ú_HEADERS_TO_CHECKrO   r   rK   ÚstripÚlowerr   rN   r&   ÚencodeÚbase64encodeÚhashlibÚsha1ÚdigestÚhmacÚcompare_digest)r   r4   r/   r8   rT   rU   ÚrÚxÚsÚresultÚvalueÚhasheds               r   r3   r3   ½   sj  € Ø€HÜ!×'Ñ'Ó)ò ‰ˆˆ1Ø�K‰K˜˜4Ó ˆÙÙØ()¯©°«Ö5 1ˆQ�W‰W‹Y�_‰_ÕÐ5ˆÐ5Ø�AŠ:Ùðñ Ø—;‘;Ð7¸Ó>ˆÙ˜8Ÿ>™>Ó+À|Ö3TÀ!°A·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 6Ô*Ø�Xˆ~Ðàùò3 6ùò 4Us   Á%FÂFc                  ó|   — t        j                  d«      } t        | «      j                  d«      j	                  «       S )Né   r\   )ÚosÚurandomrr   rc   ro   )Ú
randomnesss    r   rL   rL   ß   s.   € Ü—‘˜B“€JÜ˜
Ó#×*Ñ*¨7Ó3×9Ñ9Ó;Ð;r    )1Ú__doc__rs   rv   r€   ÚsocketÚbase64r   rr   Úhttpr   Útypingr   r   r   Ú
_cookiejarr	   Ú_exceptionsr
   r   Ú_httpr   Ú_loggingr   r   r_   r   Ú__all__rM   ÚMOVED_PERMANENTLYÚFOUNDÚ	SEE_OTHERÚTEMPORARY_REDIRECTÚPERMANENT_REDIRECTr   ÚSWITCHING_PROTOCOLSÚSUCCESS_STATUSESr   r   r&   r$   r   r=   r%   Útupler0   r2   rn   r3   rL   r'   r    r   ú<module>r•      s¡  ðñó& Û Û 	Û Ý .Ý ß &Ñ &å 'ß HÝ ß !Ý â
L€ð €ð × Ñ Ø×ÑØ×ÑØ×!Ñ!Ø×!Ñ!ðÐ ð /°*×2PÑ2PÐ1RÑRÐ áÓ€	÷1ñ 1ð6Ø
�-‰-ð6à	ð6ð ð6ð ð	6ð
 ð6ð ð6ð ó6ð0˜Sð  Só ð8Øð8Øð8Ø#&ð8Ø.1ð8Ø<@ð8à
ó8ðx 4Dñ Ø
�-‰-ð Ø+0ð à
ó ðF ØñÐ ð�tð  #ð °X¸dÀ3¹iÑ5Hð ÈUó ðD< 3ô <r    