Author: ngn
Date: Wed Mar 23 11:58:27 2011
New Revision: 1084554

URL: http://svn.apache.org/viewvc?rev=1084554&view=rev
Log:
Fixing bug where an incorrect local address for the proxy would be used

Modified:
    
mina/vysper/trunk/server/extensions/xep0065-socks/src/main/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandler.java
    
mina/vysper/trunk/server/extensions/xep0065-socks/src/main/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5Module.java
    
mina/vysper/trunk/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java

Modified: 
mina/vysper/trunk/server/extensions/xep0065-socks/src/main/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandler.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0065-socks/src/main/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandler.java?rev=1084554&r1=1084553&r2=1084554&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0065-socks/src/main/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandler.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0065-socks/src/main/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandler.java
 Wed Mar 23 11:58:27 2011
@@ -19,7 +19,9 @@
  */
 package org.apache.vysper.xmpp.extension.xep0065_socks;
 
+import java.net.InetAddress;
 import java.net.InetSocketAddress;
+import java.net.UnknownHostException;
 
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.vysper.xml.fragment.XMLElement;
@@ -47,6 +49,13 @@ import org.slf4j.LoggerFactory;
  */
 public class Socks5IqHandler extends DefaultIQHandler {
 
+    private static InetAddress DEFAULT_ADDRESS;
+    static {
+        try {
+            DEFAULT_ADDRESS = InetAddress.getByAddress(new byte[]{0,0,0,0});
+        } catch (UnknownHostException ignore) {;}
+    }
+    
     final Logger logger = LoggerFactory.getLogger(Socks5IqHandler.class);
 
     private Entity jid;
@@ -88,13 +97,20 @@ public class Socks5IqHandler extends Def
                 </iq>
          */
         
-        return StanzaBuilder.createIQStanza(stanza.getTo(), stanza.getFrom(), 
IQStanzaType.RESULT, stanza.getID())
+        StanzaBuilder builder = StanzaBuilder.createIQStanza(stanza.getTo(), 
stanza.getFrom(), IQStanzaType.RESULT, stanza.getID())
             .startInnerElement("query", 
NamespaceURIs.XEP0065_SOCKS5_BYTESTREAMS)
-            .startInnerElement("streamhost", 
NamespaceURIs.XEP0065_SOCKS5_BYTESTREAMS)
-            .addAttribute("host", proxyAddress.getHostName())
-            .addAttribute("jid", jid.getFullQualifiedName())
-            .addAttribute("port", Integer.toString(proxyAddress.getPort()))
-            .build();
+            .startInnerElement("streamhost", 
NamespaceURIs.XEP0065_SOCKS5_BYTESTREAMS);
+        
+        // if an address is provided on the proxy address, use that, else use 
the JID
+        if(DEFAULT_ADDRESS.equals(proxyAddress.getAddress())) {
+            builder.addAttribute("host", jid.getFullQualifiedName());
+        } else {
+            builder.addAttribute("host", proxyAddress.getHostName());
+        }
+        builder.addAttribute("jid", jid.getFullQualifiedName())
+            .addAttribute("port", Integer.toString(proxyAddress.getPort()));
+        
+        return builder.build();
     }
 
     @Override

Modified: 
mina/vysper/trunk/server/extensions/xep0065-socks/src/main/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5Module.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0065-socks/src/main/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5Module.java?rev=1084554&r1=1084553&r2=1084554&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0065-socks/src/main/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5Module.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0065-socks/src/main/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5Module.java
 Wed Mar 23 11:58:27 2011
@@ -57,13 +57,13 @@ import org.apache.vysper.xmpp.server.com
  */
 public class Socks5Module extends DefaultDiscoAwareModule implements 
Component, ComponentInfoRequestListener, ItemRequestListener {
 
+    private static final String DEFAULT_SUBDOMAIN = "socks";
     private static final int DEFAULT_PORT = 5777;
     private static final int DEFAULT_IDLE_TIME = 120;
     
     private String subdomain;
     private Entity fullDomain;
-    private InetSocketAddress proxyAddress;
-    private int port =  DEFAULT_PORT;
+    private InetSocketAddress proxyAddress = new 
InetSocketAddress(DEFAULT_PORT);
     private int idleTimeInSeconds = DEFAULT_IDLE_TIME;
     
     private ComponentStanzaProcessor stanzaProcessor;
@@ -92,7 +92,9 @@ public class Socks5Module extends Defaul
         Validate.isTrue(!subdomain.contains("."), "subdomain should only 
contain a subdomain name, not the full domain name");
         
         this.subdomain = subdomain;
-        this.proxyAddress = proxyAddress;
+        if(proxyAddress != null) {
+            this.proxyAddress = proxyAddress;
+        }
     }
 
     /**
@@ -104,6 +106,13 @@ public class Socks5Module extends Defaul
     }
     
     /**
+     * Constructs a SOCK5 module with the default subdomain "socks" and the 
proxy listening on the default address
+     */
+    public Socks5Module() {
+        this(DEFAULT_SUBDOMAIN, null);
+    }
+    
+    /**
      * {@inheritDoc}
      */
     @Override
@@ -112,15 +121,11 @@ public class Socks5Module extends Defaul
         
         fullDomain = EntityUtils.createComponentDomain(subdomain, 
serverRuntimeContext);
         
-        if(proxyAddress == null) {
-            proxyAddress = new 
InetSocketAddress(fullDomain.getFullQualifiedName(), port);
-        }
-        
         stanzaProcessor = new ComponentStanzaProcessor(serverRuntimeContext);
         stanzaProcessor.addHandler(new Socks5IqHandler(fullDomain, 
proxyAddress, connectionsRegistry));
         
         try {
-            startProxy(port);
+            startProxy();
         } catch (Exception e) {
             throw new RuntimeException("Failed to start SOCKS5 proxy", e);
         }
@@ -133,10 +138,11 @@ public class Socks5Module extends Defaul
         }
     }
 
-    private void startProxy(int port) throws Exception {
+    private void startProxy() throws Exception {
         acceptor = new NioSocketAcceptor();
         acceptor.setHandler(new Socks5AcceptorHandler(connectionsRegistry));
         acceptor.getSessionConfig().setBothIdleTime(idleTimeInSeconds);
+        System.out.println(proxyAddress);
         acceptor.bind(proxyAddress);
     }
 

Modified: 
mina/vysper/trunk/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java?rev=1084554&r1=1084553&r2=1084554&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java
 Wed Mar 23 11:58:27 2011
@@ -143,6 +143,25 @@ public class Socks5IqHandlerTest extends
 
         StanzaAssert.assertEquals(expected, response);
     }
+    
+    @Test
+    public void handleGetDefaultAddress() throws BindException, 
XMLSemanticError {
+        proxyAddress = new InetSocketAddress(12345);
+        handler = new Socks5IqHandler(jid, proxyAddress, connectionsRegistry);
+        Stanza response = handler.handleGet(stanza, serverRuntimeContext, 
sessionContext);
+        
+        Stanza expected = StanzaBuilder.createIQStanza(stanza.getTo(), 
stanza.getFrom(), IQStanzaType.RESULT, stanza.getID())
+        .startInnerElement("query", NamespaceURIs.XEP0065_SOCKS5_BYTESTREAMS)
+        .startInnerElement("streamhost", 
NamespaceURIs.XEP0065_SOCKS5_BYTESTREAMS)
+        .addAttribute("host", jid.getFullQualifiedName())
+        .addAttribute("jid", jid.getFullQualifiedName())
+        .addAttribute("port", Integer.toString(proxyAddress.getPort()))
+        .build();
+        
+        StanzaAssert.assertEquals(expected, response);
+    }
+    
+    
 
     @Test
     public void handleSetActivate() throws BindException, XMLSemanticError {


Reply via email to