o
    -˜Žjà  ã                   @   s�   U d dl Z d dlZd dlZd dlZd dlmZmZmZmZ d dl	Z	e 
e¡Ze	je	je	jdœZeeef ed< G dd„ deƒZG dd„ dƒZdS )	é    N)ÚTupleÚDictÚ	TypedDictÚOptional)ÚSOCKS4ÚSOCKS5ÚHTTPÚproxy_type_by_schemec                   @   s>   e Zd ZU eed< eed< eed< ee ed< ee ed< dS )ÚProxyÚschemeÚhostnameÚportÚusernameÚpasswordN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úintr   © r   r   úb/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/pyrogram/connection/transport/tcp/tcp.pyr
   %   s   
 r
   c                   @   sÂ   e Zd ZdZdededdfdd„Zdeee	f ddfd	d
„Z
deee	f ddfdd„Zdeee	f ddfdd„Zdeee	f ddfdd„Zddd„Zdeddfdd„Zdde	dee fdd„ZdS )ÚTCPé
   Úipv6ÚproxyÚreturnNc                 C   s0   || _ || _d | _d | _t ¡ | _t ¡ | _d S ©N)	r   r   ÚreaderÚwriterÚasyncioÚLockÚlockÚget_event_loopÚloop)Úselfr   r   r   r   r   Ú__init__0   s   
zTCP.__init__Údestinationc                 Ã   s  �| j  d¡}|d u rtdƒ‚t | ¡ ¡}|d u r!td|› �ƒ‚| j  d¡}| j  d¡}| j  d¡}| j  d¡}zt |¡}W n tyK   d}	Y nw t|tjƒ}	|	rWt	j
nt	j}
t |
¡}|j|||||d	� | tj¡ | jj||d
�I d H  | d¡ tj|d�I d H \| _| _d S )Nr   zNo scheme specifiedzUnknown proxy type r   r   r   r   F)Ú
proxy_typeÚaddrr   r   r   )ÚsockÚaddress)r*   )r   ÚgetÚ
ValueErrorr	   ÚupperÚ	ipaddressÚ
ip_addressÚ
isinstanceÚIPv6AddressÚsocketÚAF_INET6ÚAF_INETÚsocksÚ
socksocketÚ	set_proxyÚ
settimeoutr   ÚTIMEOUTr$   Úsock_connectÚsetblockingr    Úopen_connectionr   r   )r%   r'   r   r(   r   r   r   r   r0   Úis_proxy_ipv6Úproxy_familyr*   r   r   r   Ú_connect_via_proxy:   sF   €ÿ
ûþ
ÿzTCP._connect_via_proxyc                 Ã   s>   �|\}}| j rtjntj}tj|||d�I d H \| _| _d S )N)Úhostr   Úfamily)r   r3   r4   r5   r    r=   r   r   )r%   r'   rA   r   rB   r   r   r   Ú_connect_via_directi   s   €ýzTCP._connect_via_directc                 Ã   s0   �| j r|  |¡I d H  d S |  |¡I d H  d S r   )r   r@   rC   )r%   r'   r   r   r   Ú_connectu   s   €zTCP._connectr+   c                 Ã   s<   �zt  |  |¡tj¡I d H  W d S  t jy   tdƒ‚w )NzConnection timed out)r    Úwait_forrD   r   r:   ÚTimeoutError)r%   r+   r   r   r   Úconnect{   s   € ÿzTCP.connectc              
   Ã   sv   �| j d u rd S z| j  ¡  t | j  ¡ tj¡I d H  W d S  ty: } zt 	dt
|ƒj|¡ W Y d }~d S d }~ww )NzClose exception: %s %s)r   Úcloser    rE   Úwait_closedr   r:   Ú	ExceptionÚlogÚinfoÚtyper   )r%   Úer   r   r   rH   �   s   €

 "€ÿz	TCP.closeÚdatac                 Ã   s¦   �| j d u rd S | j4 I d H š7 z| j  |¡ | j  ¡ I d H  W n ty: } zt dt|ƒj|¡ t	|ƒ‚d }~ww W d   ƒI d H  d S 1 I d H sLw   Y  d S )NzSend exception: %s %s)
r   r"   ÚwriteÚdrainrJ   rK   rL   rM   r   ÚOSError)r%   rO   rN   r   r   r   Úsend‹   s   €
€þÿ.ýzTCP.sendr   Úlengthc              	   Ã   sx   �d}t |ƒ|k r:zt | j |t |ƒ ¡tj¡I d H }W n ttjfy*   Y d S w |r2||7 }nd S t |ƒ|k s	|S )Nó    )	Úlenr    rE   r   Úreadr   r:   rR   rF   )r%   rT   rO   Úchunkr   r   r   Úrecv—   s    €þÿ
ôzTCP.recv)r   N)r   )r   r   r   r:   Úboolr
   r&   r   r   r   r@   rC   rD   rG   rH   ÚbytesrS   r   rY   r   r   r   r   r   -   s$    

þ
ý/
þ
ý

r   )r    r/   Úloggingr3   Útypingr   r   r   r   r6   Ú	getLoggerr   rK   r   r   r   r	   r   r   r   r
   r   r   r   r   r   Ú<module>   s   

ý