o
    h                     @   sx   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 )
    N   )ConnectErrorConnectTimeoutExceptionMapping	ReadErrorReadTimeout
WriteErrorWriteTimeoutmap_exceptions   )SOCKET_OPTIONAsyncNetworkBackendAsyncNetworkStreamc                	   @   s   e Zd ZdejjddfddZ	ddedej	e
 defdd	Z	dd
edej	e
 ddfddZdddZ		ddejdej	e dej	e
 defddZdedejfddZdejfddZdS )
TrioStreamstreamreturnNc                 C   s
   || _ d S N)_streamselfr    r   W/var/www/html/flask_server/venv/lib/python3.10/site-packages/httpcore/_backends/trio.py__init__   s   
zTrioStream.__init__	max_bytestimeoutc              	      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   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   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*   5      zTrioStream.aclosessl_contextserver_hostnamec                    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)r,   r-   https_compatibleserver_side)r   r   r   r   r   r   	SSLStreamr   r
   r!   do_handshake	Exceptionr*   r   )r   r,   r-   r   r#   r$   
ssl_streamexcr   r   r   	start_tls8   s8   

zTrioStream.start_tlsinfoc                 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 )N
ssl_objectclient_addrserver_addrsocketis_readable)
isinstancer   r   r0   _ssl_object_get_socket_streamr:   getsocknamegetpeernametransport_streamSocketStreamget_extra_infor;   )r   r6   r   r:   r   r   r   rC   S   s"   
zTrioStream.get_extra_infoc                 C   s8   | j }t|tjr|j}t|tjs	t|tjsJ |S r   )r   r<   r   r0   rA   rB   r   r   r   r   r>   g   s   zTrioStream._get_socket_streamr   )r   NNN)__name__
__module____qualname__r   abcStreamr   inttypingOptionalr   bytesr&   r)   r*   ssl
SSLContextstrr   r5   AnyrC   rB   r>   r   r   r   r   r      s@    



r   c                   @   s   e Zd Z			ddededeje deje dejeje	  de
fdd	Z		dd
edeje dejeje	  de
fddZdeddfddZdS )TrioBackendNhostportr   local_addresssocket_optionsr   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   )rS   rT   rU   )r   r   r   r   r   r   OSErrorr
   r!   open_tcp_stream
setsockoptr   )
r   rS   rT   r   rU   rV   r#   r$   r   optionr   r   r   connect_tcpp   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   rW   r
   r!   open_unix_socketrY   r   )r   r\   r   rV   r#   r$   r   rZ   r   r   r   connect_unix_socket   s,   


zTrioBackend.connect_unix_socketsecondsc                    s   t |I d H  d S r   )r   sleep)r   r_   r   r   r   r`      r+   zTrioBackend.sleep)NNNrD   )rE   rF   rG   rP   rJ   rK   rL   r   Iterabler   r   r[   r^   r`   r   r   r   r   rR   o   s:    

rR   )rN   rK   r   _exceptionsr   r   r   r   r   r   r	   r
   baser   r   r   r   rR   r   r   r   r   <module>   s    (
\