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    #