
    i*
                     b    d dl Z d dlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ  G d	 d
e      Zy)    N)Optional   )SyncSocketStreamSyncResolver   )SyncConnector)socks5)is_ip_addressc                   r    e Zd Zdee   dee   dee   defdZdedede	d	e
j                  fd
Zded	efdZy)Socks5SyncConnectorusernamepasswordrdnsresolverc                 D    |d}|| _         || _        || _        || _        y )NT)	_username	_password_rdns	_resolver)selfr   r   r   r   s        W/root/searxng-venv/lib/python3.12/site-packages/python_socks/_connectors/socks5_sync.py__init__zSocks5SyncConnector.__init__   s*     <D!!
!    streamhostportreturnc                    t        j                         }t        j                  | j                  | j                        }|j                  |      }|j                  |       |j                  t         j                  j                        }|j                  |      }|j                  t         j                  j                  k(  rt        j                  | j                  | j                        }|j                  |      }|j                  |       |j                  t         j                  j                        }|j                  |      }t!        |      s:| j"                  s.| j$                  j'                  |t(        j*                        \  }}t        j,                  ||      }|j                  |      }|j                  |       | j/                  |      }|j                  |      }|S )N)r   r   )family)r   r   )r	   
ConnectionAuthMethodsRequestr   r   send	write_all
read_exactAuthMethodReplySIZEreceivemethod
AuthMethodUSERNAME_PASSWORDAuthRequest	AuthReplyr
   r   r   resolvesocket	AF_UNSPECConnectRequest_read_reply)	r   r   r   r   connrequestdatareply_s	            r   connectzSocks5SyncConnector.connect   sr      " ++T^^dnn]yy!  !7!7!<!<=(,T(: <<6,,>>>(($..4>>ZG99W%DT"$$V%5%5%:%:;D"&,,t"4A T"4::nn,,T&:J:J,KGAt''T=yy!'%)\\$%7r   c                 d   |j                  d      }|d   t        j                  k7  r|S |d   t        j                  j                  k7  r|S |d   t        j
                  k7  r|S ||j                  d      z  }|d   }|t        j                  j                  k(  r||j                  d      z  }|S |t        j                  j                  k(  r||j                  d      z  }|S |t        j                  j                  k(  r0||j                  d      z  }|d   }||j                  |dz         z  }|S )N   r   r   r         )
r$   r	   	SOCKS_VER	ReplyCode	SUCCEEDEDRSVAddressTypeIPV4IPV6DOMAIN)r   r   r4   	addr_typehost_lens        r   r1   zSocks5SyncConnector._read_replyA   s-     #7f&&&K7f&&000K7fjj K!!!$$G	**///F%%a((D  &,,111F%%b))D  &,,333F%%a((DBxHF%%hl33Dr   N)__name__
__module____qualname__r   strboolr   r   r   intr	   ConnectReplyr7   bytesr1    r   r   r   r      s    "3-" 3-" tn	"
 "# # # 	#
 
		#L"2 u r   r   )r.   typingr   _abcr   r   abcr   
_protocolsr	   _helpersr
   r   rO   r   r   <module>rU      s%      1   $K- Kr   