+
    üÐjù  ã                   ó  € R t ^ RIt^ RIt^ RIt^ RIt^ RIHtHtHt ^ RI	H
t
  ! R R]P                  4      t ! R R]P                  4      t ! R R	]P                  4      t ! R
 R]P                  4      t ! R R]P                  4      tR# )z)
Implementation of the SOCKSv4 protocol.
N)ÚdeferÚprotocolÚreactor)Úlogc                   ó>   a € ] tR t^t o R tR tR tR tR tRt	V t
R# )ÚSOCKSv4Outgoingc                ó   € Wn         R # ©N©Úsocks©Úselfr   s   &&Ú9/usr/lib/python3/dist-packages/twisted/protocols/socks.pyÚ__init__ÚSOCKSv4Outgoing.__init__   s   € ØŽ
ó    c                óÀ   € V P                   P                  4       pV P                  P                  ^Z^ VP                  VP
                  R7       W P                  n        R# )éZ   )ÚportÚipN)Ú	transportÚgetPeerr   Ú	makeReplyr   ÚhostÚ	otherConn)r   Úpeers   & r   ÚconnectionMadeÚSOCKSv4Outgoing.connectionMade   sA   € Ø�~‰~×%Ñ%Ó'ˆØ�
‰
×Ñ˜R ¨¯©°t·y±yÐÔAØ#�
‰
Ör   c                óN   € V P                   P                  P                  4        R # r	   ©r   r   ÚloseConnection©r   Úreasons   &&r   ÚconnectionLostÚSOCKSv4Outgoing.connectionLost   ó   € Ø�
‰
×Ñ×+Ñ+Ö-r   c                ó<   € V P                   P                  V4       R # r	   ©r   Úwrite©r   Údatas   &&r   ÚdataReceivedÚSOCKSv4Outgoing.dataReceived!   ó   € Ø�
‰
×Ñ˜Ör   c                ór   € V P                   P                  W4       V P                  P                  V4       R # r	   ©r   r   r   r(   r)   s   &&r   r(   ÚSOCKSv4Outgoing.write$   ó$   € Ø�
‰
�‰�tÔ"Ø�‰×Ñ˜TÖ"r   r
   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r#   r+   r(   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s#   ø‡ € òò$ò
.ò÷#ð #r   r   c                   ó8   a € ] tR t^)t o R tR tR tR tRtV t	R# )ÚSOCKSv4Incomingc                ó2   € Wn         W P                   n        R # r	   )r   r   r   s   &&r   r   ÚSOCKSv4Incoming.__init__*   s   € ØŒ
Ø#�
‰
Ör   c                óN   € V P                   P                  P                  4        R # r	   r   r!   s   &&r   r#   ÚSOCKSv4Incoming.connectionLost.   r%   r   c                ó<   € V P                   P                  V4       R # r	   r'   r)   s   &&r   r+   ÚSOCKSv4Incoming.dataReceived1   r-   r   c                ór   € V P                   P                  W4       V P                  P                  V4       R # r	   r/   r)   s   &&r   r(   ÚSOCKSv4Incoming.write4   r1   r   r
   N)
r2   r3   r4   r5   r   r#   r+   r(   r6   r7   r8   s   @r   r;   r;   )   s   ø‡ € ò$ò.ò÷#ð #r   r;   c                   ór   a € ] tR t^9t o RtR]3R ltR tR tR t	R t
R tR	 tR
 tRR ltR tR tRtV tR# )ÚSOCKSv4a—  
An implementation of the SOCKSv4 protocol.

@type logging: L{str} or L{None}
@ivar logging: If not L{None}, the name of the logfile to which connection
    information will be written.

@type reactor: object providing L{twisted.internet.interfaces.IReactorTCP}
@ivar reactor: The reactor used to create connections.

@type buf: L{str}
@ivar buf: Part of a SOCKSv4 connection request.

@type otherConn: C{SOCKSv4Incoming}, C{SOCKSv4Outgoing} or L{None}
@ivar otherConn: Until the connection has been established, C{otherConn} is
    L{None}. After that, it is the proxy-to-destination protocol instance
    along which the client's connection is being forwarded.
Nc                ó   € Wn         W n        R # r	   )Úloggingr   )r   rG   r   s   &&&r   r   ÚSOCKSv4.__init__M   s   € ØŒØŽr   c                ó"   € R V n         RV n        R# )r   N)Úbufr   )r   s   &r   r   ÚSOCKSv4.connectionMadeQ   s   € ØˆŒØˆŽr   c                ón  € V P                   '       d   V P                   P                  V4       R# V P                  V,           V n        V P                  pRV P                  R,          9   EdI   V P                  R,          V P                  R,          uq0n        \        P                  ! RVR,          4      w  rEpV P                  P                  R^4      w  qpn        VR,          R8X  dš   VR	,          R8w  dŒ   RV P                  9  d	   W n        R# V P                  P                  R^4      w  q€n        V P                  P                  V4      p	V	P                  V P                  WtWV4       V	P                  V 3R
 l4       R# \        P                  ! VR,          4      pV P                  W‡WEV4       R# R# )zg
Called whenever data is received.

@type data: L{bytes}
@param data: Part or all of a SOCKSv4 packet.
Nó    :é   NN:NrN   Nú!BBH:Né   N:rP   é   Ns      :rQ   rN   Nc                 ó$   € VP                  ^[4      # ©é[   ©r   ©Úresultr   s   &&r   Ú<lambda>Ú&SOCKSv4.dataReceived.<locals>.<lambda>p   s   € °t·~±~ÀbÔ7Ir   :rP   rN   N)r   r(   rJ   ÚstructÚunpackÚsplitr   ÚresolveÚaddCallbackÚ_dataReceived2Ú
addErrbackÚsocketÚ	inet_ntoa)
r   r*   ÚcompleteBufferÚheadÚversionÚcoder   ÚuserÚserverÚds
   &&        r   r+   ÚSOCKSv4.dataReceivedU   sC  € ð �>�>ˆ>Ø�N‰N× Ñ  Ô&ÙØ—8‘8˜d•?ˆŒØŸ™ˆØ�d—h‘h˜r•lÕ"Ø!ŸX™X b�\¨4¯8©8°B­<ˆNˆD”(Ü"(§-¢-°¸¸R½Ó"AÑˆG˜4Ø!ŸX™XŸ^™^¨G°QÓ7‰NˆD”(Ø�C�y˜OÔ+°°Sµ	¸WÔ0Dð
  $§(¡(Ô*Ø-”HÙØ#'§8¡8§>¡>°'¸1Ó#=Ñ �œØ—L‘L×(Ñ(¨Ó0�Ø—‘˜d×1Ñ1°4À$ÔMØ—‘°ÓIÔJÙä×)Ò)¨$¨s­)Ó4�à×Ñ ¨g¸TÖBñ) #r   c                óÖ  € V^8X  g   Q RV,          4       hV P                  WAWR4      '       g   V P                  ^[4       R# V^8X  d.   V P                  W\        V 4      pVP	                  V 3R l4       MBV^8X  d.   V P                  ^ \        W4      pVP                  V 3R l4       M\        RV 24      hV P                  R8X  g"   Q R\        V P                  4      ,          4       hR# )a´  
The second half of the SOCKS connection setup. For a SOCKSv4 packet this
is after the server address has been extracted from the header. For a
SOCKSv4a packet this is after the host name has been resolved.

@type server: L{str}
@param server: The IP address of the destination, represented as a
    dotted quad.

@type user: L{str}
@param user: The username associated with the connection.

@type version: L{int}
@param version: The SOCKS protocol version number.

@type code: L{int}
@param code: The command code. 1 means establish a TCP/IP stream
    connection, and 2 means establish a TCP/IP port binding.

@type port: L{int}
@param port: The port number associated with the connection.
zBad version code: %sNc                 ó$   € VP                  ^[4      # rS   rU   rV   s   &&r   rX   Ú(SOCKSv4._dataReceived2.<locals>.<lambda>”   s   € °4·>±>À"Ô3Er   c                 óF   € VP                  ^Z^ V ^,          V ^ ,          4      # )r   rU   )Úxr   s   &&r   rX   rm   —   s   € ¨t¯~©~¸bÀ!ÀQÀqÅTÈ1ÈQÍ4Ô/Pr   zBad Connect Code: r   z hmm, still stuff in buffer... %s)Ú	authorizer   ÚconnectClassr   r`   ÚlistenClassÚSOCKSv4IncomingFactoryr^   ÚRuntimeErrorrJ   Úrepr)r   rh   rg   re   rf   r   ri   s   &&&&&& r   r_   ÚSOCKSv4._dataReceived2w   sÆ   € ð. ˜!Œ|Ð=Ð3°gÕ=Ó=ˆ|Ø�~‰~˜d¨D×7Ò7Ø�N‰N˜2ÔÙØ�1Œ9Ø×!Ñ! &´ÀÓFˆAØ�L‰L¨TÓEÕFØ�QŒYØ× Ñ  Ô$:¸DÓIˆAØ�M‰M¨ÓPÕQäÐ!3°D°6Ð:Ó;Ð;Ø�x‰x˜3ŒÐSÐ BÄTÈ$Ï(É(Ã^Õ SÓSŠr   c                óv   € V P                   '       d'   V P                   P                  P                  4        R # R # r	   )r   r   r    r!   s   &&r   r#   ÚSOCKSv4.connectionLostœ   s&   € Ø�>�>ˆ>Ø�N‰N×$Ñ$×3Ñ3Ö5ñ r   c                óT   € \         P                  ! R V: RV: RV: RV: R2	4       ^# )zcode z connection to Ú:z (user z) authorized)r   Úmsg)r   rf   rh   r   rg   s   &&&&&r   rp   ÚSOCKSv4.authorize    s!   € Ü�‹ã“V›T£4ð)ô	
ñ r   c                óZ   € \         P                  ! \        V.VO5!  P                  W4      # r	   )r   ÚClientCreatorr   Ú
connectTCP)r   r   r   ÚklassÚargss   &&&&*r   rq   ÚSOCKSv4.connectClass§   s%   € Ü×%Ò%¤g¨uÐ<°tÓ<×GÑGÈÓSÐSr   c                óŒ   € \         P                  ! W! V!  4      p\        P                  ! VP	                  4       R ,          4      # ):é   NN)r   Ú	listenTCPr   ÚsucceedÚgetHost)r   r   r€   r�   Úservs   &&&* r   rr   ÚSOCKSv4.listenClassª   s2   € Ü× Ò   u¨d¡|Ó4ˆÜ�}Š}˜TŸ\™\›^¨BÕ/Ó0Ð0r   c                óä   € V P                   P                  \        P                  ! R W!V4      \        P
                  ! V4      ,           4       V^Z8w  d   V P                   P                  4        R# R# )rO   N)r   r(   rZ   Úpackra   Ú	inet_atonr    )r   Úreplyre   r   r   s   &&&&&r   r   ÚSOCKSv4.makeReply®   sR   € Ø�‰×ÑÜ�KŠK˜ °Ó5¼×8HÒ8HÈÓ8LÕLô	
ð �BŒ;Ø�N‰N×)Ñ)Ö+ñ r   c                ó^   € V P                  W4       V P                  P                  V4       R # r	   )r   r   r(   r)   s   &&r   r(   ÚSOCKSv4.writeµ   s    € Ø�‰�ÔØ�‰×Ñ˜TÖ"r   c           	     ó¨  € V P                   '       g   R # V P                  P                  4       pV P                  P                  P                  4       p\	        V P                   R4      pTP                  R\        P                  ! 4       VP                  VP                  W8H  ;'       d    R;'       g    RVP                  VP                  3,          4       V'       dÒ   VR,          VR,          r&VP                  \        P                  ! \        R V4      R4      R,           4       VP                  ^\        V4      ,
          ^,          R,          4       V F@  p\        \        V4      4      ^8”  d   VP                  R	4       K/  VP                  V4       KB  	  VP                  R
4       KÙ  VP                  R
4       VP                  4        R # )NÚaz%s	%s:%d %s %s:%d
Ú<Ú>:Né   N:r•   NNc                 ó&   € R \        V 4      ,          # )z%02X)Úord)ro   s   &r   rX   ÚSOCKSv4.log.<locals>.<lambda>Ì   s   € ¨f´s¸1³v®or   Ú Ú.Ú
)rG   r   r   r   Úopenr(   ÚtimeÚctimer   r   ÚstringÚjoinÚmapÚlenru   Úclose)r   Úprotor*   r   Ú
their_peerÚfÚpÚcs   &&&     r   r   ÚSOCKSv4.log¹   sB  € Ø�|�|ˆ|ÙØ�~‰~×%Ñ%Ó'ˆØ—^‘^×-Ñ-×5Ñ5Ó7ˆ
Ü�—‘˜sÓ#ˆØ	�‰Ø"ä—
’
“Ø—	‘	Ø—	‘	Ø‘-×'Ð' C×/Ð/¨CØ—‘Ø—‘ðõô
	
÷ Ø˜3•i  c¥ˆtØ�G‰G”F—K’K¤Ñ$=¸qÓ AÀ3ÓGÈ#ÕMÔNØ�G‰G�Rœ#˜a›&•[ AÕ%¨Õ+Ô,Û�Ü”t˜A“w“< !Ô#Ø—G‘G˜C–Là—G‘G˜A–Jñ	 ð
 �G‰G�DŽMØ	�‰�ŒØ	�‰Ž	r   )rJ   rG   r   r   )é    rª   z0.0.0.0)r2   r3   r4   r5   Ú__doc__r   r   r   r+   r_   r#   rp   rq   rr   r   r(   r   r6   r7   r8   s   @r   rE   rE   9   sR   ø‡ € ñð&  $¨Wô òò CòD#TòJ6òòTò1ô,ò#÷ð r   rE   c                   ó0   a € ] tR t^Øt o RtR tR tRtV tR# )ÚSOCKSv4FactoryzT
A factory for a SOCKSv4 proxy.

Constructor accepts one argument, a log file name.
c                ó   € Wn         R # r	   ©rG   )r   r   s   &&r   r   ÚSOCKSv4Factory.__init__ß   s   € ØŽr   c                ó6   € \        V P                  \        4      # r	   )rE   rG   r   ©r   Úaddrs   &&r   ÚbuildProtocolÚSOCKSv4Factory.buildProtocolâ   s   € Ü�t—|‘|¤WÓ-Ð-r   r¯   N©	r2   r3   r4   r5   r«   r   r´   r6   r7   r8   s   @r   r­   r­   Ø   s   ø‡ € ñò÷.ð .r   r­   c                   ó0   a € ] tR t^æt o RtR tR tRtV tR# )rs   zB
A utility class for building protocols for incoming connections.
c                ó   € Wn         W n        R # r	   )r   r   )r   r   r   s   &&&r   r   ÚSOCKSv4IncomingFactory.__init__ë   s   € ØŒ
ØŽr   c                ó  € V^ ,          V P                   8X  d9   RV n         V P                  P                  ^Z^ 4       \        V P                  4      # V P                   R8X  d   R# V P                  P                  ^[^ 4       RV n         R# )rª   Ú N)r   r   r   r;   r²   s   &&r   r´   Ú$SOCKSv4IncomingFactory.buildProtocolï   sh   € Ø��7�d—g‘gÔØˆDŒGØ�J‰J× Ñ   QÔ'Ü" 4§:¡:Ó.Ð.Ø�W‰W˜Œ]Ùà�J‰J× Ñ   QÔ'ØˆDŒGÙr   )r   r   Nr¶   r8   s   @r   rs   rs   æ   s   ø‡ € ñò÷
ð 
r   rs   )r«   ra   rŸ   rZ   r�   Útwisted.internetr   r   r   Útwisted.pythonr   ÚProtocolr   r;   rE   ÚFactoryr­   rs   © r   r   Ú<module>rÂ      s‚   ðñ
ó Û ó Û ÷ 6Ñ 5Ý ô#�h×'Ñ'ô #ô(#�h×'Ñ'ô #ô \ˆh×Ñô \ô~.�X×%Ñ%ô .ô˜X×-Ñ-ö r   