o
    ͷ6i                     @   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 d dlm	Z	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 G dd	 d	ZG d
d dZG dd dZG dd dZdS )    N)
SSLContext)TracebackType)OptionalType   )
CloseErrorConnectErrorConnectTimeout	ReadErrorReadTimeout
WriteErrorWriteTimeoutmap_exceptions)TimeoutDictc                   @   s   e Zd ZdZdejddfddZdefddZd	ed
e	de
dd fddZdede
defddZdede
ddfddZdddZdefddZdS )SyncSocketStreamz
    A socket stream with read/write operations. Abstracts away any asyncio-specific
    interfaces into a more generic base class, that we can use with alternate
    backends, or for stand-alone test cases.
    sockreturnNc                 C   s   || _ t | _t | _d S N)r   	threadingLock	read_lock
write_lock)selfr    r   \/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/httpcore/_backends/sync.py__init__   s   
zSyncSocketStream.__init__c                 C   s0   t | jdd }|d ur| }|dkrdS dS dS )Nselected_alpn_protocolh2zHTTP/2zHTTP/1.1)getattrr   )r   r   identr   r   r   get_http_version"   s
   z!SyncSocketStream.get_http_versionhostnamessl_contexttimeoutc                 C   sr   | d}tjttjti}t| | j| |j	| j|
dd}W d    t|S 1 s0w   Y  t|S )Nconnectasciiserver_hostname)getsocketr#   r	   errorr   r   r   
settimeoutwrap_socketdecoder   )r   r!   r"   r#   connect_timeoutexc_mapwrappedr   r   r   	start_tls)   s   


zSyncSocketStream.start_tlsnc              	   C   s   | d}tjttjti}| j0 t| | j	| | j
|W  d    W  d    S 1 s3w   Y  W d    d S 1 sCw   Y  d S )Nread)r(   r)   r#   r   r*   r
   r   r   r   r+   recv)r   r2   r#   read_timeoutr/   r   r   r   r3   7   s   


"zSyncSocketStream.readdatac              	   C   s   | d}tjttjti}| j; t| |r,| j	| | j
|}||d  }|sW d    n1 s6w   Y  W d    d S W d    d S 1 sNw   Y  d S )Nwrite)r(   r)   r#   r   r*   r   r   r   r   r+   send)r   r6   r#   write_timeoutr/   r2   r   r   r   r7   @   s   

"zSyncSocketStream.writec              	   C   st   | j - ttjti | j  W d    n1 sw   Y  W d    d S W d    d S 1 s3w   Y  d S r   )r   r   r)   r*   r   r   closer   r   r   r   r:   K   s   "zSyncSocketStream.closec                 C   s"   t  | jgg g d\}}}t|S )Nr   )selectr   bool)r   rready_wready_xreadyr   r   r   is_connection_droppedP   s   z&SyncSocketStream.is_connection_droppedr   N)__name__
__module____qualname____doc__r)   r   strr    bytesr   r   r1   intr3   r7   r:   r=   rA   r   r   r   r   r      s"    
	
r   c                	   @   sZ   e Zd ZdddZdddZ			ddee ded	eddfd
dZdddZ	dddZ
dS )SyncLockr   Nc                 C   s   t  | _d S r   )r   r   _lockr;   r   r   r   r   V      zSyncLock.__init__c                 C      |    d S r   )acquirer;   r   r   r   	__enter__Y      zSyncLock.__enter__exc_type	exc_value	tracebackc                 C   rM   r   )release)r   rQ   rR   rS   r   r   r   __exit__\   s   zSyncLock.__exit__c                 C      | j   d S r   )rK   rT   r;   r   r   r   rT   d   rL   zSyncLock.releasec                 C   rV   r   )rK   rN   r;   r   r   r   rN   g   rL   zSyncLock.acquirerB   )NNN)rC   rD   rE   r   rO   r   BaseExceptionr   rU   rT   rN   r   r   r   r   rJ   U   s"    



rJ   c                   @   s@   e Zd ZdededdfddZddeddfdd	Zdd
dZdS )SyncSemaphore	max_value	exc_classr   Nc                 C   s   || _ || _t|| _d S r   )rY   rZ   r   	Semaphore
_semaphorer   rY   rZ   r   r   r   r   l   s   zSyncSemaphore.__init__r#   c                 C   s   | j j|ds|  d S )N)r#   )r\   rN   rZ   )r   r#   r   r   r   rN   q   s   zSyncSemaphore.acquirec                 C   rV   r   )r\   rT   r;   r   r   r   rT   u   rL   zSyncSemaphore.releaser   rB   )	rC   rD   rE   rI   typer   floatrN   rT   r   r   r   r   rX   k   s    rX   c                
   @   s`   e Zd Zdededee dedef
ddZ	de
fdd	Zd
ededefddZdefddZdS )SyncBackendr!   portr"   r#   r   c           	      C   s   | d|f}|d}tjttjti}t|! t||}|d ur-|j	|| dd}t
|dW  d    S 1 s<w   Y  d S )Nr%   r$   r&   )r   )r-   r(   r)   r#   r	   r*   r   r   create_connectionr,   r   )	r   r!   ra   r"   r#   addressr.   r/   r   r   r   r   open_tcp_streamz   s   


$zSyncBackend.open_tcp_streamc                 C   s   t  S r   )rJ   r;   r   r   r   create_lock   s   zSyncBackend.create_lockrY   rZ   c                 C   s   t ||dS )N)rZ   )rX   r]   r   r   r   create_semaphore   rP   zSyncBackend.create_semaphorec                 C   s   t  S r   )time	monotonicr;   r   r   r   rg      s   zSyncBackend.timeN)rC   rD   rE   rH   rI   r   r   r   r   rd   rJ   re   r^   rX   rf   r_   rg   r   r   r   r   r`   y   s    
r`   )r<   r)   r   rg   sslr   typesr   typingr   r   _exceptionsr   r   r	   r
   r   r   r   r   _typesr   r   rJ   rX   r`   r   r   r   r   <module>   s    (
?