o
    MK&h4                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZddl	m
Z
 ddlmZmZmZmZmZ ddlmZmZmZ ddlmZmZ ddlmZ d	d
lmZ edZejejejej f Z!G dd dej"Z#G dd deZ$G dd dZ%G dd de
Z&dS )    )annotationsN   )NetworkStream)ConnectionNotAvailableLocalProtocolErrorRemoteProtocolError
WriteErrormap_exceptions)OriginRequestResponse)LockShieldCancellation)Trace   )ConnectionInterfacezhttpcore.http11c                   @  s   e Zd ZdZdZdZdZdS )HTTPConnectionStater   r   r      N)__name__
__module____qualname__NEWACTIVEIDLECLOSED r   r   H/var/www/html/venv/lib/python3.10/site-packages/httpcore/_sync/http11.pyr   $   s
    r   c                   @  s   e Zd ZdZdZ	dCdDddZdEddZdFddZdFddZdCdGddZ	dHddZ
dId d!Z	dCdJd#d$ZdKd%d&ZdKd'd(ZdLd*d+ZdMd,d-ZdMd.d/ZdMd0d1ZdMd2d3ZdNd5d6ZdNd7d8ZdOd9d:Z			dPdQdAdBZdS )RHTTP11Connectioni   i  Noriginr
   streamr   keepalive_expiryfloat | NonereturnNonec                 C  sF   || _ || _|| _d | _tj| _t | _d| _	t
jt
j| jd| _d S )Nr   )our_rolemax_incomplete_event_size)_origin_network_stream_keepalive_expiry
_expire_atr   r   _stater   _state_lock_request_counth11
ConnectionCLIENTMAX_INCOMPLETE_EVENT_SIZE
_h11_state)selfr   r   r    r   r   r   __init__/   s   zHTTP11Connection.__init__requestr   r   c                 C  s`  |  |jjstd|jj d| j | j# | jtjtj	fv r0|  j
d7  _
tj| _d | _nt W d    n1 s=w   Y  zd|i}z@tdt||}| jdi | W d    n1 sbw   Y  tdt||}| jdi | W d    n1 sw   Y  W n	 ty   Y nw tdt||}| jdi |\}}}}}||||f|_W d    n1 sw   Y  | j}	|dks|jd	krd
|  krdk rn nt|	|}	t||t| ||||	ddW S  ty/ }
 z:t , tdt|}|   W d    n1 sw   Y  W d    |
W d    |
1 s$w   Y  |
d }
~
ww )NzAttempted to send request to z on connection to r   r4   send_request_headerssend_request_bodyreceive_response_headerse   s   CONNECT   i,  )http_versionreason_phrasenetwork_stream)statusheaderscontent
extensionsresponse_closedr   )can_handle_requesturlr   RuntimeErrorr&   r+   r*   r   r   r   r,   r   r)   r   r   logger_send_request_headers_send_request_bodyr   _receive_response_headersreturn_valuer'   methodHTTP11UpgradeStreamr   HTTP11ConnectionByteStreamBaseExceptionr   _response_closed)r2   r4   kwargstracer:   r=   r;   r>   trailing_datar<   excr   r   r   handle_requestA   s   "


 

zHTTP11Connection.handle_requestc                 C  sr   |j di }|dd }ttjti tj|j|jj|j	d}W d    n1 s+w   Y  | j
||d d S )Ntimeoutwrite)rJ   targetr>   rT   )r@   getr	   r-   r   r   rJ   rC   rV   r>   _send_eventr2   r4   timeoutsrT   eventr   r   r   rF      s   z&HTTP11Connection._send_request_headersc                 C  sh   |j di }|dd }t|jtjsJ |jD ]}tj|d}| j||d q| jt	 |d d S )NrT   rU   )datarW   )
r@   rX   
isinstancer   typingIterabler-   DatarY   EndOfMessage)r2   r4   r[   rT   chunkr\   r   r   r   rG      s   
z#HTTP11Connection._send_request_bodyr\   	h11.EventrT   c                 C  s,   | j |}|d ur| jj||d d S d S )NrW   )r1   sendr'   rU   )r2   r\   rT   bytes_to_sendr   r   r   rY      s   zHTTP11Connection._send_event:tuple[bytes, int, bytes, list[tuple[bytes, bytes]], bytes]c           	      C  s   |j di }|dd }	 | j|d}t|tjrnt|tjr'|jdkr'nqd|j }|j	
 }| jj\}}||j|j||fS )NrT   readTrW   r8   s   HTTP/)r@   rX   _receive_eventr^   r-   r   InformationalResponsestatus_coder:   r>   	raw_itemsr1   rQ   reason)	r2   r4   r[   rT   r\   r:   r>   rQ   _r   r   r   rH      s   




z*HTTP11Connection._receive_response_headerstyping.Iterator[bytes]c                 c  s\    |j di }|dd }	 | j|d}t|tjr"t|jV  nt|tjtj	fr-d S q)NrT   rh   TrW   )
r@   rX   ri   r^   r-   ra   bytesr]   rb   PAUSEDrZ   r   r   r   _receive_response_body   s   z'HTTP11Connection._receive_response_bodyh11.Event | type[h11.PAUSED]c                 C  s   	 t tjti | j }W d    n1 sw   Y  |tju rC| jj| j|d}|dkr<| jj	tj
kr<d}t|| j| n|S q)NTrW       z/Server disconnected without sending a response.)r	   r-   r   r1   
next_event	NEED_DATAr'   rh   READ_NUM_BYTEStheir_stateSEND_RESPONSEreceive_data)r2   rT   r\   r]   msgr   r   r   ri      s   
zHTTP11Connection._receive_eventc                 C  s   | j < | jjtju r+| jjtju r+tj| _| j	  | j
d ur*t }|| j
 | _n|   W d    d S W d    d S 1 sBw   Y  d S N)r+   r1   	our_stater-   DONErx   r   r   r*   start_next_cycler(   time	monotonicr)   close)r2   nowr   r   r   rN      s   


" z!HTTP11Connection._response_closedc                 C  s   t j| _| j  d S r|   )r   r   r*   r'   r   r2   r   r   r   r      s   zHTTP11Connection.closeboolc                 C  s
   || j kS r|   )r&   r2   r   r   r   r   rB     s   
z#HTTP11Connection.can_handle_requestc                 C     | j tjkS r|   r*   r   r   r   r   r   r   is_available  s   zHTTP11Connection.is_availablec                 C  s<   t  }| jd uo|| jk}| jtjko| jd}|p|S )Nis_readable)r   r   r)   r*   r   r   r'   get_extra_info)r2   r   keepalive_expiredserver_disconnectedr   r   r   has_expired  s   
zHTTP11Connection.has_expiredc                 C  r   r|   r   r   r   r   r   is_idle      zHTTP11Connection.is_idlec                 C  r   r|   )r*   r   r   r   r   r   r   	is_closed#  r   zHTTP11Connection.is_closedstrc                 C  s$   t | j}|d| jj d| j S )Nz, HTTP/1.1, , Request Count: )r   r&   r*   namer,   r   r   r   r   info&  s
   
zHTTP11Connection.infoc              	   C  s6   | j j}t| j}d| d|d| jj d| j d	S )N<z [z, r   z]>)	__class__r   r   r&   r*   r   r,   )r2   
class_namer   r   r   r   __repr__-  s   
zHTTP11Connection.__repr__c                 C  s   | S r|   r   r   r   r   r   	__enter__8  s   zHTTP11Connection.__enter__exc_typetype[BaseException] | None	exc_valueBaseException | None	tracebacktypes.TracebackType | Nonec                 C  s   |    d S r|   )r   )r2   r   r   r   r   r   r   __exit__;  s   zHTTP11Connection.__exit__r|   )r   r
   r   r   r    r!   r"   r#   )r4   r   r"   r   )r4   r   r"   r#   )r\   rd   rT   r!   r"   r#   )r4   r   r"   rg   )r4   r   r"   ro   )rT   r!   r"   rs   r"   r#   )r   r
   r"   r   )r"   r   )r"   r   )r"   r   )NNN)r   r   r   r   r   r   r"   r#   )r   r   r   rw   r0   r3   rS   rF   rG   rY   rH   rr   ri   rN   r   rB   r   r   r   r   r   r   r   r   r   r   r   r   r   +   s6    

K













r   c                   @  s*   e Zd ZdddZdd
dZdddZdS )rL   
connectionr   r4   r   r"   r#   c                 C  s   || _ || _d| _d S )NF)_connection_request_closed)r2   r   r4   r   r   r   r3   E  s   
z#HTTP11ConnectionByteStream.__init__ro   c                 c  s    d| j i}z,tdt| j | | jjdi |D ]}|V  qW d    W d S 1 s+w   Y  W d S  tyX } zt  |   W d    |1 sMw   Y  |d }~ww )Nr4   receive_response_bodyr   )r   r   rE   r   rr   rM   r   r   )r2   rO   rc   rR   r   r   r   __iter__J  s"   
&

z#HTTP11ConnectionByteStream.__iter__c                 C  sN   | j s%d| _ tdt| j | j  W d    d S 1 sw   Y  d S d S )NTrA   )r   r   rE   r   r   rN   r   r   r   r   r   X  s   "z HTTP11ConnectionByteStream.closeN)r   r   r4   r   r"   r#   )r"   ro   r   )r   r   r   r3   r   r   r   r   r   r   rL   D  s    

rL   c                   @  sR   e Zd Zd ddZd!d"ddZd!d#ddZd$ddZ				d%d&ddZd'ddZd	S )(rK   r   r   leading_datarp   r"   r#   c                 C  s   || _ || _d S r|   )_stream_leading_data)r2   r   r   r   r   r   r3   `  s   
zHTTP11UpgradeStream.__init__N	max_bytesintrT   r!   c                 C  s6   | j r| j d | }| j |d  | _ |S | j||S r|   )r   r   rh   )r2   r   rT   bufferr   r   r   rh   d  s
   zHTTP11UpgradeStream.readr   c                 C  s   | j || d S r|   )r   rU   )r2   r   rT   r   r   r   rU   l  s   zHTTP11UpgradeStream.writec                 C  s   | j   d S r|   )r   r   r   r   r   r   r   o  s   zHTTP11UpgradeStream.closessl_contextssl.SSLContextserver_hostname
str | Nonec                 C  s   | j |||S r|   )r   	start_tls)r2   r   r   rT   r   r   r   r   r  s   zHTTP11UpgradeStream.start_tlsr   r   
typing.Anyc                 C  s   | j |S r|   )r   r   )r2   r   r   r   r   r   z  r   z"HTTP11UpgradeStream.get_extra_info)r   r   r   rp   r"   r#   r|   )r   r   rT   r!   r"   rp   )r   rp   rT   r!   r"   r#   r   )NN)r   r   r   r   rT   r!   r"   r   )r   r   r"   r   )	r   r   r   r3   rh   rU   r   r   r   r   r   r   r   rK   _  s    

rK   )'
__future__r   enumloggingsslr   typesr_   r-   _backends.baser   _exceptionsr   r   r   r   r	   _modelsr
   r   r   _synchronizationr   r   _tracer   
interfacesr   	getLoggerrE   Unionra   rb   H11SendEventIntEnumr   r   rL   rK   r   r   r   r   <module>   s6    
  