
     f                        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 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                       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       W/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/websocket/_handshake.py__init__zhandshake_response.__init__1   s<    &gkk,//00000    N)__name__
__module____qualname__intdictr    r   r   r   r   0   s6        1s 1T 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   8   s     *(C4QQLGSW%%Jz	:&&&$T**LFD,,,!&$555!$W[[-H-HIIGX = !;<<<fdH555r   c                     d| v rd|  dS | S )N:[]r"   )r$   s    r   _pack_hostnamer9   K   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TDAqamdiiA''mmmr   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*   R   sD    *h)))+?@Gy!$''$T**33T33{{6 ,1112222***+++ ))C##KFC;;()) 9w78#4#@NN9gh&799::::u__NN8h889999NN7X77888
#
%
%C ;;x   5$7wx?P$P$P2S223333h 34;;x   <$;78CT$T$T:::;;;;;|$$ .,----w|,---{{>222| LJ#((<2H2HJJKKKX&&&v fd## 	UTTFLLNNTTTFvMM$''MKK$//M6$(FGGHHHv ,*&**+++NN8C<r   success_statusesc           
          t          |           \  }}}||vr[|                    d          }|r#|                     t          |                    }nd }t	          d| d| d| d| ||||          ||fS )Nzcontent-lengthzHandshake status  z -+-+- )r	   r   recvr    r   )r.   rV   r   resp_headersstatus_messagecontent_lenresponse_bodys          r   r,   r,      s    +7+=+=(FL.%%%"&&'788 	! IIK   MM !M)dddddddUbdd
 
 	
 <r   	websocketupgrade)r_   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51QWWYY__555r   rB   zsec-websocket-protocolc                 6    g | ]}|                                 S r"   )rc   )rD   ss     r   rG   z_validate.<locals>.<listcomp>   s     3T3T3T!AGGII3T3T3Tr   zInvalid subprotocol: zsec-websocket-acceptutf-8z$258EAFA5-E914-47DA-95CA-C5AB0DC85B11T)_HEADERS_TO_CHECKrO   r   rK   rc   r   rN   strencodebase64encodehashlibsha1digestrb   hmaccompare_digest)
r   r0   r)   r4   rE   rF   rresultvaluehasheds
             r   r-   r-      s   H!''))  1KK4   	;;55555A::;;   $;;7>> 	8>>++3T3T|3T3T3TTT8,88999;>>##[[/66F {\\^^F&# (w''888??HHE',u--446677==??EEGGF66** X~{r   c                      t          j        d          } t          |                               d                                          S )N   rg   )osurandomrk   decoderb   )
randomnesss    r   rL   rL      s7    BJ
##**73399;;;r   ),__doc__rl   ro   rw   base64r   rk   httpr   
_cookiejarr   _exceptionsr   r   _httpr	   _loggingr
   r   _socketr   __all__rM   MOVED_PERMANENTLYFOUND	SEE_OTHERTEMPORARY_REDIRECTPERMANENT_REDIRECTr   SWITCHING_PROTOCOLSSUCCESS_STATUSESr   r   ri   r    r   r9   r!   tupler*   r,   rh   r-   rL   r"   r   r   <module>r      se   $   				 . . . . . .       ' ' ' ' ' ' H H H H H H H H       ! ! ! ! ! ! ! !      
L
L
L   !!  /*2P1RR O	1 1 1 1 1 1 1 166!6),68;66 6 6 6&S S    777#&7.17<@7
7 7 7 7t 7G    e  5        *   C %    D<3 < < < < < <r   