
     f2                        d Z ddlZddlZddlZddlmZ ddlmZm	Z	m
Z
 ddlmZ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 g d
Z	 ddlT ddlmZ ddlmZ dZn3#  dZ G d de           Z! G d de           Z" G d de           Z#Y nxY w G d d          Z$de%de&fdZ'de%fdZ(de)de*de&fdZ+d Z,d ej        d!e-fd"Z.d ej        d#e-fd$Z/d ej        de)dej        fd%Z0d ej        de&fd&Z1dS )'a_  
_http.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   )WebSocketAddressExceptionWebSocketExceptionWebSocketProxyException)debugdumptrace)DEFAULT_SOCKET_OPTION	recv_linesend)HAVE_SSLssl)get_proxy_info	parse_url)
proxy_infoconnectread_headers)*)	ProxyType)ProxyTFc                       e Zd ZdS )
ProxyErrorN__name__
__module____qualname__     R/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/websocket/_http.pyr   r   -           r   r   c                       e Zd ZdS )ProxyTimeoutErrorNr   r   r   r    r#   r#   0   r!   r   r#   c                       e Zd ZdS )ProxyConnectionErrorNr   r   r   r    r%   r%   3   r!   r   r%   c                       e Zd Zd ZdS )r   c                    |                     dd           | _        | j        r|                     dd          | _        |                     dd           | _        |                     dd           | _        |                     dd          | _        |                     dd           | _        | j        d	vrt          d
          d S d| _        d | _        d | _        d| _        d S )Nhttp_proxy_hosthttp_proxy_portr   http_proxy_authhttp_no_proxy
proxy_typehttphttp_proxy_timeout)r-   socks4socks4asocks5socks5hz7Only http, socks4, socks5 proxy protocols are supported)get
proxy_host
proxy_portauthno_proxyproxy_protocolproxy_timeoutr   )selfoptionss     r    __init__zproxy_info.__init__8   s    !++&7>>? 	)%kk*;Q??DO$5t<<DI#KK>>DM")++lF"C"CD!(-A4!H!HD" +   !M     DODI DM"(Dr   N)r   r   r   r<   r   r   r    r   r   7   s#        ) ) ) ) )r   r   urlreturnc                 |   t           st          d          t          |           \  }}}}|j        dk    rd}t          j        }nM|j        dk    rd}t          j        }n3|j        dk    rd}t          j        }n|j        dk    rd}t          j        }t          j        ||j	        t          |j                  |j        r|j        d         nd |j        r|j        d	         nd |
          }	|	                    |||j                  }
|r-t          rt!          |
|j        |          }
nt          d          |
|||ffS )Nz>Python Socks is needed for SOCKS proxying but is not availabler/   Fr0   Tr1   r2   r   r   )r,   hostportusernamepasswordrdns)timeoutSSL not available.)HAVE_PYTHON_SOCKSr   r   r8   r   SOCKS4SOCKS5r   creater4   intr5   r6   r   r9   r   _ssl_socketsslopt)r=   r;   proxyhostnamerA   resource	is_securerD   r,   ws_proxysocks              r    _start_proxied_socketrT   R   sd    
 L
 
 	
 +4C..'HdHix''%

			*	*%

			)	)%

			*	*%
|!"""'*6A$"'*6A$  H HdE4GHHD ; 	;tW^X>>DD$%9:::(D(+++r   c                    |j         r|s|j        dk    rt          | ||          S t          |           \  }}}}|r||||ffS t	          ||||          \  }}	}
|st          d| d|           d }	 t          ||j        |j                  }|	rt          ||||
          }|r-t          rt          ||j        |          }nt          d          ||||ffS #  |r|                                  xY w)Nr-   zHost not found.: :rF   )r4   r8   rT   r   _get_addrinfo_listr   _open_socketsockoptrE   _tunnelr   rL   rM   close)r=   r;   rN   socketrO   port_from_urlrP   rQ   addrinfo_listneed_tunnelr6   rS   s               r    r   r   }   sN     : :5+?6+I+I$S'59993<S>>0HmXy ;-:::'9-E( ($M;  Q !OX!O!O!O!OPPPDM7?GOLL 	@4=$??D 	? ?"4BB()=>>>hx888 	JJLLLs   3A$C C1rA   rQ   c                 |   t          | ||j        |j        |j        |j                  \  }}}	 |s1t          j        | |dt
          j        t
          j                  }|dd fS |r|pd}t          j        ||dt
          j        t
          j                  }|d|fS # t
          j	        $ r}t          |          d }~ww xY w)Nr   FP   T)r   r4   r5   r6   r7   r\   getaddrinfoSOCK_STREAMSOL_TCPgaierrorr   )	rO   rA   rQ   rN   phostpportpauthr^   es	            r    rW   rW      s    (
 E5%+  	.".$6#5v~ M !%--Oe)rE
 #.ua!3V^ M !$--? + + +'***+s   2B !6B B;'B66B;c                 j   d }| D ](}|d d         \  }}}t          j         |||          }|                    |           t          D ]}	 |j        |	  |D ]}	 |j        |	  |d         }
d }|s	 |                    |
           n# t           j        $ r}|                                 t          |
d                   |_        	 t          j
        t          j        t          j        f}n(# t          $ r t          j
        t          j        f}Y nw xY w|j	        |vr||}Y d }~d }~ww xY w( n|r||S )N      r   )r\   
settimeoutr   
setsockoptr   errorr[   str	remote_iperrnoECONNREFUSEDWSAECONNREFUSEDENETUNREACHAttributeError)r^   rY   rE   erraddrinfofamilysocktypeprotorS   optsaddressro   eConnRefuseds                r    rX   rX      s   
C! $ $"*2A2,%}VXu55   ) 	# 	#DDOT""" 	# 	#DDOT"""1+ 	W%%%" ! <   

"%gaj//K*-)$LL
 & K K K$)$68I#JLLLK;l22K$  	IKs<   1BD(.D##C)(D#)"DD#DD##D(rS   rM   c                 r   |                     dd           }|s^t          j        |                     dt          j                            }t          j                             dd           |_        |                     dt          j                  t          j        k    r||                     dd           }|                     dd           }|s|r|                    ||           n4t          |d          r$|
                    t          j        j                   |                     d	d           rE|                    |d	         |                     d
d           |                     dd                      |                     dt          j                  t          j        k    r/|                     dd          sd|_        t          j        |_        n@|                     dd          |_        |                     dt          j                  |_        d|v r|                    |d                    d|v r#|d         \  }}}	|                    |||	           d|v r|                    |d                    |                    | |                     dd          |                     dd          |          S )Ncontextssl_versionSSLKEYLOGFILE	cert_reqsca_certsca_cert_path)cafilecapathload_default_certscertfilekeyfilerC   check_hostnameFTciphers
cert_chain
ecdh_curvedo_handshake_on_connectsuppress_ragged_eofs)r   r   server_hostname)r3   r   
SSLContextPROTOCOL_TLS_CLIENTosenvironkeylog_filename	CERT_NONEload_verify_locationshasattrr   PurposeSERVER_AUTHload_cert_chainr   verify_modeCERT_REQUIREDset_ciphersset_ecdh_curvewrap_socket)
rS   rM   rO   r   r   r   r   r   r   rC   s
             r    _wrap_sni_socketr      s   jjD))G (9.M3;R!S!STT
 #%*..$"G"G::k3=11S]BBZZ
D11FZZ55F D D--VF-KKKK"677 D**3;+BCCC::j$'' 	##z"

9d++

:t,,   ::k3=11S]BB6::eL
 L
B &+G""%-G%+ZZ0@$%G%GG""(**[#:K"L"LGy 12226!!*0*>'Hgx##Hgx@@@6!!""6,#7888 &

+Dd K K#ZZ(>EE 	    r   user_ssloptc                    dt           j        i}|                    |           t          j                            d          }|r;t          j                            |          r|                    dd           ||d<   n<|r:t          j                            |          r|                    dd           ||d<   |                    dd           r|d         }|                    dd          }t          | |||          } | S )Nr   WEBSOCKET_CLIENT_CA_BUNDLEr   r   r   r   T)
r   r   updater   r   r3   pathisfileisdirr   )rS   r   rO   rM   	cert_pathr   s         r    rL   rL   !  s   !23F
MM+
;<<I+GNN9%%+ OOJ--5&z+GMM)$$+ OOND119!*~zz#T** -+,ZZ 0$77ND&(NCCDKr   c                 b   t          d           d| d| d}|d| d| dz  }|r|d         r|d         }|d         r|d|d          z  }t          |                                                                                                                              d	d
          }|d| dz  }|dz  }t          d|           t          | |           	 t          |           \  }}}n.# t          $ r!}	t          t          |	                    d }	~	ww xY w|dk    rt          d|           | S )NzConnecting proxy...zCONNECT rV   z HTTP/1.1
zHost: z
r   r   
 zProxy-Authorization: Basic zrequest header   z!failed CONNECT via proxy status: )r   base64encodeencodestripdecodereplacer	   r   r   	Exceptionr   rp   )
rS   r@   rA   r6   connect_headerauth_strencoded_strstatus_ri   s
             r    rZ   rZ   <  s|   	
   :::t:::N0t00d0000N  JQ J77 	&DG%H"8??#4#455;;==DDFFNNtUWXXIIIIIfN	>***~.#D))11 . . .%c!ff---. }}%&R&&R&RSSSKs   C) )
D3DDc                    d }d }i }t          d           	 t          |           }|                    d                                          }|snt          |           |sG|                    dd          }t          |d                   }t          |          dk    r|d         }n|                    dd          }t          |          dk    rt          d          |\  }}|                                d	k    rF|	                    d	          r1|	                    d	          d
z   |                                z   |d	<   n)|                                ||                                <   Xt          d           |||fS )Nz--- response header ---Tzutf-8    r   rV   zInvalid headerz
set-cookiez; z-----------------------)
r
   r   r   r   splitrK   lenr   lowerr3   )	rS   r   status_messageheaderslinestatus_infokvkeyvalues	            r    r   r   X  sr   FNG	
#$$$5{{7##))++ 	d 	5**S!,,KQ((F;!##!,QC##B2ww!||()9:::JCyy{{l**w{{</H/H*(/L(A(AD(H5;;==(X%%',{{}}		$'5* 

#$$$7N**r   )2__doc__rr   r   r\   base64r   r   _exceptionsr   r   r   _loggingr   r	   r
   _socketr   r   r   _ssl_compatr   r   _urlr   r   __all__python_socks._errorspython_socks._typesr   python_socks.syncr   rG   r   r   r#   r%   r   rp   tuplerT   r   rK   boolrW   rX   dictr   rL   rZ   r   r   r   r    <module>r      s   $  				  . . . . . .         
 ) ( ( ( ( ( ( ( ( ( ; ; ; ; ; ; ; ; ; ; & & & & & & & & + + + + + + + +
3
3
3&&&&------''''''
    Y       I       y     ) ) ) ) ) ) ) )6(,s (,u (, (, (, (,V" " " " "J+s +t +u + + + +@( ( (V16= 1$ 1 1 1 1hfm $    6&- S 6=    8+v} + + + + + + +s   A .B