§
    JŠtj¥  ã                  óž   — d dl mZ d dlZd dlZddlmZmZ ddlmZm	Z	m
Z
 ddlmZmZ ddlmZmZ ddlmZmZ g d	¢Zdd„Zdd„Zdd„Zdd„ZdS )é    )ÚannotationsNé   )ÚHeadersÚMultipleValuesError)ÚInvalidHeaderÚInvalidHeaderValueÚInvalidUpgrade)Úparse_connectionÚparse_upgrade)ÚConnectionOptionÚUpgradeProtocol)Ú
accept_keyÚgenerate_key)Úbuild_requestÚcheck_requestÚbuild_responseÚcheck_responseÚheadersr   ÚreturnÚstrc                óJ   — t          ¦   «         }d| d<   d| d<   || d<   d| d<   |S )zï
    Build a handshake request to send to the server.

    Update request headers passed in argument.

    Args:
        headers: Handshake request headers.

    Returns:
        ``key`` that must be passed to :func:`check_response`.

    Ú	websocketÚUpgradeÚ
ConnectionúSec-WebSocket-KeyÚ13úSec-WebSocket-Version)r   ©r   Úkeys     úY/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/websockets/legacy/handshake.pyr   r      s<   € õ ‰.Œ.€CØ$€GˆIÑØ%€GˆLÑØ#&€GÐÑ Ø'+€GÐ#Ñ$Ø€Jó    c                ó  — t          d„ |                      d¦  «        D ¦   «         g ¦  «        }t          d„ |D ¦   «         ¦  «        s#t          dd                     |¦  «        ¦  «        ‚t          d„ |                      d¦  «        D ¦   «         g ¦  «        }t          |¦  «        dk    r|d                              ¦   «         d	k    s#t          dd                     |¦  «        ¦  «        ‚	 | d
         }n@# t          $ r}t          d
¦  «        |‚d}~wt          $ r}t          d
d¦  «        |‚d}~ww xY w	 t          j        |                     ¦   «         d¬¦  «        }n(# t          j        $ r}t          d
|¦  «        |‚d}~ww xY wt          |¦  «        dk    rt          d
|¦  «        ‚	 | d         }n@# t          $ r}t          d¦  «        |‚d}~wt          $ r}t          dd¦  «        |‚d}~ww xY w|dk    rt          d|¦  «        ‚|S )ab  
    Check a handshake request received from the client.

    This function doesn't verify that the request is an HTTP/1.1 or higher GET
    request and doesn't perform ``Host`` and ``Origin`` checks. These controls
    are usually performed earlier in the HTTP request handling code. They're
    the responsibility of the caller.

    Args:
        headers: Handshake request headers.

    Returns:
        ``key`` that must be passed to :func:`build_response`.

    Raises:
        InvalidHandshake: If the handshake request is invalid.
            Then, the server must return a 400 Bad Request error.

    c                ó,   — g | ]}t          |¦  «        ‘ŒS © ©r
   ©Ú.0Úvalues     r    ú
<listcomp>z!check_request.<locals>.<listcomp>:   ó!   € ÐLÐLÐL UÕ	˜%Ñ	 Ô	 ÐLÐLÐLr!   r   c              3  óF   K  — | ]}|                      ¦   «         d k    V — ŒdS ©ÚupgradeN©Úlowerr&   s     r    ú	<genexpr>z check_request.<locals>.<genexpr>=   ó/   è è € ÐBÐB¨eˆu�{Š{‰}Œ} 	Ò)ÐBÐBÐBÐBÐBÐBr!   ú, c                ó,   — g | ]}t          |¦  «        ‘ŒS r$   ©r   r&   s     r    r)   z!check_request.<locals>.<listcomp>A   ó    € ÐFÐFÐF %��uÑ	Ô	ÐFÐFÐFr!   r   é   r   r   r   Númultiple valuesT)Úvalidateé   r   r   )ÚsumÚget_allÚanyr	   ÚjoinÚlenr/   ÚKeyErrorr   r   Úbase64Ú	b64decodeÚencodeÚbinasciiÚErrorr   )r   Ú
connectionr-   Ús_w_keyÚexcÚraw_keyÚs_w_versions          r    r   r   %   sm  € õ( *-ØLÐL¨g¯oªo¸lÑ.KÔ.KÐLÑLÔLÈbñ*ô *€Jõ ÐBÐB°zÐBÑBÔBÑBÔBð BÝ˜\¨4¯9ª9°ZÑ+@Ô+@ÑAÔAÐAå%(ØFÐF¨7¯?ª?¸9Ñ+EÔ+EÐFÑFÔFÈñ&ô &€Gõ �‰LŒL˜AÒÐ '¨!¤*×"2Ò"2Ñ"4Ô"4¸Ò"CÐ"CÝ˜Y¨¯	ª	°'Ñ(:Ô(:Ñ;Ô;Ð;ðMØÐ-Ô.ˆˆøÝð :ð :ð :ÝÐ/Ñ0Ô0°cÐ9øøøøÝð Mð Mð MÝÐ/Ð1BÑCÔCÈÐLøøøøðMøøøðHÝÔ" 7§>¢>Ñ#3Ô#3¸dÐCÑCÔCˆˆøÝŒ>ð Hð Hð HÝ Ð!4°gÑ>Ô>ÀCÐGøøøøðHøøøå
ˆ7�|„|�rÒÐÝ Ð!4°gÑ>Ô>Ð>ðQØÐ5Ô6ˆˆøÝð >ð >ð >ÝÐ3Ñ4Ô4¸#Ð=øøøøÝð Qð Qð QÝÐ3Ð5FÑGÔGÈSÐPøøøøðQøøøð �dÒÐÝ Ð!8¸+ÑFÔFÐFà€Ns`   Ã,C5 Ã5
D2Ã?DÄD2ÄD-Ä-D2Ä6(E ÅFÅ.E?Å?FÆ+F4 Æ4
G1Æ>GÇG1ÇG,Ç,G1r   ÚNonec                ó>   — d| d<   d| d<   t          |¦  «        | d<   dS )zÕ
    Build a handshake response to send to the client.

    Update response headers passed in argument.

    Args:
        headers: Handshake response headers.
        key: Returned by :func:`check_request`.

    r   r   r   úSec-WebSocket-AcceptN)Úacceptr   s     r    r   r   e   s/   € ð %€GˆIÑØ%€GˆLÑÝ&,¨S¡k¤k€GÐ"Ñ#Ð#Ð#r!   c                ó´  — t          d„ |                      d¦  «        D ¦   «         g ¦  «        }t          d„ |D ¦   «         ¦  «        s#t          dd                     |¦  «        ¦  «        ‚t          d„ |                      d¦  «        D ¦   «         g ¦  «        }t          |¦  «        dk    r|d                              ¦   «         d	k    s#t          dd
                     |¦  «        ¦  «        ‚	 | d         }n@# t          $ r}t          d¦  «        |‚d}~wt          $ r}t          dd¦  «        |‚d}~ww xY w|t          |¦  «        k    rt          d|¦  «        ‚dS )aŸ  
    Check a handshake response received from the server.

    This function doesn't verify that the response is an HTTP/1.1 or higher
    response with a 101 status code. These controls are the responsibility of
    the caller.

    Args:
        headers: Handshake response headers.
        key: Returned by :func:`build_request`.

    Raises:
        InvalidHandshake: If the handshake response is invalid.

    c                ó,   — g | ]}t          |¦  «        ‘ŒS r$   r%   r&   s     r    r)   z"check_response.<locals>.<listcomp>†   r*   r!   r   c              3  óF   K  — | ]}|                      ¦   «         d k    V — ŒdS r,   r.   r&   s     r    r0   z!check_response.<locals>.<genexpr>‰   r1   r!   ú c                ó,   — g | ]}t          |¦  «        ‘ŒS r$   r4   r&   s     r    r)   z"check_response.<locals>.<listcomp>�   r5   r!   r   r6   r   r   r2   rL   Nr7   )r:   r;   r<   r	   r=   r>   r/   r?   r   r   rM   r   )r   r   rE   r-   Ú
s_w_acceptrG   s         r    r   r   u   s„  € õ  *-ØLÐL¨g¯oªo¸lÑ.KÔ.KÐLÑLÔLÈbñ*ô *€Jõ ÐBÐB°zÐBÑBÔBÑBÔBð AÝ˜\¨3¯8ª8°JÑ+?Ô+?Ñ@Ô@Ð@å%(ØFÐF¨7¯?ª?¸9Ñ+EÔ+EÐFÑFÔFÈñ&ô &€Gõ �‰LŒL˜AÒÐ '¨!¤*×"2Ò"2Ñ"4Ô"4¸Ò"CÐ"CÝ˜Y¨¯	ª	°'Ñ(:Ô(:Ñ;Ô;Ð;ðPØÐ3Ô4ˆ
ˆ
øÝð =ð =ð =ÝÐ2Ñ3Ô3¸Ð<øøøøÝð Pð Pð PÝÐ2Ð4EÑFÔFÈCÐOøøøøðPøøøð •V˜C‘[”[Ò Ð Ý Ð!7¸ÑDÔDÐDð !Ð s$   Ã,C5 Ã5
D2Ã?DÄD2ÄD-Ä-D2)r   r   r   r   )r   r   r   r   r   rJ   )Ú
__future__r   r@   rC   Údatastructuresr   r   Ú
exceptionsr   r   r	   r   r
   r   Útypingr   r   Úutilsr   rM   r   Ú__all__r   r   r   r   r$   r!   r    ú<module>rZ      s  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€à 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ð QÐ
PÐ
P€ðð ð ð ð*=ð =ð =ð =ð@2ð 2ð 2ð 2ð )Eð )Eð )Eð )Eð )Eð )Er!   