o
    ¡ØÆhƒ  ã                   @   sþ   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
d„ZddgZded	efdd„Zded	efdd„Zdeded	efdd„Zdedee d	efdd„Z		 			d!dededee dedee dee ded	efd d„ZdS )"é    N)ÚOptional)ÚunquoteÚurlparseé   )ÚWebSocketProxyExceptionÚ	parse_urlÚget_proxy_infoÚurlÚreturnc                 C   s¾   d| vrt dƒ‚|  dd¡\}} t| dd�}|jr|j}nt dƒ‚d}|jr)|j}d}|d	kr4|s3d
}n|dkr?d}|s>d}nt d| ƒ‚|jrL|j}nd}|jrY|d|j› �7 }||||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ÚwséP   ÚwssTi»  zscheme %s is invalidú/Ú?)Ú
ValueErrorÚsplitr   ÚhostnameÚportÚpathÚquery)r	   r   Úparsedr   r   Ú	is_secureÚresource© r   ú[/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/websocket/_url.pyr      s6   
€€Ú	localhostz	127.0.0.1Úaddrc                 C   s(   zt  | ¡ W dS  t jy   Y dS w )NFT)ÚsocketÚ	inet_atonÚerror)r   r   r   r   Ú_is_ip_addressO   s   ýÿr#   r   c                 C   sL   z|   d¡\}}t|ƒodt|ƒ  kodk W S   W S  ty%   Y dS w )Nr   r   é    F)r   r#   Úintr   )r   r   Únetmaskr   r   r   Ú_is_subnet_addressX   s   (ÿr'   ÚipÚnetc                 C   sZ   t  dt | ¡¡d }| d¡\}}t  dt |¡¡d }ddt|ƒ > d@ }||@ |kS )Nz!Ir   r   l   ÿÿ r$   )ÚstructÚunpackr    r!   r   r%   )r(   r)   ÚipaddrÚnetaddrr&   r   r   r   Ú_is_address_in_network`   s
   r.   Úno_proxyc                    s˜   |st j dt j dd¡¡ dd¡ }r| d¡}|st}d|v r#dS ˆ |v r)dS tˆ ƒr8t‡ fdd	„|D ƒƒS d
d	„ |D ƒD ]
}ˆ  |¡rI dS q?dS )Nr/   ÚNO_PROXYÚ Ú ú,Ú*Tc                    s   g | ]}t |ƒrtˆ |ƒ‘qS r   )r'   r.   )Ú.0Úsubnet©r   r   r   Ú
<listcomp>x   s    ýÿz%_is_no_proxy_host.<locals>.<listcomp>c                 S   s   g | ]	}|  d ¡r|‘qS )Ú.)Ú
startswith)r5   Údomainr   r   r   r8   ~   s    F)	ÚosÚenvironÚgetÚreplacer   ÚDEFAULT_NO_PROXY_HOSTr#   ÚanyÚendswith)r   r/   Úvr;   r   r7   r   Ú_is_no_proxy_hosti   s,   ÿ

þÿ
ÿrD   r   r   Ú
proxy_hostÚ
proxy_portÚ
proxy_authÚ
proxy_typec                 C   sœ   t | |ƒrdS |r|stdƒ‚|}|}|||fS |rdnd}	tj |	tj |	 ¡ d¡¡ dd¡}
|
rLt|
ƒ}|jrCt	|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_proxyr1   r2   N)rD   r   r<   r=   r>   Úupperr?   r   Úusernamer   Úpasswordr   r   )r   r   rE   rF   rG   r/   rH   r   ÚauthÚenv_keyÚvalueÚproxyr   r   r   r   „   s(   
#
ÿÿý)Nr   NNr   )r<   r    r*   Útypingr   Úurllib.parser   r   Ú_exceptionsr   Ú__all__ÚstrÚtupler   r@   Úboolr#   r'   r.   ÚlistrD   r%   r   r   r   r   r   Ú<module>   sH    .		ùÿþýüûúùø