
     f                        d dl Z d dlZd dlZd dlmZ d dlmZmZ ddlm	Z	 	 ddgZ
ded	efd
ZddgZded	efdZded	efdZdeded	efdZdedee         d	efdZ	 	 	 	 	 ddededee         dedee         dee         ded	efdZdS )    N)Optional)unquoteurlparse   )WebSocketProxyException	parse_urlget_proxy_infourlreturnc                    d| vrt          d          |                     dd          \  }} t          | d          }|j        r|j        }nt          d          d}|j        r|j        }d}|d	k    r|sd
}n|dk    rd}|sd}nt          d|z            |j        r|j        }nd}|j        r|d|j         z  }||||fS )z
    parse url and the result is tuple of
    (hostname, port, resource path and the flag of secure mode)

    Parameters
    ----------
    url: str
        url string.
    :zurl is invalidr   http)schemezhostname is invalidr   FwsP   wssTi  zscheme %s is invalid/?)
ValueErrorsplitr   hostnameportpathquery)r
   r   parsedr   r   	is_secureresources          Q/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/websocket/_url.pyr   r      s    #~~)***))C##KFCc&)))F 0?.///D{ {I~~ 	D	5	 	D/&8999{ ;| '&&&&T8Y..    	localhostz	127.0.0.1addrc                 \    	 t          j        |            dS # t           j        $ r Y dS w xY w)NTF)socket	inet_atonerror)r!   s    r   _is_ip_addressr&   O   sE     t <   uus    ++r   c                     	 |                      d          \  }}t          |          odt          |          cxk    odk     nc S # t          $ r Y dS w xY w)Nr   r       F)r   r&   intr   )r   r!   netmasks      r   _is_subnet_addressr+   X   ss     s++gd##>S\\(>(>(>(>B(>(>(>(>>   uus   AA 
AAipnetc                 (   t          j        dt          j        |                     d         }|                    d          \  }}t          j        dt          j        |                    d         }ddt          |          z
  z  dz  }||z  |k    S )Nz!Ir   r   l    r(   )structunpackr#   r$   r   r)   )r,   r-   ipaddrnetaddrr*   s        r   _is_address_in_networkr3   `   s    -f&6r&:&:;;A>Fyy~~GW=v'7'@'@AA!DGb3w<</0J>GGw&&r   no_proxyc                     |sit           j                            dt           j                            dd                                        dd          x}r|                    d          }|st
          }d|v rdS  |v rdS t                     rt           fd|D                       S d	 |D             D ]}                     |          r dS d
S )Nr4   NO_PROXY  ,*Tc                 N    g | ]!}t          |          t          |          "S  )r+   r3   ).0subnetr   s     r   
<listcomp>z%_is_no_proxy_host.<locals>.<listcomp>x   sA       %f--&x88  r   c                 <    g | ]}|                     d           |S ).)
startswith)r=   domains     r   r?   z%_is_no_proxy_host.<locals>.<listcomp>~   s+    KKKfF4E4Ec4J4JK6KKKr   F)	osenvirongetreplacer   DEFAULT_NO_PROXY_HOSTr&   anyendswith)r   r4   vrC   s   `   r   _is_no_proxy_hostrL   i   s    $
z2:>>*b+I+IJJRR
 
 
1 	$ wws||H )(
ht8th 
   &  
 
 	
 LKKKK  V$$ 	44	5r   r   r   
proxy_host
proxy_port
proxy_auth
proxy_typec                    t          | |          rdS |r|st          d          |}|}|||fS |rdnd}	t          j                            |	t          j                            |	                                d                                        dd          }
|
rOt          |
          }|j        r(t          |j                  t          |j
                  fnd}|j        |j        |fS dS )a  
    Try to retrieve proxy host and port from environment
    if not provided in options.
    Result is (proxy_host, proxy_port, proxy_auth).
    proxy_auth is tuple of username and password
    of proxy authentication information.

    Parameters
    ----------
    hostname: str
        Websocket server name.
    is_secure: bool
        Is the connection secure? (wss) looks for "https_proxy" in env
        instead of "http_proxy"
    proxy_host: str
        http proxy host name.
    proxy_port: str or int
        http proxy port.
    no_proxy: list
        Whitelisted host names that don't use the proxy.
    proxy_auth: tuple
        HTTP proxy auth information. Tuple of username and password. Default is None.
    proxy_type: str
        Specify the proxy protocol (http, socks4, socks4a, socks5, socks5h). Default is "http".
        Use socks4a or socks5h if you want to send DNS requests through the proxy.
    )Nr   Nz+Cannot use port 0 when proxy_host specifiedhttps_proxy
http_proxyr7   r8   N)rL   r   rD   rE   rF   upperrG   r   usernamer   passwordr   r   )r   r   rM   rN   rO   r4   rP   r   authenv_keyvalueproxys               r   r	   r	      s   F 8,, } & 	Y)*WXXX4%%(:mmlGJNN7BJNN7==??B$G$GHHPPR E  0 ~WU^$$gen&=&=>> 	
 ~uz4//=r   )Nr   NNr   )rD   r#   r/   typingr   urllib.parser   r   _exceptionsr   __all__strtupler   rH   boolr&   r+   r3   listrL   r)   r	   r<   r   r   <module>rc      s   				         * * * * * * * * 0 0 0 0 0 0& (
)+/3 +/5 +/ +/ +/ +/\ %k2           's ' ' ' ' ' ' x~ $    < !%"&#: ::: : 	:
 : tn: : : : : : : :r   