§
    JŠtjµ  ã                   ó”  — 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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j        ej        ej        ej        ej        fZeej        fz   Z e
¦   «         Z G d„ d¦  «        Z 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&de&fd„Z(dddœZ)de!de&fd„Z*de!fd „Z+dS )!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                   ó   — e Zd Zdedefd„ZdS )r   ÚstatusÚheadersc                 óŠ   — || _         || _        || _        t                               |                     d¦  «        ¦  «         d S )Nz
set-cookie)r   r   ÚsubprotocolÚ	CookieJarÚaddÚget)Úselfr   r   r   s       úR/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/websocket/_handshake.pyÚ__init__zhandshake_response.__init__2   s<   € ØˆŒØˆŒØ&ˆÔÝ�Š�g—k’k ,Ñ/Ô/Ñ0Ô0Ð0Ð0Ð0ó    N)Ú__name__Ú
__module__Ú__qualname__ÚintÚdictr   © r   r   r   r   1   s6   € € € € € ð1˜sð 1¨Tð 1ð 1ð 1ð 1ð 1ð 1r   r   ÚurlÚhostnameÚportÚresourceÚreturnc                 ó‚  — 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Újoinr   r
   Ú_get_resp_headersr   r   Ú	_validater   r   )Úsockr#   r$   r%   r&   Úoptionsr   ÚkeyÚ
header_strr   ÚrespÚsuccessÚsubprotos                r   r   r   9   sÉ   € õ *¨(°C¸À4ÈÑQÔQ�L€GˆSà—’˜WÑ%Ô%€JÝˆˆzÑÔÐÝÐ	˜:Ñ&Ô&Ð&å$ TÑ*Ô*�L€FˆDØÕ,Ð,Ð,Ý! &¨$°Ñ5Ô5Ð5Ý! $¨¨W¯[ª[¸Ñ-HÔ-HÑIÔIÑ€GˆXØð =Ý Ð!;Ñ<Ô<Ð<å˜f d¨HÑ5Ô5Ð5r   c                 ó   — d| v rd| › d�S | S )Nú:ú[ú]r"   )r$   s    r   Ú_pack_hostnamer9   L   s   € à
ˆh€€Ø�8ˆˆˆÐØ€Or   Úhostr/   c                 ó  — d| › d�dg}|dv rt          |¦  «        }nt          |¦  «        › d|› �}|                     d¦  «        r|                     d|d         › �¦  «         n|                     d|› �¦  «         |                     dd¦  «        \  }}|                     d	¦  «        sbd
|v r'|d
         �|                     d|d
         › �¦  «         n7|dk    r|                     d|› �¦  «         n|                     d|› �¦  «         t	          ¦   «         }|                     d¦  «        r
d|d         vr|                     d|› �¦  «         n|d         d         }|                     d¦  «        r
d|d         vr|                     dt
          › �¦  «         |                     d¦  «        s|                     d¦  «         n|                     |d         ¦  «         |                     d¦  «        x}	r+|                     dd                     |	¦  «        › �¦  «         |                     d¦  «        x}
rHt          |
t          ¦  «        rd„ |
 	                    ¦   «         D ¦   «         }
| 
                    |
¦  «         t                               |¦  «        }|                     dd ¦  «        }d                     t          d ||g¦  «        ¦  «        x}r|                     d|› �¦  «         | 
                    d¦  «         ||fS )NzGET z	 HTTP/1.1zUpgrade: websocket)éP   i»  r6   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: ú,c                 óF   — g | ]\  }}|®d                      ||g¦  «        ‘ŒS )Nz: )r+   )Ú.0ÚkÚvs      r   ú
<listcomp>z*_get_handshake_headers.<locals>.<listcomp>€   s-   € ÐTÐTÐT©D¨A¨qÀaÀm�d—i’i  A Ñ'Ô'ÀmÀmÀmr   Úcookiez; zCookie: )Ú rI   )r9   r   ÚappendÚsplitÚ_create_sec_websocket_keyÚVERSIONr+   Ú
isinstancer!   ÚitemsÚextendr   Úfilter)r&   r#   r:   r%   r/   r   ÚhostportÚschemer0   r)   r@   Úserver_cookieÚclient_cookierH   s                 r   r*   r*   S   sD  € ð *�hÐ)Ð)Ð)Ð+?Ð@€GØˆyÐÐÝ! $Ñ'Ô'ˆˆå$ TÑ*Ô*Ð3Ð3¨TÐ3Ð3ˆØ‡{‚{�6ÑÔð ,Ø�ŠÐ1 ¨¤Ð1Ð1Ñ2Ô2Ð2Ð2à�ŠÐ* Ð*Ð*Ñ+Ô+Ð+ð —)’)˜C Ñ#Ô#�K€FˆCØ�;Š;Ð(Ñ)Ô)ð 9Ø�wÐÐ 7¨8Ô#4Ð#@Ø�NŠNÐ9 g¨hÔ&7Ð9Ð9Ñ:Ô:Ð:Ð:Ø�uŠ_ˆ_Ø�NŠNÐ8¨hÐ8Ð8Ñ9Ô9Ð9Ð9à�NŠNÐ7¨XÐ7Ð7Ñ8Ô8Ð8å
#Ñ
%Ô
%€Cð �;Š;�xÑ Ô ð 5Ð$7¸wÀxÔ?PÐ$PÐ$PØ�ŠÐ2¨SÐ2Ð2Ñ3Ô3Ð3Ð3à�hÔÐ 3Ô4ˆà�;Š;�xÑ Ô ð <Ð$;À7È8ÔCTÐ$TÐ$TØ�ŠÐ:µÐ:Ð:Ñ;Ô;Ð;à�;Š;�|Ñ$Ô$ð .Ø�ŠÐ,Ñ-Ô-Ð-Ð-à�Š�w˜|Ô,Ñ-Ô-Ð-à—{’{ >Ñ2Ô2Ð2€|ð LØ�ŠÐJ°#·(²(¸<Ñ2HÔ2HÐJÐJÑKÔKÐKà—’˜XÑ&Ô&Ð&€vð Ý�f�dÑ#Ô#ð 	UØTÐT°F·L²L±N´NÐTÑTÔTˆFØ�Š�vÑÔÐå—M’M $Ñ'Ô'€MØ—K’K ¨$Ñ/Ô/€Mà—’�6 $¨¸Ð(FÑGÔGÑHÔHÐH€vð ,Ø�ŠÐ* &Ð*Ð*Ñ+Ô+Ð+à‡N‚N�8ÑÔÐØ�Cˆ<Ðr   Úsuccess_statusesc           
      óV  — t          | ¦  «        \  }}}||vr�|                     d¦  «        }|rWddlm} d}t	          |¦  «        }|dk    r9t          |d¦  «        }	 || |	¦  «        }
||
z  }|t          |
¦  «        z  }|dk    °9nd }t          d|› d|› d	|› d	|› �||||¦  «        ‚||fS )
Nzcontent-lengthr   )Úrecvr   r   i @  zHandshake status ú z -+-+- )r	   r   Ú_socketrX   r    ÚminÚlenr   )r.   rV   r   Úresp_headersÚstatus_messageÚcontent_lenrX   Úresponse_bodyÚ	remainingÚ
chunk_sizeÚchunks              r   r,   r,   �   s  € Ý+7¸Ñ+=Ô+=Ñ(€FˆL˜.ØÐ%Ð%Ð%Ø"×&Ò&Ð'7Ñ8Ô8ˆØð 	!à%Ð%Ð%Ð%Ð%Ð%àˆMÝ˜KÑ(Ô(ˆIØ˜a’-�-Ý  ¨EÑ2Ô2�
Ø˜˜T :Ñ.Ô.�Ø Ñ&�Ø�S ™ZœZÑ'�	ð	 ˜a’-�-øð !ˆMÝ)Ød ÐdÐd¨ÐdÐdÀÐdÐdÐUbÐdÐdØØØØñ
ô 
ð 	
ð �<ÐÐr   Ú	websocketÚupgrade)re   rA   r0   c                 óN  — d }t                                ¦   «         D ]F\  }}|                      |d ¦  «        }|s dS d„ |                     d¦  «        D ¦   «         }||vr dS ŒG|r`|                      dd ¦  «        }|r |                     ¦   «         d„ |D ¦   «         vrt          d|› �¦  «         dS |                     ¦   «         }|                      dd ¦  «        }|sdS |                     ¦   «         }t          |t          ¦  «        r|                     d¦  «        }|› d	�                     d¦  «        }t          t          j        |¦  «                             ¦   «         ¦  «                             ¦   «                              ¦   «         }	t          j        |	|¦  «        rd
|fS dS )N)FNc                 óZ   — g | ](}|                      ¦   «                              ¦   «         ‘Œ)S r"   )ÚstripÚlower)rD   Úxs     r   rG   z_validate.<locals>.<listcomp>´   s*   € Ð5Ð5Ð5 1ˆQ�WŠW‰YŒY�_Š_ÑÔÐ5Ð5Ð5r   rB   zsec-websocket-protocolc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r"   )ri   )rD   Úss     r   rG   z_validate.<locals>.<listcomp>º   s    € Ð3TÐ3TÐ3TÀ!°A·G²G±I´IÐ3TÐ3TÐ3Tr   zInvalid subprotocol: zsec-websocket-acceptúutf-8z$258EAFA5-E914-47DA-95CA-C5AB0DC85B11T)Ú_HEADERS_TO_CHECKrO   r   rK   ri   r   rN   ÚstrÚencodeÚbase64encodeÚhashlibÚsha1Údigestrh   ÚhmacÚcompare_digest)
r   r0   r)   r4   rE   rF   ÚrÚresultÚvalueÚhasheds
             r   r-   r-   ®   sº  € Ø€HÝ!×'Ò'Ñ)Ô)ð ð ‰ˆˆ1Ø�KŠK˜˜4Ñ Ô ˆØð 	Ø�;�;Ø5Ð5¨¯ª°©¬Ð5Ñ5Ô5ˆØ�Aˆ:ˆ:Ø�;�;ð ð ð $Ø—;’;Ð7¸Ñ>Ô>ˆØð 	˜8Ÿ>š>Ñ+Ô+Ð3TÐ3TÀ|Ð3TÑ3TÔ3TÐTÐTÝÐ8¨,Ð8Ð8Ñ9Ô9Ð9Ø�;Ø—>’>Ñ#Ô#ˆà�[Š[Ð/°Ñ6Ô6€FØð Øˆ{Ø�\Š\‰^Œ^€Få�&�#ÑÔð (Ø—’˜wÑ'Ô'ˆàÐ8Ð8Ð8×?Ò?ÀÑHÔH€EÝ�'œ, uÑ-Ô-×4Ò4Ñ6Ô6Ñ7Ô7×=Ò=Ñ?Ô?×EÒEÑGÔG€FåÔ˜6 6Ñ*Ô*ð Ø�Xˆ~Ðàˆ{r   c                  ó’   — t          j        d¦  «        } t          | ¦  «                             d¦  «                             ¦   «         S )Né   rm   )ÚosÚurandomrq   Údecoderh   )Ú
randomnesss    r   rL   rL   Ð   s7   € Ý”˜B‘”€JÝ˜
Ñ#Ô#×*Ò*¨7Ñ3Ô3×9Ò9Ñ;Ô;Ð;r   ),Ú__doc__rr   ru   r}   Úbase64r   rq   Úhttpr   Ú
_cookiejarr   Ú_exceptionsr   r   Ú_httpr	   Ú_loggingr
   r   rZ   r   Ú__all__rM   ÚMOVED_PERMANENTLYÚFOUNDÚ	SEE_OTHERÚTEMPORARY_REDIRECTÚPERMANENT_REDIRECTr   ÚSWITCHING_PROTOCOLSÚSUCCESS_STATUSESr   r   ro   r    r   r9   r!   Útupler*   r,   rn   r-   rL   r"   r   r   ú<module>r‘      se  ððð ð& €€€Ø €€€Ø 	€	€	€	Ø .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à
LÐ
LÐ
L€ð €ð Ô ØÔØÔØÔ!ØÔ!ðÐ ð /°*Ô2PÐ1RÑRÐ àˆOÑÔ€	ð1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ð6Øð6Ø!ð6Ø),ð6Ø8;ð6àð6ð 6ð 6ð 6ð&˜Sð  Sð ð ð ð ð7Øð7Øð7Ø#&ð7Ø.1ð7Ø<@ð7à
ð7ð 7ð 7ð 7ðt 7Gð  ð  ¨eð  È5ð  ð  ð  ð  ð8 Øðð Ð ð˜Cð °%ð ð ð ð ðD< 3ð <ð <ð <ð <ð <ð <r   