§
    £	Êj+/  ã                   óZ  — 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	m
Z
mZmZ  G d„ dee j        ¦  «        Z G d	„ d
ee j        ¦  «        Z G d„ dee j        ¦  «        Z G d„ dee j        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d„ de j        ¦  «        Zej        eef         Z G d„ d ¦  «        ZdS )!é    Né   )Ú
StrOrBytes)Úsingledispatchmethod)ÚProtocolError)ÚAddressTypeÚdecode_addressÚencode_addressÚ#get_address_port_tuple_from_addressc                   ó"   — e Zd ZdZdZdZdZdZdS )ÚSOCKS5AuthMethodz-Enumeration of SOCKS5 authentication methods.ó    ó   ó   ó   ÿN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚNO_AUTH_REQUIREDÚGSSAPIÚUSERNAME_PASSWORDÚNO_ACCEPTABLE_METHODS© ó    ú>C:\Projects\Muse2API\.venv\Lib\site-packages\socksio/socks5.pyr   r      s-   € € € € € Ø7Ð7àÐØ€FØÐØ#ÐÐÐr   r   c                   ó   — e Zd ZdZdZdZdZdS )ÚSOCKS5CommandzEnumeration of SOCKS5 commands.r   r   ó   N)r   r   r   r   ÚCONNECTÚBINDÚUDP_ASSOCIATEr   r   r   r   r      s#   € € € € € Ø)Ð)à€GØ€DØ€M€M€Mr   r   c                   ó>   — e Zd ZdZdZdZdZededd fd„¦   «         Z	dS )	ÚSOCKS5ATypez$Enumeration of SOCKS5 address types.r   r   ó   ÚatypeÚreturnc                 óÈ   — |t           j        k    rt          j        S |t           j        k    rt          j        S |t           j        k    rt          j        S t          |¦  «        ‚©N)	r   ÚIPV4r#   ÚIPV4_ADDRESSÚDNÚDOMAIN_NAMEÚIPV6ÚIPV6_ADDRESSÚ
ValueError)Úclsr%   s     r   Ú
from_atypezSOCKS5AType.from_atype'   sT   € à•KÔ$Ò$Ð$ÝÔ+Ð+Ø•k”nÒ$Ð$ÝÔ*Ð*Ø•kÔ&Ò&Ð&ÝÔ+Ð+Ý˜ÑÔÐr   N)
r   r   r   r   r*   r,   r.   Úclassmethodr   r1   r   r   r   r#   r#       sU   € € € € € Ø.Ð.à€LØ€KØ€Làð ˜{ð  ¨}ð  ð  ð  ñ „[ð ð  ð  r   r#   c                   ó6   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS )ÚSOCKS5ReplyCodez"Enumeration of SOCKS5 reply codes.r   r   r   r   r$   ó   ó   ó   ó   N)r   r   r   r   Ú	SUCCEEDEDÚGENERAL_SERVER_FAILUREÚ!CONNECTION_NOT_ALLOWED_BY_RULESETÚNETWORK_UNREACHABLEÚHOST_UNREACHABLEÚCONNECTION_REFUSEDÚTTL_EXPIREDÚCOMMAND_NOT_SUPPORTEDÚADDRESS_TYPE_NOT_SUPPORTEDr   r   r   r4   r4   2   sJ   € € € € € Ø,Ð,à€IØ$ÐØ(/Ð%Ø!ÐØÐØ ÐØ€KØ#ÐØ!(ÐÐÐr   r4   c                   ó@   — e Zd ZU dZej        e         ed<   defd„Z	dS )ÚSOCKS5AuthMethodsRequestz—Encapsulates a request to the proxy for available authentication methods.

    Args:
        methods: A list of acceptable authentication methods.
    Úmethodsr&   c                 ó°   — d                      dt          | j        ¦  «                             dd¬¦  «        d                      | j        ¦  «        g¦  «        S )z=Packs the instance into a raw binary in the appropriate form.r   r5   r   Úbig©Ú	byteorder)ÚjoinÚlenrD   Úto_bytes©Úselfs    r   ÚdumpszSOCKS5AuthMethodsRequest.dumpsI   sS   € ð �xŠxàÝ�D”LÑ!Ô!×*Ò*¨1¸Ð*Ñ>Ô>Ø—’˜œÑ&Ô&ðñ
ô 
ð 	
r   N)
r   r   r   r   ÚtypingÚListr   Ú__annotations__ÚbytesrN   r   r   r   rC   rC   @   sQ   € € € € € € ðð ð Œ[Ð)Ô*Ð*Ð*Ñ*ð	
�uð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r   rC   c                   ó>   — e Zd ZU dZeed<   ededd fd„¦   «         ZdS )ÚSOCKS5AuthReplyzòEncapsulates a reply from the proxy with the authentication method to be used.

    Args:
        method: The authentication method to be used.

    Raises:
        ProtocolError: If the data does not conform with the expected structure.
    ÚmethodÚdatar&   c                 óÎ   — t          |¦  «        dk    rt          d¦  «        ‚	  | t          |dd…         ¦  «        ¬¦  «        S # t          $ r}t          d¦  «        |‚d}~ww xY w)zÛUnpacks the authentication reply data into an instance.

        Returns:
            The unpacked authentication reply instance.

        Raises:
            ProtocolError: If the data does not match the spec.
        é   úMalformed replyr   )rU   N)rJ   r   r   r/   )r0   rV   Úexcs      r   ÚloadszSOCKS5AuthReply.loadsa   s{   € õ ˆt‰9Œ9˜Š>ˆ>ÝÐ 1Ñ2Ô2Ð2ð	<Ø�3Õ.¨t°A°a°C¬yÑ9Ô9Ð:Ñ:Ô:Ð:øÝð 	<ð 	<ð 	<ÝÐ 1Ñ2Ô2¸Ð;øøøøð	<øøøs   ¤ A Á
A$ÁAÁA$N)	r   r   r   r   r   rQ   r2   rR   r[   r   r   r   rT   rT   U   s[   € € € € € € ðð ð ÐÐÑàð<˜ð <Ð#4ð <ð <ð <ñ „[ð<ð <ð <r   rT   c                   ó4   — e Zd ZU dZeed<   eed<   defd„ZdS )ÚSOCKS5UsernamePasswordRequestzLEncapsulates a username/password authentication request to the proxy server.ÚusernameÚpasswordr&   c           	      óæ   — d                      dt          | j        ¦  «                             dd¬¦  «        | j        t          | j        ¦  «                             dd¬¦  «        | j        g¦  «        S )úxPacks the instance into a raw binary in the appropriate form.

        Returns:
            The packed request.
        r   r   r   rF   rG   )rI   rJ   r^   rK   r_   rL   s    r   rN   z#SOCKS5UsernamePasswordRequest.dumpsz   sl   € ð �xŠxàÝ�D”MÑ"Ô"×+Ò+¨A¸Ð+Ñ?Ô?Ø”Ý�D”MÑ"Ô"×+Ò+¨A¸Ð+Ñ?Ô?Ø”ðñ
ô 
ð 	
r   N)r   r   r   r   rR   rQ   rN   r   r   r   r]   r]   t   sI   € € € € € € ØVÐVà€O€O�OØ€O€O�Oð
�uð 
ð 
ð 
ð 
ð 
ð 
r   r]   c                   ó>   — e Zd ZU dZeed<   ededd fd„¦   «         ZdS )ÚSOCKS5UsernamePasswordReplyzLEncapsulates a username/password authentication reply from the proxy server.ÚsuccessrV   r&   c                 ó"   —  | |dk    ¬¦  «        S )zŠUnpacks the reply authentication data into an instance.

        Returns:
            The unpacked authentication reply instance.
        s    )rd   r   ©r0   rV   s     r   r[   z!SOCKS5UsernamePasswordReply.loads�   s   € ð ˆs˜4 ;Ò.Ð/Ñ/Ô/Ð/r   N)	r   r   r   r   ÚboolrQ   r2   rR   r[   r   r   r   rc   rc   ‹   sR   € € € € € € ØVÐVà€M€M�Màð0˜ð 0Ð#@ð 0ð 0ð 0ñ „[ð0ð 0ð 0r   rc   c            	       ó¼   — e Zd ZU dZeed<   eed<   eed<   eed<   e	dede
j        ee
j        eef         f         dd fd„¦   «         Zdefd	„Zedefd
„¦   «         ZdS )ÚSOCKS5CommandRequesta	  Encapsulates a command request to the proxy server.

    Args:
        command: The command to request.
        atype: The address type of the addr field.
        addr: Address of the target host.
        port: The port number to connect to on the target host.
    Úcommandr%   ÚaddrÚportÚaddressr&   c                 ó˜   — t          |¦  «        \  }}t          |¦  «        \  }} | |t                               |¦  «        ||¬¦  «        S )a½  Convenience class method to build an instance from command and address.

        Args:
            command: The command to request.
            address: A string in the form 'HOST:PORT' or a tuple of ip address string
                and port number. The address type will be inferred.

        Returns:
            A SOCKS5CommandRequest instance.

        Raises:
            SOCKSError: If a domain name or IPv6 address was supplied.
        )rj   r%   rk   rl   )r
   r	   r#   r1   )r0   rj   rm   rl   r%   Úencoded_addrs         r   Úfrom_addressz!SOCKS5CommandRequest.from_address©   sZ   € õ& <¸GÑDÔD‰ˆ�Ý,¨WÑ5Ô5Ñˆˆ|ØˆsØÝ×(Ò(¨Ñ/Ô/ØØð	
ñ 
ô 
ð 	
r   c                 óŠ   — d                      d| j        d| j        | j        | j                             dd¬¦  «        g¦  «        S )ra   r   r5   r   rX   rF   rG   )rI   rj   r%   Úpacked_addrrl   rK   rL   s    r   rN   zSOCKS5CommandRequest.dumpsÅ   sM   € ð �xŠxàØ”ØØ”
ØÔ Ø”×$Ò$ Q°%Ð$Ñ8Ô8ðñ	
ô 	
ð 		
r   c                 ó@  — | j         t          j        k    r!t          | j        ¦  «        dk    sJ ‚| j        S | j         t          j        k    r!t          | j        ¦  «        dk    sJ ‚| j        S t          | j        ¦  «        }|                     dd¬¦  «        | j        z   S )zGProperty returning the packed address in the correct form for its type.é   é   r   rF   rG   )r%   r#   r*   rJ   rk   r.   rK   )rM   Úlengths     r   rr   z SOCKS5CommandRequest.packed_addrÖ   s�   € ð Œ:�Ô1Ò1Ð1Ý�t”y‘>”> QÒ&Ð&Ð&Ð&Ø”9ÐØŒZ�;Ô3Ò3Ð3Ý�t”y‘>”> RÒ'Ð'Ð'Ð'Ø”9Ðå˜œ‘^”^ˆFØ—?’? 1°�?Ñ6Ô6¸¼ÑBÐBr   N)r   r   r   r   r   rQ   r#   rR   Úintr2   rO   ÚUnionr   ÚTuplerp   rN   Úpropertyrr   r   r   r   ri   ri   š   sæ   € € € € € € ðð ð ÐÐÑØÐÐÑØ
€K€K�KØ
€I€I�Iàð
àð
ð ”˜j¨&¬,°zÀ3°Ô*GÐGÔHð
ð 
 ð	
ð 
ð 
ñ „[ð
ð6
�uð 
ð 
ð 
ð 
ð" ð
C˜Uð 
Cð 
Cð 
Cñ „Xð
Cð 
Cð 
Cr   ri   c                   ó\   — e Zd ZU dZeed<   eed<   eed<   eed<   e	de
dd fd„¦   «         Zd	S )
ÚSOCKS5Replya  Encapsulates a reply from the SOCKS5 proxy server

    Args:
        reply_code: The code representing the type of reply.
        atype: The address type of the addr field.
        addr: Optional IP address returned.
        port: The port number returned.
    Ú
reply_coder%   rk   rl   rV   r&   c           
      óŒ  — |dd…         dk    rt          d¦  «        ‚	 t          |dd…         ¦  «        } | t          |dd…         ¦  «        |t          t	          j        |¦  «        |dd…         ¦  «        t                               |dd	…         d
¬¦  «        ¬¦  «        S # t          $ r}t          d¦  «        |‚d	}~ww xY w)z½Unpacks the reply data into an instance.

        Returns:
            The unpacked reply instance.

        Raises:
            ProtocolError: If the data does not match the spec.
        r   r   r5   rY   é   rt   rX   éþÿÿÿNrF   rG   )r}   r%   rk   rl   )	r   r#   r4   r   r   Úfrom_socks5_atyperw   Ú
from_bytesr/   )r0   rV   r%   rZ   s       r   r[   zSOCKS5Reply.loadsó   sÝ   € ð ��!�Œ9˜ÒÐÝÐ 1Ñ2Ô2Ð2ð
	<Ý  Q q S¤	Ñ*Ô*ˆEà�3Ý*¨4°°!°¬9Ñ5Ô5ØÝ#¥KÔ$AÀ%Ñ$HÔ$HÈ$ÈqÐQSÈtÌ*ÑUÔUÝ—^’^ D¨¨¨¤I¸�^Ñ?Ô?ð	ñ ô ð øõ ð 	<ð 	<ð 	<ÝÐ 1Ñ2Ô2¸Ð;øøøøð	<øøøs   ŸBB$ Â$
CÂ.B>Â>CN)r   r   r   r   r4   rQ   r#   Ústrrw   r2   rR   r[   r   r   r   r|   r|   ä   sx   € € € € € € ðð ð  ÐÐÑØÐÐÑØ
€I€I�IØ
€I€I�Iàð<˜ð < =ð <ð <ð <ñ „[ð<ð <ð <r   r|   c                   ó|   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   e	dedd fd	„¦   «         Z
defd
„ZdS )ÚSOCKS5DatagramzXEncapsulates a SOCKS5 datagram for UDP connections.

    Currently not implemented.
    r%   rk   rl   rV   ÚfragmentÚlast_fragmentr&   c                 ó   — t          ¦   «         ‚r(   ©ÚNotImplementedErrorrf   s     r   r[   zSOCKS5Datagram.loads  s   € å!Ñ#Ô#Ð#r   c                 ó   — t          ¦   «         ‚r(   r‰   rL   s    r   rN   zSOCKS5Datagram.dumps  s   € Ý!Ñ#Ô#Ð#r   N)r   r   r   r   r#   rQ   rR   rw   rg   r2   r[   rN   r   r   r   r…   r…     s¦   € € € € € € ðð ð
 ÐÐÑØ
€K€K�KØ
€I€I�IØ
€K€K�Kà€M€M�MØÐÐÑàð$˜ð $Ð#3ð $ð $ð $ñ „[ð$ð$�uð $ð $ð $ð $ð $ð $r   r…   c                   ó.   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ÚSOCKS5Statez&Enumeration of SOCKS5 protocol states.r   rX   r   rt   é   é   é   N)r   r   r   r   ÚCLIENT_AUTH_REQUIREDÚSERVER_AUTH_REPLYÚCLIENT_AUTHENTICATEDÚTUNNEL_READYÚ$CLIENT_WAITING_FOR_USERNAME_PASSWORDÚSERVER_VERIFY_USERNAME_PASSWORDÚ
MUST_CLOSEr   r   r   r�   r�   #  s<   € € € € € Ø0Ð0àÐØÐØÐØ€LØ+,Ð(Ø&'Ð#Ø€J€J€Jr   r�   c                   ó`  — e Zd ZdZdd„Zedefd„¦   «         Zede	ddfd„¦   «         Z
e
                     e¦  «        deddfd„¦   «         Ze
                     e¦  «        deddfd	„¦   «         Ze
                     e¦  «        deddfd
„¦   «         Zdedej        eeef         fd„Zdefd„ZdS )ÚSOCKS5Connectionz Encapsulates a SOCKS5 connection.

    Packs request objects into data suitable to be send and unpacks reply
    data into their appropriate reply objects.
    r&   Nc                 ót   — t          ¦   «         | _        t          ¦   «         | _        t          j        | _        d S r(   )Ú	bytearrayÚ_data_to_sendÚ_received_datar�   r‘   Ú_staterL   s    r   Ú__init__zSOCKS5Connection.__init__9  s(   € Ý&™[œ[ˆÔÝ'™kœkˆÔÝ!Ô6ˆŒˆˆr   c                 ó   — | j         S )z*Returns the current state of the protocol.)rž   rL   s    r   ÚstatezSOCKS5Connection.state>  s   € ð Œ{Ðr   Úrequestc                 ó   — t          ¦   «         ‚)zÊPacks a request object and adds it to the send data buffer.

        Also progresses the protocol state of the connection.

        Args:
            request: The request instance to be packed.
        r‰   ©rM   r¢   s     r   ÚsendzSOCKS5Connection.sendC  s   € õ "Ñ#Ô#Ð#r   c                 ól   — | xj         |                     ¦   «         z  c_         t          j        | _        d S r(   )rœ   rN   r�   r’   rž   r¤   s     r   Ú_auth_methodszSOCKS5Connection._auth_methodsN  s,   € àÐÔ˜gŸmšm™oœoÑ-ÐÔÝ!Ô3ˆŒˆˆr   c                 ó´   — | j         t          j        k    rt          d¦  «        ‚t          j        | _         | xj        |                     ¦   «         z  c_        d S )Nz/Not currently waiting for username and password)rž   r�   r•   r   r–   rœ   rN   r¤   s     r   Ú_auth_username_passwordz(SOCKS5Connection._auth_username_passwordS  sM   € àŒ;�+ÔJÒJÐJÝÐ QÑRÔRÐRÝ!ÔAˆŒØÐÔ˜gŸmšm™oœoÑ-ÐÔÐÐr   c                 ó’   — | j         t          j        k     rt          d¦  «        ‚| xj        |                     ¦   «         z  c_        d S )NzASOCKS5 connections must be authenticated before sending a request)rž   r�   r“   r   rœ   rN   r¤   s     r   Ú_commandzSOCKS5Connection._commandZ  sK   € àŒ;�Ô9Ò9Ð9ÝØSñô ð ð 	ÐÔ˜gŸmšm™oœoÑ-ÐÔÐÐr   rV   c                 ó¢  — | j         t          j        k    rit                               |¦  «        }|j        t          j        k    rt          j        | _         n&|j        t          j	        k    rt          j
        | _         |S | j         t          j        k    rFt                               |¦  «        }|j        rt          j
        | _         nt          j        | _         |S | j         t          j
        k    rTt                               |¦  «        }|j        t"          j        k    rt          j        | _         nt          j        | _         |S t)          ¦   «         ‚)zæUnpacks response data into a reply object.

        Args:
            data: The raw response data from the proxy server.

        Returns:
            A reply instance corresponding to the connection state and reply data.
        )rž   r�   r’   rT   r[   rU   r   r   r•   r   r“   r–   rc   rd   r—   r|   r}   r4   r9   r”   rŠ   )rM   rV   Ú
auth_replyÚusername_password_replyÚreplys        r   Úreceive_datazSOCKS5Connection.receive_datab  s  € ð Œ;�+Ô7Ò7Ð7Ý(×.Ò.¨tÑ4Ô4ˆJØÔ Õ$4Ô$FÒFÐFÝ)ÔN�”�ØÔ"Õ&6Ô&GÒGÐGÝ)Ô>�”ØÐàŒ;�+ÔEÒEÐEÝ&A×&GÒ&GÈÑ&MÔ&MÐ#Ø&Ô.ð 5Ý)Ô>�”�å)Ô4�”Ø*Ð*àŒ;�+Ô:Ò:Ð:Ý×%Ò% dÑ+Ô+ˆEØÔ¥?Ô#<Ò<Ð<Ý)Ô6�”�å)Ô4�”àˆLå!Ñ#Ô#Ð#r   c                 óT   — t          | j        ¦  «        }t          ¦   «         | _        |S )zqReturns the data to be sent via the I/O library of choice.

        Also clears the connection's buffer.
        )rR   rœ   r›   )rM   rV   s     r   Údata_to_sendzSOCKS5Connection.data_to_sendˆ  s%   € õ
 �TÔ'Ñ(Ô(ˆÝ&™[œ[ˆÔØˆr   )r&   N)r   r   r   r   rŸ   rz   r�   r¡   r   ÚSOCKS5RequestTyper¥   ÚregisterrC   r§   r]   r©   ri   r«   rR   rO   rx   rT   r|   rc   r°   r²   r   r   r   r™   r™   2  s�  € € € € € ðð ð7ð 7ð 7ð 7ð
 ð�{ð ð ð ñ „Xðð ð$Ð-ð $°$ð $ð $ð $ñ Ôð$ð 
‡]‚]Ð+Ñ,Ô,ð4Ð%=ð 4À$ð 4ð 4ð 4ñ -Ô,ð4ð 
‡]‚]Ð0Ñ1Ô1ð.Ð/Lð .ÐQUð .ð .ð .ñ 2Ô1ð.ð 
‡]‚]Ð'Ñ(Ô(ð.Ð 8ð .¸Tð .ð .ð .ñ )Ô(ð.ð$$Øð$$à	Œ�o {Ð4OÐOÔ	Pð$$ð $$ð $$ð $$ðL˜eð ð ð ð ð ð r   r™   ) ÚenumrO   Ú_typesr   Úcompatr   Ú
exceptionsr   Úutilsr   r   r	   r
   rR   ÚEnumr   r   r#   r4   Ú
NamedTuplerC   rT   r]   rc   ri   r|   r…   ÚIntEnumr�   rx   r³   r™   r   r   r   ú<module>r½      s  ðØ €€€Ø €€€à Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ø %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð ð$ð $ð $ð $ð $�u˜dœiñ $ô $ð $ðð ð ð ð �E˜4œ9ñ ô ð ð ð  ð  ð  ð  �%˜œñ  ô  ð  ð$)ð )ð )ð )ð )�e˜TœYñ )ô )ð )ð
ð 
ð 
ð 
ð 
˜vÔ0ñ 
ô 
ð 
ð*<ð <ð <ð <ð <�fÔ'ñ <ô <ð <ð>
ð 
ð 
ð 
ð 
 FÔ$5ñ 
ô 
ð 
ð.0ð 0ð 0ð 0ð 0 &Ô"3ñ 0ô 0ð 0ðGCð GCð GCð GCð GC˜6Ô,ñ GCô GCð GCðT&<ð &<ð &<ð &<ð &<�&Ô#ñ &<ô &<ð &<ðR$ð $ð $ð $ð $�VÔ&ñ $ô $ð $ð,	ð 	ð 	ð 	ð 	�$”,ñ 	ô 	ð 	ð ”LÐ!9Ð;OÐ!OÔPÐ ð]ð ]ð ]ð ]ð ]ñ ]ô ]ð ]ð ]ð ]r   