B
    `                 @   s   d dl mZ d dlmZ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mZmZ dd	lmZ d
dlmZmZ d
dl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UnioncastN   )SyncSocketStream)IteratorByteStreamPlainByteStream)LocalProtocolErrorRemoteProtocolErrormap_exceptions)URLHeadersTimeoutDict)
get_logger   )SyncByteStreamConnectionState)SyncBaseHTTPConnectionc               @   sD  e Zd ZdZd+eedddZedddZedd	d
Z	e
dddZddddZd,eeeeeeeeeef dddZd-eeedddZeeeeddddZeeddddZeeddddZeeeeeeeeef  f ddd Zeee dd!d"Zeedd#d$Zddd%d&Z ddd'd(Z!e"dd)d*Z#dS ).SyncHTTP11Connectioni   N)socketssl_contextc             C   s6   || _ |d krt n|| _tjtjd| _tj| _	d S )N)Zour_role)
r   r   r   h11
ConnectionZCLIENT	h11_stater   ACTIVEstate)selfr   r    r    D/home/dcms/DCMS/lib/python3.7/site-packages/httpcore/_sync/http11.py__init__   s    zSyncHTTP11Connection.__init__)returnc             C   s   d| j  dS )Nz<SyncHTTP11Connection state=>)r   )r   r    r    r!   __repr__%   s    zSyncHTTP11Connection.__repr__c             C   s   d| j j S )Nz
HTTP/1.1, )r   name)r   r    r    r!   info(   s    zSyncHTTP11Connection.infoc             C   s   | j S )N)r   )r   r    r    r!   	get_state+   s    zSyncHTTP11Connection.get_statec             C   s   | j tjkrtj| _ d S )N)r   r   IDLEZREADY)r   r    r    r!   mark_as_ready.   s    z"SyncHTTP11Connection.mark_as_ready)methodurlheadersstreamextr#   c             C   s   |d krg n|}|d kr t dn|}|d kr0i n|}tt|di }tj| _| |||| | || | 	|\}}}	}t
| || jd}
|jddd|	jdddd}|||
|fS )N    timeout)iteratorZ
close_funcasciiignore)errors)http_versionreason)r   r   r   getr   r   r   _send_request_send_request_body_receive_responser
   _receive_response_data_response_closeddecode)r   r+   r,   r-   r.   r/   r1   r6   status_codeZreason_phraseZresponse_streamr    r    r!   request2   s    
zSyncHTTP11Connection.request)hostnamer1   r#   c             C   s*   |d kri n|}| j || j|| _ | j S )N)r   	start_tlsr   )r   rA   r1   r    r    r!   rB   S   s    zSyncHTTP11Connection.start_tls)r+   r,   r-   r1   r#   c       
   	   C   sV   t d||| |\}}}}ttjti tj|||d}	W dQ R X | |	| dS )z4
        Send the request line and headers.
        z(send_request method=%r url=%r headers=%s)r+   targetr-   N)loggertracer   r   r   Request_send_event)
r   r+   r,   r-   r1   Z_schemeZ_hostZ_portrC   eventr    r    r!   r9   Z   s
    z"SyncHTTP11Connection._send_request)r.   r1   r#   c             C   sN   x4|D ],}t dt| tj|d}| || qW t }| || dS )z(
        Send the request body.
        zsend_data=Data(<%d bytes>))dataN)rD   rE   lenr   DatarG   EndOfMessage)r   r.   r1   chunkrH   r    r    r!   r:   f   s    
z'SyncHTTP11Connection._send_request_body)rH   r1   r#   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   rH   r1   Zbytes_to_sendr    r    r!   rG   v   s    z SyncHTTP11Connection._send_event)r1   r#   c             C   s:   x|  |}t|tjrP qW d|j }||j|j|jfS )zH
        Read the response status and headers from the network.
        s   HTTP/)_receive_event
isinstancer   Responser6   r?   r7   r-   )r   r1   rH   r6   r    r    r!   r;   ~   s    

z&SyncHTTP11Connection._receive_responsec             c   s`   xZ|  |}t|tjr8tdt|j t|jV  qt|tj	tj
frtd| P qW dS )z:
        Read the response data from the network.
        zreceive_event=Data(<%d bytes>)zreceive_event=%rN)rP   rQ   r   rK   rD   rE   rJ   rI   bytesrL   ZPAUSED)r   r1   rH   r    r    r!   r<      s    
z+SyncHTTP11Connection._receive_response_datac          	   C   sf   x`t tjti | j }W dQ R X |tjkrN| j| j|}| j	| q|tjk	s\t
P qW |S )zZ
        Read a single `h11` event, reading more data from the network if needed.
        N)r   r   r   r   Z
next_eventZ	NEED_DATAr   readREAD_NUM_BYTESZreceive_dataAssertionError)r   r1   rH   rI   r    r    r!   rP      s    
z#SyncHTTP11Connection._receive_eventc             C   sR   t d| jj| jj | jjtjkrF| jjtjkrF| j  tj	| _
n|   d S )Nz+response_closed our_state=%r their_state=%r)rD   rE   r   	our_stateZtheir_stater   ZDONEZstart_next_cycler   r)   r   close)r   r    r    r!   r=      s    


z%SyncHTTP11Connection._response_closedc             C   sD   | j tjkr@tj| _ | jjtjkr6t }| j| | j	
  d S )N)r   r   ZCLOSEDr   rW   r   Z
MUST_CLOSEConnectionClosedrN   r   rX   )r   rH   r    r    r!   rX      s    zSyncHTTP11Connection.closec             C   s
   | j  S )N)r   is_connection_dropped)r   r    r    r!   rZ      s    z*SyncHTTP11Connection.is_connection_dropped)N)NNN)N)$__name__
__module____qualname__rU   r	   r   r"   strr%   r'   r   r(   r*   rS   r   r   r   dictr   intr@   r   rB   r9   r:   H11EventrG   r   r;   r   r<   rP   r=   rX   boolrZ   r    r    r    r!   r      s2     	&
r   )'sslr   typingr   r   r   r   r   r   Z_backends.syncr	   Z_bytestreamsr
   r   _exceptionsr   r   r   _typesr   r   r   _utilsr   baser   r   httpr   rF   rR   ZInformationalResponserK   rL   rY   ra   r[   rD   r   r    r    r    r!   <module>   s$   
