o
    j                     @   s\   d dl Z d dlZd dlZd dlmZmZmZmZmZ dd Z	G dd dZ
G dd dZdS )	    N)ListTupleAnyUnionDictc                 C   s&   zt |  W dS  ty   Y dS w )NTF)codecslookupLookupError)enc r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/unicomm/protocol/client/http/commons/messages.pyis_supported_encoding   s   
r   c                   @   sl   e Zd ZdZdd ZdddZdd Zd	d
 Zdd ZdddZ	e
dd Ze
dd Zdd Zdd ZdS )MockHTTPRequestzcDo NOT use this class directly! It is only used to make the code compatible with python's cookiejarc                 C   s   || _ i | _d S N)_url_headers)selfurlr   r   r   __init__   s   
zMockHTTPRequest.__init__Nc                 C      | j ||S r   )r   getr   namedefaultr   r   r   
get_header      zMockHTTPRequest.get_headerc                 C      | j dd S )N:r   r   splitr   r   r   r   get_type      zMockHTTPRequest.get_typec                 C   r   )N/   r   r    r   r   r   get_host   r"   zMockHTTPRequest.get_hostc                 C   s   | j S r   )r   r    r   r   r   get_full_url   s   zMockHTTPRequest.get_full_urlFc                 C      |   S r   )r%   )r   originr   r   r   get_origin_req_host    s   z#MockHTTPRequest.get_origin_req_hostc                 C   s   dS NFr   r    r   r   r   unverifiable#   s   zMockHTTPRequest.unverifiablec                 C   r'   r   )r!   r    r   r   r   type'   s   zMockHTTPRequest.typec                 C   s   |  |dS r*   )r   r   r   r   r   r   
has_header+      zMockHTTPRequest.has_headerc                 C   s   || j |< d S r   )r   )r   r   valuer   r   r   add_unredirected_header.   r   z'MockHTTPRequest.add_unredirected_headerr   )F)__name__
__module____qualname____doc__r   r   r!   r%   r&   r)   propertyr+   r,   r.   r1   r   r   r   r   r      s    



r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zed	ej	fd
dZ
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )HTTPResponsec                 C   s:   d | _ d | _d | _i | _d | _d | _d | _d | _d| _d S r*   )	statushttp_versionreasonheadersh11	data_iter	transportr    _HTTPResponse__all_data_consumedr    r   r   r   r   2   s   
zHTTPResponse.__init__c                    s   | S r   r   r    r   r   r   
__aenter__=   s   zHTTPResponse.__aenter__c                    s   |   I d H  d S r   )cleanup)r   exc_typeexctbr   r   r   	__aexit__@   s   zHTTPResponse.__aexit__c                    st   | j d ur)| jdu r)|   2 z3 d H W }t|tju r nt|tju r' nq6 | jd ur8| j I d H  d S d S r*   )r=   r?   r,   r<   EndOfMessageConnectionClosedr>   disconnect_if_neededr   eventr   r   r   rA   C   s   
zHTTPResponse.cleanuprhc                 C   s   t  }||_| |_| j|_| j |_| j |_i |_||_	| jD ]&}|d  }|d  }|dkr6d}||jvr@g |j|< |j| 
| q"||_|S )Nr      z
set-cookiez
Set-Cookie)r7   r   r<   status_coder8   r9   decoder:   r;   r>   appendr=   )rK   r=   r>   fullurlrespentryr   r0   r   r   r   from_h11_headerN   s$   


zHTTPResponse.from_h11_headerc                 C   s   | S r   r   r    r   r   r   infoc   s   zHTTPResponse.infoc                 C   s   | j |S r   r;   r   r-   r   r   r   
getheadersf   r/   zHTTPResponse.getheadersc                 C   r   r   rU   r   r   r   r   get_alli   r   zHTTPResponse.get_allc                 C  sN   |   2 z3 d H W }t|tju r|jV  t|tju r#d| _ d S q6 d S )NT)r=   r,   r<   DatadatarF   r?   rI   r   r   r   stream_datal   s   zHTTPResponse.stream_datac                    s*   d}|   2 z
3 d H W }||7 }q6 |S )N    )rZ   )r   rY   chunkr   r   r   readt   s   
zHTTPResponse.readc                    sx   d}d| j v r| j d D ]}d|v r|dd } nqt|du r%d}d}|  2 z
3 d H W }||7 }q+6 ||S )Nzutf-8zcontent-typezcharset=rL   Fr[   )r;   r   r   rZ   rN   )r   codecrR   rY   r\   r   r   r   textz   s   


zHTTPResponse.textc                    s   t |  I d H S r   )jsonloadsr_   r    r   r   r   r`      s   zHTTPResponse.jsonc                 C   st   d}|d| j | j| jf 7 }| jD ]&}t| j| tr,| j| D ]
}|d||f 7 }q q|d|| j| f 7 }q|S )NzHTTPResponse
zHTTP/%s %s %s
z%s: %s
)r9   r8   r:   r;   
isinstancelist)r   tkvr   r   r   __str__   s   
zHTTPResponse.__str__N)r2   r3   r4   r   r@   rE   rA   staticmethodr<   ResponserS   rT   rV   rW   rZ   r]   r_   r`   rg   r   r   r   r   r7   1   s    r7   )r<   r`   r   typingr   r   r   r   r   r   r   r7   r   r   r   r   <module>   s    #