o
    i4                     @  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   O/home/kim/smarthome/.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   )Zour_roleZmax_incomplete_event_size)_origin_network_stream_keepalive_expiry
_expire_atr   r   _stater   _state_lock_request_counth11
ConnectionZ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   r1   Zsend_request_headersZsend_request_bodyZ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)r/   r1   kwargstracer4   r7   r5   r8   trailing_datar6   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)rD   targetr8   rN   )r:   getr	   r+   r   r   rD   r=   rP   r8   _send_eventr/   r1   timeoutsrN   eventr   r   r   r@      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 )NrN   rO   )datarQ   )
r:   rR   
isinstancer   typingIterabler+   DatarS   EndOfMessage)r/   r1   rU   rN   chunkrV   r   r   r   rA      s   
z#HTTP11Connection._send_request_bodyrV   	h11.EventrN   c                 C  s,   | j |}|d ur| jj||d d S d S )NrQ   )r.   sendr%   rO   )r/   rV   rN   Zbytes_to_sendr   r   r   rS      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 )NrN   readTrQ   r2   s   HTTP/)r:   rR   _receive_eventrX   r+   r   ZInformationalResponsestatus_coder4   r8   	raw_itemsr.   rK   reason)	r/   r1   rU   rN   rV   r4   r8   rK   _r   r   r   rB      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)NrN   ra   TrQ   )
r:   rR   rb   rX   r+   r[   bytesrW   r\   ZPAUSEDrT   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)NTrQ       z/Server disconnected without sending a response.)r	   r+   r   r.   Z
next_eventZ	NEED_DATAr%   ra   READ_NUM_BYTEStheir_stateZSEND_RESPONSEZreceive_data)r/   rN   rV   rW   msgr   r   r   rb      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)   r.   Z	our_stater+   ZDONErm   r   r   r(   Zstart_next_cycler&   time	monotonicr'   close)r/   nowr   r   r   rH      s   


" z!HTTP11Connection._response_closedc                 C  s   t j| _| j  d S ro   )r   r   r(   r%   rr   r/   r   r   r   rr      s   zHTTP11Connection.closeboolc                 C  s
   || j kS ro   )r$   r/   r   r   r   r   r<     s   
z#HTTP11Connection.can_handle_requestc                 C     | j tjkS ro   r(   r   r   rt   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 )NZis_readable)rp   rq   r'   r(   r   r   r%   get_extra_info)r/   rs   Zkeepalive_expiredZserver_disconnectedr   r   r   has_expired  s   
zHTTP11Connection.has_expiredc                 C  rw   ro   rx   rt   r   r   r   is_idle      zHTTP11Connection.is_idlec                 C  rw   ro   )r(   r   r   rt   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*   rv   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*   )r/   
class_namer   r   r   r   __repr__-  s   
zHTTP11Connection.__repr__c                 C  s   | S ro   r   rt   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 ro   )rr   )r/   r   r   r   r   r   r   __exit__;  s   zHTTP11Connection.__exit__ro   )r   r
   r   r   r    r!   r"   r#   )r1   r   r"   r   )r1   r   r"   r#   )rV   r^   rN   r!   r"   r#   )r1   r   r"   r`   )r1   r   r"   rg   )rN   r!   r"   rj   r"   r#   )r   r
   r"   ru   )r"   ru   )r"   r   )r"   r   )NNN)r   r   r   r   r   r   r"   r#   )r   r   r   rl   r-   r0   rM   r@   rA   rS   rB   ri   rb   rH   rr   r<   ry   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 )rF   
connectionr   r1   r   r"   r#   c                 C  s   || _ || _d| _d S )NF)_connection_request_closed)r/   r   r1   r   r   r   r0   E  s   
z#HTTP11ConnectionByteStream.__init__rg   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 )Nr1   Zreceive_response_bodyr   )r   r   r?   r   ri   rG   r   rr   )r/   rI   r]   rL   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 )NTr;   )r   r   r?   r   r   rH   rt   r   r   r   rr   X  s   "z HTTP11ConnectionByteStream.closeN)r   r   r1   r   r"   r#   )r"   rg   r   )r   r   r   r0   r   rr   r   r   r   r   rF   D  s    

rF   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 )(rE   r   r   leading_datarh   r"   r#   c                 C  s   || _ || _d S ro   )_stream_leading_data)r/   r   r   r   r   r   r0   `  s   
zHTTP11UpgradeStream.__init__N	max_bytesintrN   r!   c                 C  s6   | j r| j d | }| j |d  | _ |S | j||S ro   )r   r   ra   )r/   r   rN   bufferr   r   r   ra   d  s
   zHTTP11UpgradeStream.readr   c                 C  s   | j || d S ro   )r   rO   )r/   r   rN   r   r   r   rO   l  s   zHTTP11UpgradeStream.writec                 C  s   | j   d S ro   )r   rr   rt   r   r   r   rr   o  s   zHTTP11UpgradeStream.closessl_contextssl.SSLContextserver_hostname
str | Nonec                 C  s   | j |||S ro   )r   	start_tls)r/   r   r   rN   r   r   r   r   r  s   zHTTP11UpgradeStream.start_tlsr   r   
typing.Anyc                 C  s   | j |S ro   )r   rz   )r/   r   r   r   r   rz   z  r}   z"HTTP11UpgradeStream.get_extra_info)r   r   r   rh   r"   r#   ro   )r   r   rN   r!   r"   rh   )r   rh   rN   r!   r"   r#   r   )NN)r   r   r   r   rN   r!   r"   r   )r   r   r"   r   )	r   r   r   r0   ra   rO   rr   r   rz   r   r   r   r   rE   _  s    

rE   )'
__future__r   enumloggingsslrp   typesrY   r+   Z_backends.baser   _exceptionsr   r   r   r   r	   Z_modelsr
   r   r   Z_synchronizationr   r   _tracer   Z
interfacesr   	getLoggerr?   Unionr[   r\   ZH11SendEventIntEnumr   r   rF   rE   r   r   r   r   <module>   s6    
  