a
    Ù;’hè"  ã                   @   sø   d dl Z d dlZd dlZddlmZ dZdZd Ze dd d d d¡Z	dZ
dZd ZG d	d
„ d
ƒZG dd„ deƒZG dd„ dƒZG dd„ dƒ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ƒZe  dd¡ZG dd„ dejƒZdS )é    Né   )Ú
compat_ordz"Timo Schmid <coding@timoschmid.de>é   z!BBBBéÿ   é   c                   @   s   e Zd ZdZdZdS )ÚSocks4Commandr   é   N)Ú__name__Ú
__module__Ú__qualname__ÚCMD_CONNECTZCMD_BIND© r   r   úQ/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/yt_dlp/socks.pyr      s   r   c                   @   s   e Zd ZdZdS )ÚSocks5Commandé   N)r	   r
   r   ZCMD_UDP_ASSOCIATEr   r   r   r   r   #   s   r   c                   @   s   e Zd ZdZdZdZdZdS )Ú
Socks5Authr   r   r   r   N)r	   r
   r   Ú	AUTH_NONEZAUTH_GSSAPIÚAUTH_USER_PASSÚAUTH_NO_ACCEPTABLEr   r   r   r   r   '   s   r   c                   @   s   e Zd ZdZdZdZdS )ÚSocks5AddressTyper   r   r   N)r	   r
   r   Ú	ATYP_IPV4ÚATYP_DOMAINNAMEÚ	ATYP_IPV6r   r   r   r   r   .   s   r   c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )Ú
ProxyErrorr   Nc                    s2   |d ur |d u r | j  |¡pd}tƒ  ||¡ d S )Nzunknown error)ÚCODESÚgetÚsuperÚ__init__)ÚselfÚcodeÚmsg©Ú	__class__r   r   r   7   s    zProxyError.__init__)NN)r	   r
   r   ÚERR_SUCCESSr   Ú__classcell__r   r   r!   r   r   4   s   r   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚInvalidVersionErrorc                    s&   d|d›d|d›}t ƒ  d|¡ d S )Nz/Invalid response version from server. Expected Z02xz got r   )r   r   )r   Úexpected_versionÚgot_versionr    r!   r   r   r   >   s    
ÿzInvalidVersionError.__init__)r	   r
   r   r   r$   r   r   r!   r   r%   =   s   r%   c                   @   s   e Zd ZdZddddœZdS )ÚSocks4ErroréZ   zrequest rejected or failedzLrequest rejected because SOCKS server cannot connect to identd on the clientzPrequest rejected because the client program and identd report different user-ids)é[   é\   é]   N)r	   r
   r   r#   r   r   r   r   r   r(   D   s
   ýr(   c                   @   s*   e Zd ZdZdddddddd	d
ddœ
ZdS )ÚSocks5Errorr   zgeneral SOCKS server failurez!connection not allowed by rulesetzNetwork unreachablezHost unreachablezConnection refusedzTTL expiredzCommand not supportedzAddress type not supportedz$unknown username or invalid passwordz0all offered authentication methods were rejected)
r   r   r   r   r   é   é   é   éþ   r   N)r	   r
   r   ÚERR_GENERAL_FAILUREr   r   r   r   r   r-   N   s   ör-   c                   @   s   e Zd ZdZdZdZdS )Ú	ProxyTyper   r   r   N)r	   r
   r   ÚSOCKS4ÚSOCKS4AÚSOCKS5r   r   r   r   r3   _   s   r3   ÚProxy)ÚtypeÚhostÚportÚusernameÚpasswordÚ
remote_dnsc                       sŽ   e Zd Z‡ fdd„Zd dd„Zdd„ Zd	d
„ Zedd„ ƒZdd„ Z	d!dd„Z
d"dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )#Úsockssocketc                    s   d | _ tƒ j|i |¤Ž d S ©N)Ú_proxyr   r   )r   ÚargsÚkwargsr!   r   r   r   j   s    zsockssocket.__init__TNc                 C   s0   |t jt jt jfv sJ ‚t||||||ƒ| _d S r?   )r3   r4   r5   r6   r7   r@   )r   Ú	proxytypeÚaddrr:   Úrdnsr;   r<   r   r   r   Úsetproxyn   s    zsockssocket.setproxyc                 C   sJ   d}t |ƒ|k rF|  |t |ƒ ¡}|s<t|t |ƒ › dƒ‚||7 }q|S )Nó    z bytes missing)ÚlenÚrecvÚEOFError)r   ÚcntÚdataÚcurr   r   r   Úrecvalls   s    
zsockssocket.recvallc                 C   s   |   |¡}t d|› d|¡S )Nú!ÚB)rN   ÚstructÚunpack)r   rK   rL   r   r   r   Ú_recv_bytes|   s    
zsockssocket._recv_bytesc                 C   s   t  dt| ƒ¡|  S )Nú!B)rQ   ÚpackrH   )rL   r   r   r   Ú_len_and_data€   s    zsockssocket._len_and_datac                 C   s   ||kr|   ¡  t||ƒ‚d S r?   )Úcloser%   )r   r&   r'   r   r   r   Ú_check_response_version„   s    z#sockssocket._check_response_versionc           	   	   C   sœ   |r
|fn
t jt jfD ]2}z|t  ||¡fW   S  tyF   Y qY q0 q|r^| jjr^d|fS t j|d |pldd}|d \}}}}}|t  ||d ¡fS d S )Nr   )Úfamily)ÚsocketÚAF_INETÚAF_INET6Ú	inet_ptonÚOSErrorr@   r=   Úgetaddrinfo)	r   ÚdestaddrÚdefaultÚuse_remote_dnsrY   ÚfÚresÚ_Úipaddrr   r   r   Ú_resolve_address‰   s    zsockssocket._resolve_addressFc                 C   sÈ   |\}}| j |t|tjd\}}t dttj|¡| }| j	j
p@d ¡ }||d 7 }|rv| j	jrv|tkrv|| ¡ d 7 }|  |¡ t d|  d¡¡\}	}
}}|  t|	¡ |
tjkrÀ|  ¡  t|
ƒ‚||fS )N)rb   rY   z!BBHÚ ó    z!BBHIr0   )rg   ÚSOCKS4_DEFAULT_DSTIPrZ   r[   rQ   rU   ÚSOCKS4_VERSIONr   r   r@   r;   Úencoder=   ÚsendallrR   rN   rX   ÚSOCKS4_REPLY_VERSIONr(   r#   rW   )r   ÚaddressÚis_4ar`   r:   re   rf   Úpacketr;   ÚversionZ	resp_codeZdstportZdsthostr   r   r   Ú_setup_socks4—   s    

zsockssocket._setup_socks4c                 C   s   | j |dd d S )NT)rp   )rs   ©r   ro   r   r   r   Ú_setup_socks4a°   s    zsockssocket._setup_socks4ac                 C   sL  t  dt¡}tjg}| jjr0| jjr0| tj	¡ |t  dt
|ƒ¡7 }|t jdt
|ƒ› dg|¢R Ž 7 }|  |¡ |  d¡\}}|  t|¡ |tjks®|tj	krÀ| jjr®| jjsÀ|  ¡  ttjƒ‚|tj	krH| jj ¡ }| jj ¡ }t  dt¡}||  |¡|  |¡ 7 }|  |¡ |  d¡\}}|  t|¡ |tkrH|  ¡  ttjƒ‚d S )NrT   rO   rP   r   )rQ   rU   ÚSOCKS5_VERSIONr   r   r@   r;   r<   Úappendr   rH   rm   rS   rX   r   rW   r-   rl   ÚSOCKS5_USER_AUTH_VERSIONrV   ÚSOCKS5_USER_AUTH_SUCCESSr2   )r   rq   Zauth_methodsrr   Úmethodr;   r<   Ústatusr   r   r   Ú_socks5_auth³   s:    "

ÿÿÿ


zsockssocket._socks5_authc                 C   st  |\}}| j |d dd\}}|  ¡  d}t dttj|¡}|d u rl| ¡ }|t dtj	¡7 }||  
|¡7 }nB|tjkrŽ|t dtj¡| 7 }n |tjkr®|t dtj¡| 7 }|t d|¡7 }|  |¡ |  d¡\}}	}}
|  t|¡ |	tjkr|  ¡  t|	ƒ‚|
tjkr|  d¡}n<|
tj	kr@t|  d¡ƒ}|  |¡}n|
tjkrV|  d	¡}t d|  d
¡¡d }||fS )NT)rb   r   z!BBBrT   z!Hr   r   é   r   )rg   r|   rQ   rU   rv   r   r   rl   r   r   rV   rZ   r[   r   r\   r   rm   rS   rX   r-   r#   rW   rN   r   rI   rR   )r   ro   r`   r:   rY   rf   Úreservedrq   rr   r{   ÚatypeÚalenZdestportr   r   r   Ú_setup_socks5×   s:    



zsockssocket._setup_socks5c                 C   sj   | j s|| |ƒS || | j j| j jfƒ}|dkr:|d ur:|S tj| jtj| jtj| j	i}|| j j
 |ƒ |S )Nr   )r@   r9   r:   r3   r4   rs   r5   ru   r6   r   r8   )r   Zconnect_funcro   ÚresultZsetup_funcsr   r   r   Ú_make_proxyÿ   s    
ýzsockssocket._make_proxyc                 C   s   |   tjj|¡ d S r?   )rƒ   rZ   Úconnectrt   r   r   r   r„     s    zsockssocket.connectc                 C   s   |   tjj|¡S r?   )rƒ   rZ   Ú
connect_exrt   r   r   r   r…     s    zsockssocket.connect_ex)TNN)N)F)r	   r
   r   r   rF   rN   rS   ÚstaticmethodrV   rX   rg   rs   ru   r|   r   rƒ   r„   r…   r$   r   r   r!   r   r>   i   s   
	


$(r>   )ÚcollectionsrZ   rQ   Úcompatr   Ú
__author__rk   rn   rU   rj   rv   rx   ry   r   r   r   r   r^   r   r%   r(   r-   r3   Ú
namedtupler7   r>   r   r   r   r   Ú<module>	   s*   	
