o
    �õ±jõ  ã                   @   sÔ   d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	m
Z
mZmZmZ d dlmZmZmZ G dd„ deƒZedkrfg d	¢ZeD ]'Ze e¡Zeeƒ ed
e ƒ ede ¡  ƒ ee ¡ ekƒ edƒ q@dS dS )é    )Ústat)Úconnect)Ú	UniTargetÚUniProtoÚunitarget_url_params)ÚurlparseÚparse_qsÚurljoinÚ	urlencodeÚ
urlunparse)Ústr_oneÚint_oneÚbool_onec                   @   st   e Zd Zdejdddddddddfdedededefdd	„Zd
d„ Zdd„ Zdd„ Z	dd„ Z
edd„ ƒZdd„ ZdS )Ú
HTTPTargetéP   Né
   ÚdnsÚdc_ipÚdomainÚhostnamec                 C   s0   t j| ||||||||
|	|d� || _|| _d S )N)r   Ússl_ctxÚproxiesr   r   r   )r   Ú__init__ÚpathÚquery)ÚselfÚipÚportÚprotocolr   r   r   Útimeoutr   r   r   r   r   © r    ú§/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/unicomm/protocol/client/http/commons/target.pyr      s    
zHTTPTarget.__init__c                 C   s   d|   ¡ | jf S )Nz
HTTP/%s@%s)Úget_hostname_or_ipr   ©r   r    r    r!   Úto_target_string   s   zHTTPTarget.to_target_stringc                 C   sz   | j tjkr	d}n| j tjkrd}|dkr"| jdkr"d||  ¡ f S |dkr3| jdkr3d||  ¡ f S d||  ¡ | jf S )NÚhttpsÚhttpr   z%s://%sé»  z
%s://%s:%s)r   r   ÚCLIENT_SSL_TCPÚ
CLIENT_TCPr   r"   )r   Úprotor    r    r!   Úget_host   s   zHTTPTarget.get_hostc                 C   sJ   t |  ¡ | jƒ}| jd ur#t| jƒdkr#t|ƒ}|j| jd�}t|ƒ}|S )Nr   )r   )r	   r+   r   r   Úlenr   Ú_replacer   )r   ÚurlÚ
parsed_urlÚnew_parsed_urlr    r    r!   Úget_url   s   zHTTPTarget.get_urlc                 C   s   | j tjkS )N)r   r   r(   r#   r    r    r!   Úis_ssl#   s   zHTTPTarget.is_sslc                 C   s\  t | ƒ}g }|j ¡  d¡D ]}| | dd¡¡ q|d dkr&tj}d}n|d dkr2tj}d}nt	d	|d  ƒ‚|j
r@|j
}|d u rHt	d
ƒ‚d }|jdvrR|j}t | ||i ¡\}}ddddœ}	|	 t¡ |	 |¡ t|jƒ}
|
D ]}| d¡du r€d|	|< qs|	D ]}|
 |d ¡ qƒt|
dd�}t|j|j
|j|||j|j|j|j|j|j|jd�}|S )Nú+ú-Ú_r   ÚHTTPr   ÚHTTPSr'   zUnknown protocol! %szPort must be provided!)ú/Ú Né   )Údcr   ÚdcipÚproxyT)Údoseq)r   r   r   r   r   r   r   r   r   r   r   )r   ÚschemeÚupperÚsplitÚappendÚreplacer   r)   r(   Ú	Exceptionr   r   r   Úfrom_urlÚupdater   r   r   Ú
startswithÚpopr
   r   r   r   r   r   r   r   r   r   r   )Úconnection_urlÚurl_eÚschemesÚitemr   r   r   Ú	unitargetÚextraparamsÚparams_to_removeÚparsed_queryÚparamÚ	new_queryÚtargetr    r    r!   rE   &   sZ   



€ôzHTTPTarget.from_urlc                 C   s*   d}| j D ]}|d|| j | f 7 }q|S )Nz==== HTTPTarget ====
z%s: %s
)Ú__dict__)r   ÚtÚkr    r    r!   Ú__str___   s   
zHTTPTarget.__str__)Ú__name__Ú
__module__Ú__qualname__r   r)   Ústrr   r$   r+   r1   r2   ÚstaticmethodrE   rW   r    r    r    r!   r      s    4
8r   Ú__main__) zhttp://test.corp:80zhttps://test.corp:80zhttp://test.corp:443zhttps://test.corp:443zhttp://test.corp:80/zhttps://test.corp:80/zhttp://test.corp:443/zhttps://test.corp:443/zhttp://test.corp:80/pathzhttps://test.corp:80/pathzhttp://test.corp:443/pathzhttps://test.corp:443/pathzhttp://test.corp:80/path?queryzhttps://test.corp:80/path?queryzhttp://test.corp:443/path?queryz https://test.corp:443/path?queryz http://test.corp:80/path?query=1z!https://test.corp:80/path?query=1z!http://test.corp:443/path?query=1z"https://test.corp:443/path?query=1z)http://test.corp:80/path?query=1&query2=2z*https://test.corp:80/path?query=1&query2=2z*http://test.corp:443/path?query=1&query2=2z+https://test.corp:443/path?query=1&query2=2z2http://test.corp:80/path?query=1&query2=2&query3=3z3https://test.corp:80/path?query=1&query2=2&query3=3z3http://test.corp:443/path?query=1&query2=2&query3=3z4https://test.corp:443/path?query=1&query2=2&query3=3z;http://test.corp:80/path?query=1&query2=2&query3=3&query4=4z<https://test.corp:80/path?query=1&query2=2&query3=3&query4=4zHhttp+ntlm-password://test.corp:443/path?query=1&query2=2&query3=3&query4zIhttp+ntlm-password://test.corp:443/path?query=1&query2=2&query3=3&proxy=1zOriginal: %szReconstr: %sz------------------N)Úosr   Úsqlite3r   Úasysocks.unicomm.common.targetr   r   r   Úurllib.parser   r   r	   r
   r   Ú%asysocks.unicomm.utils.paramprocessorr   r   r   r   rX   Útestr.   rE   ÚresÚprintr1   r    r    r    r!   Ú<module>   s"    _#

Ö$