o
    il                     @  s   d dl mZ d dlZd dlZd dlZddlmZmZmZm	Z	m
Z
mZmZmZ ddlmZmZmZ G dd deZG d	d
 d
eZdS )    )annotationsN   )ConnectErrorConnectTimeoutExceptionMapping	ReadErrorReadTimeout
WriteErrorWriteTimeoutmap_exceptions   )SOCKET_OPTIONAsyncNetworkBackendAsyncNetworkStreamc                   @  s\   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+d!d"Z	dS ),
TrioStreamstreamtrio.abc.StreamreturnNonec                 C  s
   || _ d S N)_streamselfr    r   Q/home/kim/smarthome/.venv/lib/python3.10/site-packages/httpcore/_backends/trio.py__init__   s   
zTrioStream.__init__N	max_bytesinttimeoutfloat | Nonebytesc              	     s   |d u r	t dn|}tjttjttjti}t|1 t| | j	j
|dI d H }|W  d    W  d    S 1 s>w   Y  W d    d S 1 sNw   Y  d S )Ninf)r   )floattrioTooSlowErrorr   BrokenResourceErrorr   ClosedResourceErrorr   
fail_afterr   Zreceive_some)r   r   r   timeout_or_infexc_mapdatar   r   r   read   s   
"zTrioStream.readbufferc              	     s   |sd S |d u rt dn|}tjttjttjti}t|0 t| | j	j
|dI d H  W d    n1 s9w   Y  W d    d S W d    d S 1 sQw   Y  d S )Nr!   )r*   )r"   r#   r$   r
   r%   r	   r&   r   r'   r   Zsend_all)r   r,   r   r(   r)   r   r   r   write%   s   
"zTrioStream.writec                   s   | j  I d H  d S r   )r   aclose)r   r   r   r   r.   3      zTrioStream.aclosessl_contextssl.SSLContextserver_hostname
str | Noner   c                   s   |d u r	t dn|}tjttjti}tj| j||ddd}t|? zt	| |
 I d H  W d    n1 s;w   Y  W n tyV } z	|  I d H  |d }~ww W d    t|S 1 sdw   Y  t|S )Nr!   TF)r0   r2   Zhttps_compatibleserver_side)r"   r#   r$   r   r%   r   	SSLStreamr   r   r'   do_handshake	Exceptionr.   r   )r   r0   r2   r   r(   r)   Z
ssl_streamexcr   r   r   	start_tls6   s8   

zTrioStream.start_tlsinfostr
typing.Anyc                 C  s   |dkrt | jtjr| jjS |dkr|  j S |dkr%|  j S |dkrF| j}t |tjr;|j	}t |tjs2t |tj
sCJ |jS |dkrS| d}| S d S )NZ
ssl_objectclient_addrZserver_addrsocketis_readable)
isinstancer   r#   r5   Z_ssl_object_get_socket_streamr>   getsocknamegetpeernametransport_streamSocketStreamget_extra_infor?   )r   r:   r   r>   r   r   r   rF   Q   s"   
zTrioStream.get_extra_infotrio.SocketStreamc                 C  s8   | j }t|tjr|j}t|tjs	t|tjsJ |S r   )r   r@   r#   r5   rD   rE   r   r   r   r   rA   e   s   zTrioStream._get_socket_stream)r   r   r   r   r   )r   r   r   r   r   r    )r,   r    r   r   r   r   )r   r   NN)r0   r1   r2   r3   r   r   r   r   )r:   r;   r   r<   )r   rG   )
__name__
__module____qualname__r   r+   r-   r.   r9   rF   rA   r   r   r   r   r      s    


r   c                   @  s8   e Zd Z			ddddZ		ddddZdddZdS )TrioBackendNhostr;   portr   r   r   local_addressr3   socket_options%typing.Iterable[SOCKET_OPTION] | Noner   r   c           
   	     s   |d u rg }|d u rt dn|}tjttjttti}t|? t| tj	|||dI d H }|D ]}	|j
|	  q3W d    n1 sEw   Y  W d    t|S W d    t|S 1 saw   Y  t|S )Nr!   )rM   rN   rO   )r"   r#   r$   r   r%   r   OSErrorr   r'   Zopen_tcp_stream
setsockoptr   )
r   rM   rN   r   rO   rP   r(   r)   r   optionr   r   r   connect_tcpn   s0   



zTrioBackend.connect_tcppathc              	     s   |d u rg }|d u rt dn|}tjttjttti}t|< t| t	|I d H }|D ]}|j
|  q0W d    n1 sBw   Y  W d    t|S W d    t|S 1 s^w   Y  t|S )Nr!   )r"   r#   r$   r   r%   r   rR   r   r'   Zopen_unix_socketrS   r   )r   rV   r   rP   r(   r)   r   rT   r   r   r   connect_unix_socket   s,   


zTrioBackend.connect_unix_socketsecondsr"   r   c                   s   t |I d H  d S r   )r#   sleep)r   rX   r   r   r   rY      r/   zTrioBackend.sleep)NNN)rM   r;   rN   r   r   r   rO   r3   rP   rQ   r   r   rH   )rV   r;   r   r   rP   rQ   r   r   )rX   r"   r   r   )rI   rJ   rK   rU   rW   rY   r   r   r   r   rL   m   s    rL   )
__future__r   ssltypingr#   _exceptionsr   r   r   r   r   r	   r
   r   baser   r   r   r   rL   r   r   r   r   <module>   s    (
X