o
    h4                     @   s"  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mZmZm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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 )    N)TracebackType)AnyIterableIteratorListOptionalTupleTypeUnion   )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#   U/var/www/html/flask_server/venv/lib/python3.10/site-packages/httpcore/_sync/http11.pyr   +   s
    r   c                   @   s  e Zd ZdZdZ	d4dededee ddfdd	Z	d
e
defddZd
e
ddfddZd
e
ddfddZ	d4dejdee ddfddZd
e
deeeeeeeef  ef fddZd
e
dee fddZ	d4dee deejeej f fddZd5ddZd5ddZdedefdd Z defd!d"Z!defd#d$Z"defd%d&Z#defd'd(Z$de%fd)d*Z&de%fd+d,Z'd6d-d.Z(			d7d/eee)  d0ee) d1ee* ddfd2d3Z+dS )8HTTP11Connectioni   i  Noriginstreamkeepalive_expiryreturnc                 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__6   s   zHTTP11Connection.__init__requestc                 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   r:   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,   r1   r0   r   r   r!   r2   r    r/   r   r   logger_send_request_headers_send_request_bodyr   _receive_response_headersreturn_valuer-   methodHTTP11UpgradeStreamr   HTTP11ConnectionByteStreamBaseExceptionr   _response_closed)r8   r:   kwargstracer@   rC   rA   rD   trailing_datarB   excr#   r#   r$   handle_requestH   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)rP   targetrD   rZ   )rF   getr   r3   r   r   rP   rI   r\   rD   _send_eventr8   r:   timeoutsrZ   eventr#   r#   r$   rL      s   z&HTTP11Connection._send_request_headersc                 C   sf   |j di }|dd }t|jtsJ |jD ]}tj|d}| j||d q| jt |d d S )NrZ   r[   )datar]   )	rF   r^   
isinstancer'   r   r3   Datar_   EndOfMessage)r8   r:   ra   rZ   chunkrb   r#   r#   r$   rM      s   
z#HTTP11Connection._send_request_bodyrb   rZ   c                 C   s,   | j |}|d ur| jj||d d S d S )Nr]   )r7   sendr-   r[   )r8   rb   rZ   bytes_to_sendr#   r#   r$   r_      s   zHTTP11Connection._send_eventc           	      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 )NrZ   readTr]   r>   s   HTTP/)rF   r^   _receive_eventrd   r3   r   InformationalResponsestatus_coder@   rD   	raw_itemsr7   rW   reason)	r8   r:   ra   rZ   rb   r@   rD   rW   _r#   r#   r$   rN      s   




z*HTTP11Connection._receive_response_headersc                 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)NrZ   rj   Tr]   )
rF   r^   rk   rd   r3   re   bytesrc   rf   PAUSEDr`   r#   r#   r$   _receive_response_body   s   z'HTTP11Connection._receive_response_bodyc                 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)NTr]       z/Server disconnected without sending a response.)r   r3   r   r7   
next_event	NEED_DATAr-   rj   READ_NUM_BYTEStheir_stateSEND_RESPONSEreceive_data)r8   rZ   rb   rc   msgr#   r#   r$   rk      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)r1   r7   	our_stater3   DONErx   r   r!   r0   start_next_cycler.   time	monotonicr/   close)r8   nowr#   r#   r$   rT      s   


" z!HTTP11Connection._response_closedc                 C   s   t j| _| j  d S r|   )r   r"   r0   r-   r   r8   r#   r#   r$   r     s   zHTTP11Connection.closec                 C   s
   || j kS r|   )r,   r8   r&   r#   r#   r$   rH     s   
z#HTTP11Connection.can_handle_requestc                 C      | j tjkS r|   r0   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/   r0   r   r!   r-   get_extra_info)r8   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|   )r0   r   r"   r   r#   r#   r$   	is_closed*  r   zHTTP11Connection.is_closedc                 C   s$   t | j}|d| jj d| j S )Nz, HTTP/1.1, , Request Count: )strr,   r0   namer2   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,   r0   r   r2   )r8   
class_namer&   r#   r#   r$   __repr__4  s   
zHTTP11Connection.__repr__c                 C   s   | S r|   r#   r   r#   r#   r$   	__enter__?  s   zHTTP11Connection.__enter__exc_type	exc_value	tracebackc                 C   s   |    d S r|   )r   )r8   r   r   r   r#   r#   r$   __exit__B  s   zHTTP11Connection.__exit__r|   r)   N)r)   r%   )NNN),r   r   r   rw   r6   r   r   r   floatr9   r   r   rY   rL   rM   r3   Eventr_   r   rq   intr   rN   r   rs   r
   r	   rr   rk   rT   r   boolrH   r   r   r   r   r   r   r   r   rS   r   r   r#   r#   r#   r$   r%   2   st    
K
	






r%   c                   @   s>   e Zd ZdededdfddZdee fddZdd	d
Z	dS )rR   
connectionr:   r)   Nc                 C   s   || _ || _d| _d S )NF)_connection_request_closed)r8   r   r:   r#   r#   r$   r9   L  s   
z#HTTP11ConnectionByteStream.__init__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 )Nr:   receive_response_bodyr#   )r   r   rK   r   rs   rS   r   r   )r8   rU   rg   rX   r#   r#   r$   __iter__Q  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 )NTrG   )r   r   rK   r   r   rT   r   r#   r#   r$   r   _  s   "z HTTP11ConnectionByteStream.closer   )
r   r   r   r%   r   r9   r   rq   r   r   r#   r#   r#   r$   rR   K  s    rR   c                	   @   s   e Zd ZdededdfddZddedee defd	d
Z	ddedee ddfddZ
dddZ		ddejdee dee defddZdedefddZdS )rQ   r'   leading_datar)   Nc                 C   s   || _ || _d S r|   )_stream_leading_data)r8   r'   r   r#   r#   r$   r9   g  s   
zHTTP11UpgradeStream.__init__	max_bytesrZ   c                 C   s6   | j r| j d | }| j |d  | _ |S | j||S r|   )r   r   rj   )r8   r   rZ   bufferr#   r#   r$   rj   k  s
   zHTTP11UpgradeStream.readr   c                 C   s   | j || d S r|   )r   r[   )r8   r   rZ   r#   r#   r$   r[   s  s   zHTTP11UpgradeStream.writec                 C   s   | j   d S r|   )r   r   r   r#   r#   r$   r   v  s   zHTTP11UpgradeStream.closessl_contextserver_hostnamec                 C   s   | j |||S r|   )r   	start_tls)r8   r   r   rZ   r#   r#   r$   r   y  s   zHTTP11UpgradeStream.start_tlsr   c                 C   s   | j |S r|   )r   r   )r8   r   r#   r#   r$   r     r   z"HTTP11UpgradeStream.get_extra_infor|   r   )NN)r   r   r   r   rq   r9   r   r   r   rj   r[   r   ssl
SSLContextr   r   r   r   r#   r#   r#   r$   rQ   f  s"    

rQ   )-enumloggingr   r   typesr   typingr   r   r   r   r   r   r	   r
   r3   _backends.baser   _exceptionsr   r   r   r   r   _modelsr   r   r   _synchronizationr   r   _tracer   
interfacesr   	getLoggerrK   re   rf   H11SendEventIntEnumr   r%   rR   rQ   r#   r#   r#   r$   <module>   s4    (
  