U
    Vhl                     @   s   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
 d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ G d	d
 d
eZG dd deZG dd deZG dd deZG dd deZG dd deZdS )    N)
SSLContext)AnyIterable
NamedTupleOptionalListTuple)ClientConnectorErrorTCPConnector)AbstractResolverResolveResult)ResponseHandler)	ProxyTypeparse_proxy_url)Proxyc                   @   s6   e Zd Zdejfeeejee	 dddZ
dd ZdS )
NoResolverr   )hostportfamilyreturnc                    s   ||||dddgS )Nr   )hostnamer   r   r   protoflags )selfr   r   r   r   r   Y/var/www/html/arya_register/venvv2/lib/python3.8/site-packages/aiohttp_socks/connector.pyresolve   s    zNoResolver.resolvec                    s   d S Nr   )r   r   r   r   close   s    zNoResolver.closeN)__name__
__module____qualname__socketAF_INETstrintAddressFamilyr   r   r   r   r   r   r   r   r      s   r   c                       s.   e Zd ZdZejejdd fddZ  ZS )_ResponseHandlera   
    To fix issue https://github.com/romis2012/aiohttp-socks/issues/27
    In Python>=3.11.5 we need to keep a reference to the StreamWriter
    so that the underlying transport is not closed during garbage collection.
    See StreamWriter.__del__ method (was added in Python 3.11.5)
    N)loopwriterr   c                    s   t  | || _d S r   )super__init___writer)r   r(   r)   	__class__r   r   r+   +   s    z_ResponseHandler.__init__)	r   r    r!   __doc__asyncioAbstractEventLoopStreamWriterr+   __classcell__r   r   r-   r   r'   #   s   r'   c                   @   sT   e Zd Zedeejef dddZd	e	e
ee ee eejef dddZdS )
_BaseProxyConnector)client_error)r   c             
      sv   z$|d d d }|d d d }W n, t k
rP }	 ztd|	W 5 d }	~	X Y nX |d}
| j|||
|jdI d H S )Nr         zInvalid arg: `addr_infos`ssl)r   r   r8   timeout)
IndexError
ValueErrorget_connect_via_proxysock_connect)r   
addr_infosreqr9   r5   argskwargsr   r   er8   r   r   r   _wrap_create_connection1   s    	
z+_BaseProxyConnector._wrap_create_connectionNr   r   r8   r9   r   c                    s   t d S r   )NotImplementedError)r   r   r   r8   r9   r   r   r   r=   I   s    z&_BaseProxyConnector._connect_via_proxy)NN)r   r    r!   r	   r   r0   	Transportr   rD   r$   r%   r   r   floatr=   r   r   r   r   r4   0   s     r4   c                       s   e Zd Zejddddfeeeee ee ee ee	 e
dd	 fddZdeeee	 ee eejef dddZeee
d dd	d
Z  ZS )ProxyConnectorN)	r   r   
proxy_typeusernamepasswordrdns	proxy_sslrB   r   c           	         sF   t  |d< t jf | || _|| _|| _|| _|| _|| _|| _	d S Nresolver)
r   r*   r+   _proxy_type_proxy_host_proxy_port_proxy_username_proxy_password_rdns
_proxy_ssl)	r   r   r   rJ   rK   rL   rM   rN   rB   r-   r   r   r+   T   s    
zProxyConnector.__init__rE   c           	   	      sp   t | j| j| j| j| j| j| jd}|j||||dI d H }|j	j
}t| j|j	d}|| || ||fS )N)rJ   r   r   rK   rL   rM   rN   	dest_host	dest_portZdest_sslr9   r(   r)   )r   rQ   rR   rS   rT   rU   rV   rW   connectr)   	transportr'   _loopset_protocolconnection_made)	r   r   r   r8   r9   proxystreamr]   protocolr   r   r   r=   j   s.    


z!ProxyConnector._connect_via_proxy)urlrB   r   c                 K   s,   t |\}}}}}| f |||||d|S N)rJ   r   r   rK   rL   )r   )clsrd   rB   rJ   r   r   rK   rL   r   r   r   from_url   s    zProxyConnector.from_url)NN)r   r    r!   r   SOCKS5r$   r%   r   boolr   r   r+   rH   r   r0   rG   r   r=   classmethodrg   r3   r   r   r-   r   rI   S   s6     #rI   c                   @   sV   e Zd ZU eed< eed< eed< dZee ed< dZ	ee ed< dZ
ee ed< dS )	ProxyInforJ   r   r   NrK   rL   rM   )r   r    r!   r   __annotations__r$   r%   rK   r   rL   rM   ri   r   r   r   r   rk      s   
rk   c                       sj   e Zd Zee d fddZdeeee	 ee
 eejef dddZeee ed dd	d
Z  ZS )ChainProxyConnector)proxy_infosc                    s"   t  |d< t jf | || _d S rO   )r   r*   r+   _proxy_infos)r   rn   rB   r-   r   r   r+      s    
zChainProxyConnector.__init__NrE   c              
      s   d }d }| j D ]*}t|j|j|j|j|j|j|d}|}q|d k	sFt|j	||||dI d H }|j
j}	t| j|j
d}
|	|
 |
|	 |	|
fS )N)rJ   r   r   rK   rL   rM   forwardrX   r[   )ro   r   rJ   r   r   rK   rL   rM   AssertionErrorr\   r)   r]   r'   r^   r_   r`   )r   r   r   r8   r9   rp   ra   inforb   r]   rc   r   r   r   r=      s8    
	

z&ChainProxyConnector._connect_via_proxy)urlsrB   r   c                 K   sH   g }|D ]2}t |\}}}}}	t|||||	d}
||
 q| |f|S re   )r   rk   append)rf   rs   rB   infosrd   rJ   r   r   rK   rL   
proxy_infor   r   r   	from_urls   s    zChainProxyConnector.from_urls)NN)r   r    r!   r   rk   r+   r$   r%   r   r   rH   r   r0   rG   r   r=   rj   r   rw   r3   r   r   r-   r   rm      s   
  )rm   )r0   r"   r8   r   typingr   r   r   r   r   r   aiohttpr	   r
   Zaiohttp.abcr   r   Zaiohttp.client_protor   python_socksr   r   Zpython_socks.async_.asyncio.v2r   r   r'   r4   rI   rk   rm   r   r   r   r   <module>   s    #G	