o
    ͷ6i                     @   s   d dl mZ d dlmZmZmZmZ d dlZddlm	Z	 ddl
mZmZ ddlmZmZmZ ddlmZ d	d
lmZmZmZ eejejejejejejf ZeeZG dd deZ dS )    )
SSLContext)AsyncIteratorListTupleUnionN   )AsyncSocketStream)ProtocolErrormap_exceptions)URLHeadersTimeoutDict)
get_logger   )AsyncByteStreamAsyncHTTPTransportConnectionStatec                   @   sJ  e Zd ZdZ	d'dedefddZd(dd	Z			d)d
ede	de
dededeeeeeeeef  ef fddZd'dededdfddZd
ede	de
deddf
ddZdededdfddZdededdfddZdedeeeeeeeef  f fddZdedee fddZdedefdd Zd(d!d"Zd(d#d$Zdefd%d&ZdS )*AsyncHTTP11Connectioni   Nsocketssl_contextc                 C   s6   || _ |d u r
t n|| _tjtjd| _tj| _	d S )N)our_role)
r   r   r   h11
ConnectionCLIENT	h11_stater   ACTIVEstate)selfr   r    r   [/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/httpcore/_async/http11.py__init__   s   zAsyncHTTP11Connection.__init__returnc                 C   s   | j tjkrtj| _ d S d S N)r   r   IDLEREADYr   r   r   r   mark_as_ready%   s   z#AsyncHTTP11Connection.mark_as_readymethodurlheadersstreamtimeoutc           	         s   |d u rg n|}|d u rt  n|}|d u ri n|}tj| _| ||||I d H  | ||I d H  | |I d H \}}}}t | || jd}|||||fS )N)	aiteratoraclose_func)	r   r   r   r   _send_request_send_request_body_receive_response_receive_response_data_response_closed)	r   r'   r(   r)   r*   r+   http_versionstatus_codereason_phraser   r   r   request)   s$   zAsyncHTTP11Connection.requesthostnamec                    s0   |d u ri n|}| j || j|I d H | _ d S r"   )r   	start_tlsr   )r   r7   r+   r   r   r   r8   E   s   zAsyncHTTP11Connection.start_tlsc           
         sD   t d||| |\}}}}tj|||d}	| |	|I dH  dS )z4
        Send the request line and headers.
        z(send_request method=%r url=%r headers=%s)r'   targetr)   N)loggertracer   Request_send_event)
r   r'   r(   r)   r+   _scheme_host_portr9   eventr   r   r   r.   I   s
   z#AsyncHTTP11Connection._send_requestc                    sb   |2 z3 dH W }t dt| tj|d}| ||I dH  q6 t }| ||I dH  dS )z(
        Send the request body.
        Nzsend_data=Data(<%d bytes>))data)r:   r;   lenr   Datar=   EndOfMessage)r   r*   r+   chunkrA   r   r   r   r/   T   s   z(AsyncHTTP11Connection._send_request_bodyrA   c                    s&   | j |}| j||I dH  dS )zs
        Send a single `h11` event to the network, waiting for the data to
        drain before returning.
        N)r   sendr   write)r   rA   r+   bytes_to_sendr   r   r   r=   d   s   z!AsyncHTTP11Connection._send_eventc                    s@   	 |  |I dH }t|tjrnqd|j }||j|j|jfS )zH
        Read the response status and headers from the network.
        TNs   HTTP/)_receive_event
isinstancer   Responser3   r4   reasonr)   )r   r+   rA   r3   r   r   r   r0   l   s   
z'AsyncHTTP11Connection._receive_responsec                 C  sd   	 |  |I dH }t|tjr tdt|j t|jV  nt|tj	tj
fr1td| dS q)z:
        Read the response data from the network.
        TNzreceive_event=Data(<%d bytes>)zreceive_event=%r)rJ   rK   r   rD   r:   r;   rC   rB   bytesrE   PAUSED)r   r+   rA   r   r   r   r1   y   s   z,AsyncHTTP11Connection._receive_response_datac                    s   	 t tjti | j }W d   n1 sw   Y  |tju r5| j| j	|I dH }| j
| n
|tjus<J 	 |S q)zZ
        Read a single `h11` event, reading more data from the network if needed.
        TN)r
   r   RemoteProtocolErrorr	   r   
next_event	NEED_DATAr   readREAD_NUM_BYTESreceive_data)r   r+   rA   rB   r   r   r   rJ      s   
z$AsyncHTTP11Connection._receive_eventc                    s\   t d| jj| jj | jjtju r%| jjtju r%| j  tj	| _
d S |  I d H  d S )Nz+response_closed our_state=%r their_state=%r)r:   r;   r   	our_statetheir_stater   DONEstart_next_cycler   r#   r   acloser%   r   r   r   r2      s   
z&AsyncHTTP11Connection._response_closedc                    sP   | j tjkr&tj| _ | jjtju rt }| j| | j	
 I d H  d S d S r"   )r   r   CLOSEDr   rV   r   
MUST_CLOSEConnectionClosedrG   r   rZ   )r   rA   r   r   r   rZ      s   zAsyncHTTP11Connection.aclosec                 C   s
   | j  S r"   )r   is_connection_droppedr%   r   r   r   r^      s   
z+AsyncHTTP11Connection.is_connection_droppedr"   )r!   N)NNN)__name__
__module____qualname__rT   r   r   r    r&   rN   r   r   r   r   r   intr   r6   r8   r.   r/   H11Eventr=   r0   r   r1   rJ   r2   rZ   boolr^   r   r   r   r   r      sv    










r   )!sslr   typingr   r   r   r   r   _backends.autor   _exceptionsr	   r
   _typesr   r   r   _utilsr   baser   r   r   r<   rL   InformationalResponserD   rE   r]   rc   r_   r:   r   r   r   r   r   <module>   s&    	