
    tnii                        d dl m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mZ ddlmZ ddlmZmZ g d	Zej         G d
 d                      ZddZddZefddZdS )    )annotationsN   )Headers)InvalidProxy)build_authorization_basic
build_host)
USER_AGENT)DELIMSWebSocketURI)	get_proxyparse_proxyProxyc                  f    e Zd ZU dZded<   ded<   ded<   dZded	<   dZded
<   edd            ZdS )r   a  
    Proxy address.

    Attributes:
        scheme: ``"socks5h"``, ``"socks5"``, ``"socks4a"``, ``"socks4"``,
            ``"https"``, or ``"http"``.
        host: Normalized to lower case.
        port: Always set even if it's the default.
        username: Available when the proxy address contains `User Information`_.
        password: Available when the proxy address contains `User Information`_.

    .. _User Information: https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.1

    strschemehostintportN
str | Noneusernamepasswordreturntuple[str, str] | Nonec                B    | j         d S | j        J | j         | j        fS )N)r   r   )selfs    M/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/websockets/proxy.py	user_infozProxy.user_info(   s,    = 4}(((t}--    )r   r   )	__name__
__module____qualname____doc____annotations__r   r   propertyr    r   r   r   r      s}           KKKIIIIIIHH. . . X. . .r   r   proxyr   r   c                B   t           j                            |           }|j        dvrt	          | d|j         d          |j        t	          | d          |j        dvrt	          | d          |j        dk    rt	          | d	          |j        dk    rt	          | d
          |j        }|j        }|j	        p|j        dk    rdnd}|j
        }|j        }||t	          | d          	 |                     d           n# t          $ r| |                    d                                          }|P|J t           j                            |t                     }t           j                            |t                     }Y nw xY wt#          |||||          S )z
    Parse and validate a proxy.

    Args:
        proxy: proxy.

    Returns:
        Parsed proxy.

    Raises:
        InvalidProxy: If ``proxy`` isn't a valid proxy.

    )socks5hsocks5socks4asocks4httpshttpzscheme z isn't supportedNzhostname isn't provided) /zpath is meaninglessr.   zquery is meaninglesszfragment is meaninglessr,   i  P   z"username provided without passwordasciiidna)safe)urllibparseurlparser   r   hostnamepathqueryfragmentr   r   r   encodeUnicodeEncodeErrordecodequoter
   r   )r&   parsedr   r   r   r   r   s          r   r   r   0   s    \""5))F}WWW5"KFM"K"K"KLLL5";<<<{)##5"7888|r5"8999"5";<<<]F?D;C&-7":":33DHH  05"FGGG	AW A A A {{6""))++'''|))()@@H|))()@@HA tXx888s   /D BF
Furir   r   c                R   t           j                            | j         d| j                   rdS t           j                                        }| j        rg d}ng d}|D ]E}|                    |          }|,|dk    r"|                    d          rd|dd         z   }|c S FdS )	zU
    Return the proxy to use for connecting to the given WebSocket URI, if any.

    :N)wsssocksr,   )wsrD   r,   r-   rD   zhttp://z
socks5h://   )	r4   requestproxy_bypassr   r   
getproxiessecureget
startswith)r@   proxiesschemesr   r&   s        r   r   r   b   s    
 ~""ch#;#;#;#;<< t n''))G
z 3+++222  F##  U%5%5i%@%@ $uQRRy0LLL 
 tr   ws_uriuser_agent_headerbytesc                j   t          |j        |j        |j        d          }t	                      }t          |j        |j        |j                  |d<   |||d<   | j        &| j        J t          | j        | j                  |d<   d| d                                |	                                z   S )NT)always_include_portHostz
User-AgentzProxy-AuthorizationzCONNECT z HTTP/1.1
)
r   r   r   rJ   r   r   r   r   r;   	serialize)r&   rO   rP   r   headerss        r   prepare_connect_requestrW      s    
 fk6;SWXXXDiiG fk6=IIGFO$ 1~!~))))BNEN*
 *
%& *d)))0022W5F5F5H5HHHr   )r&   r   r   r   )r@   r   r   r   )r&   r   rO   r   rP   r   r   rQ   )
__future__r   dataclassesurllib.parser4   urllib.requestdatastructuresr   
exceptionsr   rV   r   r   http11r	   r@   r
   r   __all__	dataclassr   r   r   rW   r%   r   r   <module>ra      s?   " " " " " "             # # # # # # $ $ $ $ $ $ : : : : : : : :       % % % % % % % % 0
/
/ . . . . . . . .</9 /9 /9 /9d! ! ! !N %/I I I I I I Ir   