U
    	f                     @   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mZ ddlmZmZmZ G dd	 d	eZG d
d deZG dd deZdS )    N)partial   )ConnectErrorConnectTimeoutExceptionMapping	ReadErrorReadTimeout
WriteErrorWriteTimeoutmap_exceptions)is_socket_readable   )SOCKET_OPTIONNetworkBackendNetworkStreamc                   @   s   e Zd ZdZdZdejejej	e
 ej	e dddZejdejf ejdd	d
Zdeej	e edddZdeej	e ddddZddddZdejej	e
 ej	e ddddZe
ejdddZdS )TLSinTLSStreamz
    Because the standard `SSLContext.wrap_socket` method does
    not work for `SSLSocket` objects, we need this class
    to implement TLS stream using an underlying `SSLObject`
    instance in order to support TLS on top of TLS.
    i @  N)sockssl_contextserver_hostnametimeoutc                 C   sN   || _ t | _t | _|j| j| j|d| _| j | | | jj	 d S )N)incomingoutgoingr   )
_sockssl	MemoryBIO	_incoming	_outgoingwrap_biossl_obj
settimeout_perform_iodo_handshake)selfr   r   r   r    r#   Z/var/www/html/apigroqsegura/apigroq/lib/python3.8/site-packages/httpcore/_backends/sync.py__init__    s    

zTLSinTLSStream.__init__.)funcreturnc              
   C   s   d }d }z
| }W n0 t jt jfk
rB } z
|j}W 5 d }~X Y nX | j| j  |t jkr| j	| j
}|r| j| n
| j  |d kr|S qd S N)r   SSLWantReadErrorSSLWantWriteErrorerrnor   sendallr   readSSL_ERROR_WANT_READrecvTLS_RECORD_SIZEr   write	write_eof)r"   r&   retr+   ebufr#   r#   r$   r    4   s    


zTLSinTLSStream._perform_io	max_bytesr   r'   c              
   C   sV   t jttti}t|6 | j| t	t
| t| jj|W  5 Q R  S Q R X d S r(   )socketr   r   OSErrorr   r   r   r   typingcastbytesr    r   r   r-   r"   r7   r   exc_mapr#   r#   r$   r-   M   s    
 zTLSinTLSStream.readbufferr   r'   c              	   C   sX   t jttti}t|8 | j| |rJ| t	| j
j|}||d  }q$W 5 Q R X d S r(   )r8   r   r
   r9   r	   r   r   r   r    r   r   r1   )r"   r@   r   r>   Znsentr#   r#   r$   r1   U   s    
zTLSinTLSStream.writer'   c                 C   s   | j   d S r(   r   closer"   r#   r#   r$   rC   ]   s    zTLSinTLSStream.closer   r   r   r   r'   c                 C   s
   t  d S r(   )NotImplementedError)r"   r   r   r   r#   r#   r$   	start_tls`   s    zTLSinTLSStream.start_tlsinfor'   c                 C   sV   |dkr| j S |dkr | j S |dkr2| j S |dkr@| jS |dkrRt| jS d S N
ssl_objectclient_addrZserver_addrr8   Zis_readable)r   r   getsocknamegetpeernamer   r"   rI   r#   r#   r$   get_extra_infoh   s    


zTLSinTLSStream.get_extra_info)NN)N)N)NN)__name__
__module____qualname____doc__r0   r8   r   
SSLContextr:   Optionalstrfloatr%   CallableAnyr    intr<   r-   r1   rC   rG   rP   r#   r#   r#   r$   r      s2       r   c                   @   s   e Zd ZejddddZdeeje e	dddZ
de	eje ddd	d
ZddddZdejeje eje edddZeejdddZdS )
SyncStreamN)r   r'   c                 C   s
   || _ d S r(   )r   )r"   r   r#   r#   r$   r%   w   s    zSyncStream.__init__r6   c              
   C   sF   t jttti}t|& | j| | j|W  5 Q R  S Q R X d S r(   )	r8   r   r   r9   r   r   r   r   r/   r=   r#   r#   r$   r-   z   s    
zSyncStream.readr?   c              	   C   sX   |sd S t jttti}t|0 |rJ| j| | j|}||d  }q W 5 Q R X d S r(   )	r8   r   r
   r9   r	   r   r   r   send)r"   r@   r   r>   nr#   r#   r$   r1      s    
zSyncStream.writerA   c                 C   s   | j   d S r(   rB   rD   r#   r#   r$   rC      s    zSyncStream.closerE   c                 C   s   t jttti}t| zLt| jtj	rFt
| j|||W W  5 Q R  S | j| |j| j|d}W n. tk
r } z|   |W 5 d }~X Y nX W 5 Q R X t|S )N)r   )r8   r   r   r9   r   r   
isinstancer   r   	SSLSocketr   r   wrap_socket	ExceptionrC   r\   )r"   r   r   r   r>   r   excr#   r#   r$   rG      s.      
    
 zSyncStream.start_tlsrH   c                 C   sf   |dkrt | jtjr| jjS |dkr0| j S |dkrB| j S |dkrP| jS |dkrbt| jS d S rJ   )r_   r   r   r`   _sslobjrM   rN   r   rO   r#   r#   r$   rP      s    


zSyncStream.get_extra_info)N)N)NN)rQ   rR   rS   r8   r%   r[   r:   rV   rX   r<   r-   r1   rC   r   rU   rW   r   rG   rZ   rP   r#   r#   r#   r$   r\   v   s     r\   c                   @   sf   e Zd Zdeeeje eje ejeje	  e
dddZd	eeje ejeje	  e
dddZdS )
SyncBackendN)hostportr   local_addresssocket_optionsr'   c              	   C   s   |d krg }||f}|d kr d n|df}t jttti}t|< t j|||d}	|D ]}
|	j|
  qT|	t jt j	d W 5 Q R X t
|	S )Nr   )source_addressr   )r8   r   r   r9   r   r   create_connection
setsockoptIPPROTO_TCPTCP_NODELAYr\   )r"   rf   rg   r   rh   ri   addressrj   r>   r   optionr#   r#   r$   connect_tcp   s&    
  
zSyncBackend.connect_tcp)pathr   ri   r'   c              	   C   s   t jdkrtd|d krg }tjttti}t|> ttj	tj
}|D ]}|j|  qJ|| || W 5 Q R X t|S )Nwin32z:Attempted to connect to a UNIX socket on a Windows system.)sysplatformRuntimeErrorr8   r   r   r9   r   r   AF_UNIXSOCK_STREAMrl   r   connectr\   )r"   rr   r   ri   r>   r   rp   r#   r#   r$   connect_unix_socket   s$    
  

zSyncBackend.connect_unix_socket)NNN)NN)rQ   rR   rS   rW   r[   r:   rV   rX   Iterabler   r   rq   rz   r#   r#   r#   r$   re      s&      !  re   )r8   r   rt   r:   	functoolsr   _exceptionsr   r   r   r   r   r	   r
   r   _utilsr   baser   r   r   r   r\   re   r#   r#   r#   r$   <module>   s   (
aC