+
    DfjXD                     "   R t ^ RIt^ RIt^ RIHtHt ^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHt ^ RIHt  ! R R	]P                   4      t ! R
 R4      t ! R R]	P&                  4      t ! R R]P*                  4      t ! R R]P*                  4      tR# )z_
Tests for L{twisted.protocol.socks}, an implementation of the SOCKSv4 and
SOCKSv4a protocols.
N)addressdefer)DNSLookupError)socks)	iterbytes)proto_helpers)unittestc                   :   a  ] tR t^t o RtRtR tR tR tRt	V t
R# )StringTCPTransportFNc                    V P                   # )N)peerselfs   &9/usr/lib/python3/dist-packages/twisted/test/test_socks.pygetPeerStringTCPTransport.getPeer   s    yy    c                2    \         P                  ! R R^*4      # )TCPz2.3.4.5)r   IPv4Addressr   s   &r   getHostStringTCPTransport.getHost   s    ""5)R88r   c                    R V n         R# )TNstringTCPTransport_closingr   s   &r   loseConnection!StringTCPTransport.loseConnection   s
    *.'r   r   )__name__
__module____qualname____firstlineno__r   r   r   r   r   __static_attributes____classdictcell____classdict__s   @r   r
   r
      s$     !&D9/ /r   r
   c                   0   a  ] tR t^"t o RtR tR tRtV tR# )FakeResolverReactorzH
Bare-bones reactor with deterministic behavior for the resolve method.
c                    Wn         R# )z
@type names: L{dict} containing L{str} keys and L{str} values.
@param names: A hostname to IP address mapping. The IP addresses are
    stringified dotted quads.
Nnames)r   r)   s   &&r   __init__FakeResolverReactor.__init__'   s	     
r   c           	          \         P                  ! V P                  V,          4      #   \         d9    \         P                  ! \        RTP                  R4      ,           4      4      u # i ; i)zA
Resolve a hostname by looking it up in the C{names} dictionary.
z"FakeResolverReactor couldn't find zutf-8)r   succeedr)   KeyErrorfailr   decode)r   hostnames   &&r   resolveFakeResolverReactor.resolve/   sX    	==H!566 	::88??7;SS 	s   &) A A,+A,r(   N)	r   r   r   r    __doc__r*   r2   r!   r"   r#   s   @r   r&   r&   "   s      r   r&   c                   4   a  ] tR t^=t o RtRtR tR tRtV t	R# )SOCKSv4DriverNc                    V! V!  p\        4       Vn        \        P                  ! R W4      VP                  n        VP                  4        WPn        \        P                  ! V4      # )r   )	r
   	transportr   r   r   connectionMadedriver_outgoingr   r-   )r   hostportklassargsprotos   &&&&* r   connectClassSOCKSv4Driver.connectClassD   sO    t,.&225$E$}}U##r   c                \    V! V!  pW@n         V^ 8X  d   Rp\        P                  ! RV34      # )      6.7.8.9)driver_listenr   r-   )r   r<   r=   r>   factorys   &&&* r   listenClassSOCKSv4Driver.listenClassM   s1    ,$19D}}i.//r   )rF   r:   )
r   r   r   r    r:   rF   r@   rH   r!   r"   r#   s   @r   r6   r6   =   s      O M$0 0r   r6   c                   T   a  ] tR t^Vt o RtR tR tR tR tR t	R t
R tR	 tR
tV tR# )ConnectTestszN
Tests for SOCKS and SOCKSv4a connect requests using the L{SOCKSv4} protocol.
c                    \        4       V n        \        4       V P                  n        V P                  P	                  4        \        R R/4      V P                  n        R# s	   localhost	127.0.0.1Nr6   sockr
   r8   r9   r&   reactorr   s   &r   setUpConnectTests.setUp[   @    !O	02				  "/{0KL		r   c                    V P                   P                  pVe)   V P                  VP                  P                  R4       R # R # )Nz-Outgoing SOCKS connections need to be closed.)rP   r:   
assertTruer8   r   )r   outgoings   & r   tearDownConnectTests.tearDowna   s:    99,,OO""==?  r   c           	        V P                   P                  \        P                  ! R ^^^"4      \        P
                  ! R4      ,           R,           R,           4       V P                   P                  P                  4       pV P                   P                  P                  4        V P                  V\        P                  ! R ^ ^Z^"4      \        P
                  ! R4      ,           4       V P                  V P                   P                  P                  4       V P                  V P                   P                  4       V P                   P                  R4       V P                  V P                   P                  P                  P                  4       R4       V P                   P                  P                  R4       V P                  V P                   P                  P                  4       R4       V P                   P                  R4       R# )!BBH1.2.3.4   fooBAR       hello, world   hi therefake reasonN)rP   dataReceivedstructpacksocket	inet_atonr8   valueclearassertEqualassertFalser   assertIsNotNoner:   connectionLost)r   sents   & r   test_simpleConnectTests.test_simplei   sq   		KK1b)y)* 	
 yy""((*		!!#&++faR063C3CI3NN	
 	,,GGHTYY667 			/22<<BBDoV 			!!..{;,,224kB		  /r   c           	     >   \         P                  ! R^^^"4      \        P                  ! R4      ,           R,           R,           p\	        V4       F  pV P
                  P                  V4       K   	  V P
                  P                  P                  4       pV P
                  P                  P                  4        V P                  V\         P                  ! R^ ^Z^"4      \        P                  ! R4      ,           4       V P                  V P
                  P                  P                  4       V P                  V P
                  P                  4       V P
                  P                  R4       V P                  V P
                  P                  P                  P                  4       R4       V P
                  P                  P                  R4       V P                  V P
                  P                  P                  4       R4       V P
                  P                  R4       R	# )
E  
If the destination IP address has zeros for the first three octets and
non-zero for the fourth octet, the client is attempting a v4a
connection.  A hostname is specified after the user ID string and the
server connects to the address that hostname resolves to.

@see: U{http://en.wikipedia.org/wiki/SOCKS#SOCKS_4a_protocol}
r[   0.0.0.1   fooBAZ 
   localhost rN   r_   r`   ra   N)rc   rd   re   rf   r   rP   rb   r8   rg   rh   ri   rj   r   rk   r:   rl   r   clientRequestbyterm   s   &   r    test_socks4aSuccessfulResolution-ConnectTests.test_socks4aSuccessfulResolution   s    KK1b)y)*  	 m,DII""4( - yy""((*		!!# 	&++faR063C3CK3PP	
 	,,GGHTYY667 			/22<<BBDoV 			!!..{;,,224kB		  /r   c           	     \   \         P                  ! R^^^"4      \        P                  ! R4      ,           R,           R,           p\	        V4       F  pV P
                  P                  V4       K   	  V P
                  P                  P                  4       pV P                  V\         P                  ! R^ ^[^ 4      \        P                  ! R4      ,           4       V P                  V P
                  P                  P                  4       V P                  V P
                  P                  4       R# zs
Failed hostname resolution on a SOCKSv4a packet results in a 91 error
response and the connection getting closed.
r[   rr   rs   s   failinghost 0.0.0.0Nrc   rd   re   rf   r   rP   rb   r8   rg   ri   rV   r   assertIsNoner:   ru   s   &   r   test_socks4aFailedResolution)ConnectTests.test_socks4aFailedResolution        KK1b)y)*  	 m,DII""4( - yy""((*&++faQ/&2B2B92MM	

 			++FFG$))334r   c           	     T   R  V P                   n        V P                   P                  \        P                  ! R^^R4      \
        P                  ! R4      ,           R,           R,           4       V P                  V P                   P                  P                  4       \        P                  ! R^ ^[^ 4      \
        P                  ! R4      ,           4       V P                  V P                   P                  P                  4       V P                  V P                   P                  4       R# )c                     ^ # rC    codeserverr<   users   &&&&r   <lambda>0ConnectTests.test_accessDenied.<locals>.<lambda>       qr   r[     10.2.3.4r]   r^   r|   N)rP   	authorizerb   rc   rd   re   rf   ri   r8   rg   rV   r   r~   r:   r   s   &r   test_accessDeniedConnectTests.test_accessDenied   s    @				KK1d+z*+ 	
 	II%%'KK2q)F,<,<Y,GG	
 			++FFG$))334r   c                \   V P                   P                  \        P                  ! R ^^^"4      \        P
                  ! R4      ,           R,           R,           4       V P                   P                  P                  4        V P                   P                  R4       V P                  V P                   P                  P                  P                  4       R4       V P                   P                  P                  P                  4        V P                   P                  P                  R4       R# r[   r\   r]   r^   r_   ra   N)rP   rb   rc   rd   re   rf   r8   rh   ri   r:   rg   r   rl   r   s   &r   test_eofRemoteConnectTests.test_eofRemote   s    		KK1b)y)* 	
 			!!# 			/22<<BBDoV 			!!++::<		!!00?r   c                   V P                   P                  \        P                  ! R ^^^"4      \        P
                  ! R4      ,           R,           R,           4       V P                   P                  P                  4        V P                   P                  R4       V P                  V P                   P                  P                  P                  4       R4       V P                   P                  R4       R# r   )rP   rb   rc   rd   re   rf   r8   rh   ri   r:   rg   rl   r   s   &r   test_eofLocalConnectTests.test_eofLocal   s    		KK1b)y)* 	
 			!!# 			/22<<BBDoV 			  /r   rP   N)r   r   r   r    r4   rR   rX   rn   rx   r   r   r   r   r!   r"   r#   s   @r   rK   rK   V   s:     M02,0\5:5@"0 0r   rK   c                   T   a  ] tR t^t o RtR tR tR tR tR t	R t
R tR	 tR
tV tR# )	BindTestszK
Tests for SOCKS and SOCKSv4a bind requests using the L{SOCKSv4} protocol.
c                    \        4       V n        \        4       V P                  n        V P                  P	                  4        \        R R/4      V P                  n        R# rM   rO   r   s   &r   rR   BindTests.setUp  rT   r   c           	        V P                   P                  \        P                  ! R ^^^"4      \        P
                  ! R4      ,           R,           R,           4       V P                   P                  P                  4       pV P                   P                  P                  4        V P                  V\        P                  ! R ^ ^ZR4      \        P
                  ! R4      ,           4       V P                  V P                   P                  P                  4       V P                  V P                   P                  4       V P                   P                  P                  R4      pV P                  V4       \        4       Vn        VP!                  4        V P                   P                  P                  4       pV P                   P                  P                  4        V P                  V\        P                  ! R ^ ^Z^ 4      \        P
                  ! R4      ,           4       V P                  V P                   P                  P                  4       V P                   P                  R4       V P                  VP                  P                  4       R4       VP                  R4       V P                  V P                   P                  P                  4       R4       V P                   P#                  R	4       R
# )r[   r\   r]   r^   rD   rE   r|   r_   r`   ra   Nr\     )rP   rb   rc   rd   re   rf   r8   rg   rh   ri   rj   r   rk   rF   buildProtocolr
   r9   rl   r   rm   incomings   &  r   rn   BindTests.test_simple  s!   		KK1b)y)* 	
 yy""((*		!!#&++faT2V5E5Ei5PP	
 	,,GGHTYY445 99**889JKX&/1! yy""((*		!!#&++faQ/&2B2B92MM	
 	,,GGH 			/++113_E 	k*,,224kB		  /r   c           	        \         P                  ! R^^^"4      \        P                  ! R4      ,           R,           R,           p\	        V4       F  pV P
                  P                  V4       K   	  V P
                  P                  P                  4       pV P
                  P                  P                  4        V P                  V\         P                  ! R^ ^ZR4      \        P                  ! R4      ,           4       V P                  V P
                  P                  P                  4       V P                  V P
                  P                  4       V P
                  P                  P                  R4      pV P                  V4       \!        4       Vn        VP#                  4        V P
                  P                  P                  4       pV P
                  P                  P                  4        V P                  V\         P                  ! R^ ^Z^ 4      \        P                  ! R4      ,           4       V P%                  V P
                  P                  P                  R4       V P
                  P                  R	4       V P                  VP                  P                  4       R	4       VP                  R	4       V P                  V P
                  P                  P                  4       R	4       V P
                  P'                  R
4       R# )rq   r[   rr   rs   rt   rD   rE   r|   Nr`   ra   )rN   r   )rc   rd   re   rf   r   rP   rb   r8   rg   rh   ri   rj   r   rk   rF   r   r
   r9   assertIsNotrl   )r   rv   rw   rm   r   s   &    r   test_socks4aBindTests.test_socks4a7  s=    KK1b)y)*  	 m,DII""4( - yy""((*		!!# 	&++faT2V5E5Ei5PP	
 	,,GGHTYY445 99**889LMX&/1! yy""((*		!!#&++faQ/&2B2B92MM	
 	,,GGN 			{+++113[A 	k*,,224kB		  /r   c           	     \   \         P                  ! R^^^"4      \        P                  ! R4      ,           R,           R,           p\	        V4       F  pV P
                  P                  V4       K   	  V P
                  P                  P                  4       pV P                  V\         P                  ! R^ ^[^ 4      \        P                  ! R4      ,           4       V P                  V P
                  P                  P                  4       V P                  V P
                  P                  4       R# r{   r}   ru   s   &   r   r   &BindTests.test_socks4aFailedResolutionr  r   r   c           	     T   R  V P                   n        V P                   P                  \        P                  ! R^^R4      \
        P                  ! R4      ,           R,           R,           4       V P                  V P                   P                  P                  4       \        P                  ! R^ ^[^ 4      \
        P                  ! R4      ,           4       V P                  V P                   P                  P                  4       V P                  V P                   P                  4       R# )c                     ^ # r   r   r   s   &&&&r   r   -BindTests.test_accessDenied.<locals>.<lambda>  r   r   r[   r   r   r]   r^   r|   N)rP   r   rb   rc   rd   re   rf   ri   r8   rg   rV   r   r~   rF   r   s   &r   r   BindTests.test_accessDenied  s    @				KK1d+z*+ 	
 	II%%'KK2q)F,<,<Y,GG	
 			++FFG$))112r   c           	     L   V P                   P                  \        P                  ! R ^^^"4      \        P
                  ! R4      ,           R,           R,           4       V P                   P                  P                  4       pV P                   P                  P                  4        V P                   P                  P                  R4      pV P                  V4       \        4       Vn        VP                  4        V P                   P                  P                  4       pV P                   P                  P                  4        V P                  V\        P                  ! R ^ ^Z^ 4      \        P
                  ! R4      ,           4       V P                  V P                   P                  P                   4       V P                   P                  R4       V P                  VP                  P                  4       R4       VP                  P#                  4        VP%                  R4       R# 	r[   r\   r]   r^   r|   r_   ra   Nr   )rP   rb   rc   rd   re   rf   r8   rg   rh   rF   r   rk   r
   r9   ri   rj   r   r   rl   r   s   &  r   r   BindTests.test_eofRemote  s   		KK1b)y)* 	
 yy""((*		!!# 99**889JKX&/1! yy""((*		!!#&++faQ/&2B2B92MM	
 	,,GGH 			/++113_E 	))+.r   c           	     ,   V P                   P                  \        P                  ! R ^^^"4      \        P
                  ! R4      ,           R,           R,           4       V P                   P                  P                  4       pV P                   P                  P                  4        V P                   P                  P                  R4      pV P                  V4       \        4       Vn        VP                  4        V P                   P                  P                  4       pV P                   P                  P                  4        V P                  V\        P                  ! R ^ ^Z^ 4      \        P
                  ! R4      ,           4       V P                  V P                   P                  P                   4       V P                   P                  R4       V P                  VP                  P                  4       R4       V P                   P#                  R4       R# r   )rP   rb   rc   rd   re   rf   r8   rg   rh   rF   r   rk   r
   r9   ri   rj   r   rl   r   s   &  r   r   BindTests.test_eofLocal  s   		KK1b)y)* 	
 yy""((*		!!# 99**889JKX&/1! yy""((*		!!#&++faQ/&2B2B92MM	
 	,,GGH 			/++113_E 			  /r   c           	     .   V P                   P                  \        P                  ! R ^^^"4      \        P
                  ! R4      ,           R,           R,           4       V P                   P                  P                  4       pV P                   P                  P                  4        V P                   P                  P                  R4      pV P                  V4       V P                   P                  P                  4       pV P                   P                  P                  4        V P                  V\        P                  ! R ^ ^[^ 4      \        P
                  ! R4      ,           4       V P                  V P                   P                  P                  4       R# )r[   r\   r]   r^   r|   N)z1.6.6.6i  )rP   rb   rc   rd   re   rf   r8   rg   rh   rF   r   r~   ri   rV   r   r   s   &  r   test_badSourceBindTests.test_badSource  s&   		KK1b)y)* 	
 yy""((*		!!# 99**889IJ(# yy""((*		!!#&++faQ/&2B2B92MM	
 			++FFGr   r   N)r   r   r   r    r4   rR   rn   r   r   r   r   r   r   r!   r"   r#   s   @r   r   r      s=     M%0N90v5:3/@0>H Hr   r   )r4   re   rc   twisted.internetr   r   twisted.internet.errorr   twisted.protocolsr   twisted.python.compatr   twisted.testr   twisted.trialr   StringTransportr
   r&   SOCKSv4r6   TestCaserK   r   r   r   r   <module>r      s{   
   + 1 # + & "/66 / 60EMM 02e08$$ e0PtH!! tHr   