Author: edeoliveira
Date: Fri Apr 17 13:28:00 2009
New Revision: 765991

URL: http://svn.apache.org/viewvc?rev=765991&view=rev
Log:
Added javadoc & minor fixes to the handling of InetSocketAddress vars

Modified:
    
mina/trunk/core/src/main/java/org/apache/mina/proxy/handlers/socks/Socks5LogicHandler.java
    
mina/trunk/core/src/main/java/org/apache/mina/proxy/handlers/socks/SocksProxyRequest.java

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/proxy/handlers/socks/Socks5LogicHandler.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/proxy/handlers/socks/Socks5LogicHandler.java?rev=765991&r1=765990&r2=765991&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/proxy/handlers/socks/Socks5LogicHandler.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/proxy/handlers/socks/Socks5LogicHandler.java
 Fri Apr 17 13:28:00 2009
@@ -85,7 +85,9 @@
     }
 
     /**
-     * Perform the handshake process.
+     * Performs the handshake process.
+     * 
+     * @param nextFilter the next filter
      */
     public synchronized void doHandshake(final NextFilter nextFilter) {
         logger.debug(" doHandshake()");
@@ -96,7 +98,7 @@
     }
 
     /**
-     * Encode the initial greeting packet.
+     * Encodes the initial greeting packet.
      * 
      * @param request the socks proxy request data
      * @return the encoded buffer
@@ -113,7 +115,7 @@
     }
 
     /**
-     * Encode the proxy authorization request packet.
+     * Encodes the proxy authorization request packet.
      * 
      * @param request the socks proxy request data
      * @return the encoded buffer
@@ -123,12 +125,10 @@
     private IoBuffer encodeProxyRequestPacket(final SocksProxyRequest request)
             throws UnsupportedEncodingException {
         int len = 6;
-        byte[] host = request.getHost() != null ? request.getHost().getBytes(
-                "ASCII") : null;
-
         InetSocketAddress adr = request.getEndpointAddress();
         byte addressType = 0;
-
+        byte[] host = null;
+        
         if (adr != null && !adr.isUnresolved()) {
             if (adr.getAddress() instanceof Inet6Address) {
                 len += 16;
@@ -138,10 +138,18 @@
                 addressType = SocksProxyConstants.IPV4_ADDRESS_TYPE;
             }
         } else {
-            len += 1 + host.length;
-            addressType = SocksProxyConstants.DOMAIN_NAME_ADDRESS_TYPE;
-        }
+            host = request.getHost() != null ? 
+                       request.getHost().getBytes("ASCII") : null;
 
+               if (host != null) {
+                   len += 1 + host.length;
+                   addressType = SocksProxyConstants.DOMAIN_NAME_ADDRESS_TYPE;
+               } else {
+                       throw new IllegalArgumentException("SocksProxyRequest 
object " +
+                                       "has no suitable endpoint information");
+               }
+        }
+        
         IoBuffer buf = IoBuffer.allocate(len);
 
         buf.put(request.getProtocolVersion());
@@ -149,11 +157,11 @@
         buf.put((byte) 0x00); // Reserved
         buf.put(addressType);
 
-        if (addressType == SocksProxyConstants.DOMAIN_NAME_ADDRESS_TYPE) {
-            buf.put((byte) host.length);
-            buf.put(host);
+        if (host == null) {
+               buf.put(request.getIpAddress());
         } else {
-            buf.put(request.getIpAddress());
+               buf.put((byte) host.length);
+            buf.put(host);            
         }
 
         buf.put(request.getPort());
@@ -162,13 +170,13 @@
     }
 
     /**
-     * Encode the authentication packet for supported authentication methods.
+     * Encodes the authentication packet for supported authentication methods.
      * 
      * @param request the socks proxy request data
      * @return the encoded buffer, if null then authentication step is over 
      * and handshake process can jump immediately to the next step without 
waiting
      * for a server reply.
-     * @throws UnsupportedEncodingException
+     * @throws UnsupportedEncodingException if some string charset convertion 
fails
      * @throws GSSException when something fails while using GSSAPI
      */
     private IoBuffer encodeAuthenticationPacket(final SocksProxyRequest 
request)
@@ -177,36 +185,36 @@
                 Socks5LogicHandler.SELECTED_AUTH_METHOD)).byteValue();
 
         switch (method) {
-        case SocksProxyConstants.NO_AUTH:
-            // In this case authentication is immediately considered as 
successfull
-            // Next writeRequest() call will send the proxy request
-            getSession().setAttribute(HANDSHAKE_STEP,
-                    SocksProxyConstants.SOCKS5_REQUEST_STEP);
-            break;
-
-        case SocksProxyConstants.GSSAPI_AUTH:
-            return encodeGSSAPIAuthenticationPacket(request);
-
-        case SocksProxyConstants.BASIC_AUTH:
-            // The basic auth scheme packet is sent
-            byte[] user = request.getUserName().getBytes("ASCII");
-            byte[] pwd = request.getPassword().getBytes("ASCII");
-            IoBuffer buf = IoBuffer.allocate(3 + user.length + pwd.length);
-
-            buf.put(SocksProxyConstants.BASIC_AUTH_SUBNEGOTIATION_VERSION);
-            buf.put((byte) user.length);
-            buf.put(user);
-            buf.put((byte) pwd.length);
-            buf.put(pwd);
-
-            return buf;
+               case SocksProxyConstants.NO_AUTH:
+                   // In this case authentication is immediately considered as 
successfull
+                   // Next writeRequest() call will send the proxy request
+                   getSession().setAttribute(HANDSHAKE_STEP,
+                           SocksProxyConstants.SOCKS5_REQUEST_STEP);
+                   break;
+       
+               case SocksProxyConstants.GSSAPI_AUTH:
+                   return encodeGSSAPIAuthenticationPacket(request);
+       
+               case SocksProxyConstants.BASIC_AUTH:
+                   // The basic auth scheme packet is sent
+                   byte[] user = request.getUserName().getBytes("ASCII");
+                   byte[] pwd = request.getPassword().getBytes("ASCII");
+                   IoBuffer buf = IoBuffer.allocate(3 + user.length + 
pwd.length);
+       
+                   
buf.put(SocksProxyConstants.BASIC_AUTH_SUBNEGOTIATION_VERSION);
+                   buf.put((byte) user.length);
+                   buf.put(user);
+                   buf.put((byte) pwd.length);
+                   buf.put(pwd);
+       
+                   return buf;
         }
 
         return null;
     }
 
     /**
-     * Encode the authentication packet for supported authentication methods.
+     * Encodes the authentication packet for supported authentication methods.
      * 
      * @param request the socks proxy request data
      * @return the encoded buffer
@@ -216,6 +224,7 @@
             final SocksProxyRequest request) throws GSSException {
         GSSContext ctx = (GSSContext) getSession().getAttribute(GSS_CONTEXT);
         if (ctx == null) {
+               // first step in the authentication process
             GSSManager manager = GSSManager.getInstance();
             GSSName serverName = manager.createName(request
                     .getServiceKerberosName(), null);
@@ -269,8 +278,7 @@
                         SocksProxyConstants.GSSAPI_AUTH_SUBNEGOTIATION_VERSION,
                         SocksProxyConstants.GSSAPI_MSG_TYPE });
 
-                buf.put(ByteUtilities.intToNetworkByteOrder(token.length,
-                        new byte[2], 0, 2));
+                buf.put(ByteUtilities.intToNetworkByteOrder(token.length, 2));
                 buf.put(token);
             }
         }
@@ -279,7 +287,7 @@
     }
 
     /**
-     * Encode a SOCKS5 request and writes it to the next filter
+     * Encodes a SOCKS5 request and writes it to the next filter
      * so it can be sent to the proxy server.
      * 
      * @param nextFilter the next filter
@@ -315,8 +323,11 @@
     }
 
     /**
-     * Handle incoming data during the handshake process. Should consume only 
the
+     * Handles incoming data during the handshake process. Should consume only 
the
      * handshake data from the buffer, leaving any extra data in place.
+     * 
+     * @param nextFilter the next filter
+     * @param buf the buffered data received 
      */
     public synchronized void messageReceived(final NextFilter nextFilter,
             final IoBuffer buf) {
@@ -330,7 +341,8 @@
                         "Wrong socks version running on server");
             }
 
-            if ((step == SocksProxyConstants.SOCKS5_GREETING_STEP || step == 
SocksProxyConstants.SOCKS5_AUTH_STEP)
+            if ((step == SocksProxyConstants.SOCKS5_GREETING_STEP || 
+                       step == SocksProxyConstants.SOCKS5_AUTH_STEP)
                     && buf.remaining() >= 2) {
                 handleResponse(nextFilter, buf, step);
             } else if (step == SocksProxyConstants.SOCKS5_REQUEST_STEP
@@ -344,6 +356,10 @@
 
     /**
      * Handle a SOCKS v5 response from the proxy server.
+     * 
+     * @param nextFilter the next filter
+     * @param buf the buffered data received 
+     * @param step the current step in the authentication process     
      */
     protected void handleResponse(final NextFilter nextFilter,
             final IoBuffer buf, int step) throws Exception {
@@ -354,7 +370,8 @@
 
             if (method == SocksProxyConstants.NO_ACCEPTABLE_AUTH_METHOD) {
                 throw new IllegalStateException(
-                        "No acceptable authentication method to use the socks 
proxy server");
+                        "No acceptable authentication method to use with " +
+                        "the socks proxy server");
             }
 
             getSession().setAttribute(SELECTED_AUTH_METHOD, new Byte(method));
@@ -454,8 +471,11 @@
     }
 
     /**
-     * {...@inheritdoc}
-     */
+     * Closes the session. If any {...@link GSSContext} is present in the 
session 
+     * then it is closed.
+     * 
+     * @param message the error message
+     */    
     @Override
     protected void closeSession(String message) {
         GSSContext ctx = (GSSContext) getSession().getAttribute(GSS_CONTEXT);

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/proxy/handlers/socks/SocksProxyRequest.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/proxy/handlers/socks/SocksProxyRequest.java?rev=765991&r1=765990&r2=765991&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/proxy/handlers/socks/SocksProxyRequest.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/proxy/handlers/socks/SocksProxyRequest.java
 Fri Apr 17 13:28:00 2009
@@ -101,7 +101,7 @@
     }
 
     /**
-     * Return the endpoint address resulting from the {...@link 
#getEndpointAddress()}. 
+     * Returns the endpoint address resulting from the {...@link 
#getEndpointAddress()}. 
      * If not set, it will return the {...@link SocksProxyConstants#FAKE_IP} 
constant 
      * value which will be ignored in a SOCKS v4 request.
      *   
@@ -162,7 +162,8 @@
      */
     public synchronized final String getHost() {
         if (host == null) {
-            if (getEndpointAddress() != null) {
+               InetSocketAddress adr = getEndpointAddress();
+            if ( adr != null && !adr.isUnresolved()) {
                 host = getEndpointAddress().getHostName();
             }
         }


Reply via email to