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)IteratorListTupleUnionN   )SyncSocketStream)ProtocolErrormap_exceptions)URLHeadersTimeoutDict)
get_logger   )SyncByteStreamSyncHTTPTransport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 )*SyncHTTP11Connectioni   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   Z/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/httpcore/_sync/http11.py__init__   s   zSyncHTTP11Connection.__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"SyncHTTP11Connection.mark_as_readymethodurlheadersstreamtimeoutc           	      C   s   |d u rg n|}|d u rt  n|}|d u ri n|}tj| _| |||| | || | |\}}}}t | || jd}|||||fS )N)iterator
close_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SyncHTTP11Connection.requesthostnamec                 C   s(   |d u ri n|}| j || j|| _ d S r"   )r   	start_tlsr   )r   r7   r+   r   r   r   r8   E   s   zSyncHTTP11Connection.start_tlsc           
      C   s<   t d||| |\}}}}tj|||d}	| |	| 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"SyncHTTP11Connection._send_requestc                 C   sJ   |D ]}t dt| tj|d}| || qt }| || dS )z(
        Send the request body.
        zsend_data=Data(<%d bytes>))dataN)r:   r;   lenr   Datar=   EndOfMessage)r   r*   r+   chunkrA   r   r   r   r/   T   s   z'SyncHTTP11Connection._send_request_bodyrA   c                 C   s   | j |}| j|| 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 SyncHTTP11Connection._send_eventc                 C   s8   	 |  |}t|tjrnqd|j }||j|j|jfS )zH
        Read the response status and headers from the network.
        Ts   HTTP/)_receive_event
isinstancer   Responser3   r4   reasonr)   )r   r+   rA   r3   r   r   r   r0   l   s   

z&SyncHTTP11Connection._receive_responsec                 c   s^    	 |  |}t|tjrtdt|j t|jV  nt|tj	tj
fr.td| dS q)z:
        Read the response data from the network.
        Tzreceive_event=Data(<%d bytes>)zreceive_event=%rN)rJ   rK   r   rD   r:   r;   rC   rB   bytesrE   PAUSED)r   r+   rA   r   r   r   r1   y   s   
z+SyncHTTP11Connection._receive_response_datac                 C   sx   	 t tjti | j }W d   n1 sw   Y  |tju r1| j| j	|}| j
| n
|tjus8J 	 |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#SyncHTTP11Connection._receive_eventc                 C   sT   t d| jj| jj | jjtju r$| jjtju r$| j  tj	| _
d S |   d S )Nz+response_closed our_state=%r their_state=%r)r:   r;   r   	our_statetheir_stater   DONEstart_next_cycler   r#   r   closer%   r   r   r   r2      s   
z%SyncHTTP11Connection._response_closedc                 C   sH   | j tjkr"tj| _ | jjtju rt }| j| | j	
  d S d S r"   )r   r   CLOSEDr   rV   r   
MUST_CLOSEConnectionClosedrG   r   rZ   )r   rA   r   r   r   rZ      s   zSyncHTTP11Connection.closec                 C   s
   | j  S r"   )r   is_connection_droppedr%   r   r   r   r^      s   
z*SyncHTTP11Connection.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&    	