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 {