U
    wi                     @   sl   d dl Z d dlZd dlmZ ddlmZ ddlmZ ddlm	Z
 dZee j ejef ZG d	d
 d
e
jZdS )    N)Union   )SSLTransport   )
ProxyError)_abci   c                   @   sn   e Zd ZU eed< edddZdd ZefddZd	d
 Z	e
ejd dddZdd ZeedddZdS )SyncSocketStream_socket)sockc                 C   s
   || _ d S Nr	   )selfr
    r   @/tmp/pip-unpacked-wheel-kpmwgv_b/python_socks/sync/v2/_stream.py__init__   s    zSyncSocketStream.__init__c                 C   s   | j | d S r   )r	   sendall)r   datar   r   r   	write_all   s    zSyncSocketStream.write_allc                 C   s   | j |S r   )r	   recv)r   Z	max_bytesr   r   r   read   s    zSyncSocketStream.readc                 C   s@   t  }t||k r<| j|t| }|s2td||7 }q|S )NzConnection closed unexpectedly)	bytearraylenr	   r   r   )r   nr   packetr   r   r   
read_exact   s    
zSyncSocketStream.read_exact)hostnamessl_contextreturnc                 C   s<   t | jtjtfr$t| j||d}n|j| j|d}t|S )N)r   server_hostname)r   )
isinstancer	   ssl	SSLSocketr   wrap_socketr   )r   r   r   Z
ssl_socketr   r   r   	start_tls$   s    zSyncSocketStream.start_tlsc                 C   s   | j   d S r   )r	   closer   r   r   r   r$   3   s    zSyncSocketStream.close)r   c                 C   s   | j S r   r   r%   r   r   r   socket6   s    zSyncSocketStream.socketN)__name__
__module____qualname__
SocketType__annotations__r   r   DEFAULT_RECEIVE_SIZEr   r   strr    
SSLContextr#   r$   propertyr&   r   r   r   r   r      s   
	r   )r&   r    typingr   Z_ssl_transportr   _errorsr    r   abcr,   r!   r*   r   r   r   r   r   <module>   s   