diff --git a/router/java/src/net/i2p/router/transport/UPnPManager.java b/router/java/src/net/i2p/router/transport/UPnPManager.java index 121fc599093c3323969cc82baa5fb374036517b5..4231bb24971eb608bb0540cce9664c340f7d3763 100644 --- a/router/java/src/net/i2p/router/transport/UPnPManager.java +++ b/router/java/src/net/i2p/router/transport/UPnPManager.java @@ -48,6 +48,9 @@ public class UPnPManager { _context = context; _manager = manager; _log = _context.logManager().getLog(UPnPManager.class); + // UPnP wants to bind to IPv6 link local interfaces by default, but what UPnP router + // is going to want to talk IPv6 anyway? Just make it easy and force IPv4 only + org.cybergarage.upnp.UPnP.setEnable(org.cybergarage.upnp.UPnP.USE_ONLY_IPV4_ADDR); _upnp = new UPnP(context); _upnp.setHTTPPort(_context.getProperty(PROP_HTTP_PORT, DEFAULT_HTTP_PORT)); _upnp.setSSDPPort(_context.getProperty(PROP_SSDP_PORT, DEFAULT_SSDP_PORT)); @@ -150,7 +153,7 @@ public class UPnPManager { public String renderStatusHTML() { if (!_isRunning) - return "<a name=\"upnp\"><<b>UPnP is not enabled</b>\n"; + return "<a name=\"upnp\"><b>UPnP is not enabled</b>\n"; return _upnp.renderStatusHTML(); } } diff --git a/router/java/src/org/cybergarage/http/HTTPServer.java b/router/java/src/org/cybergarage/http/HTTPServer.java index 1e44b6f8b863bc65b7266de599f00d98745257df..75c88c2b8beba0e83929c549ead30a2ccf8bf7aa 100644 --- a/router/java/src/org/cybergarage/http/HTTPServer.java +++ b/router/java/src/org/cybergarage/http/HTTPServer.java @@ -91,6 +91,7 @@ public class HTTPServer implements Runnable serverSock.setSoTimeout(10*1000); } catch (IOException e) { + Debug.warning("HTTP server open failed " + addr + " " + port, e); return false; } return true; diff --git a/router/java/src/org/cybergarage/upnp/ControlPoint.java b/router/java/src/org/cybergarage/upnp/ControlPoint.java index 03cc3726478f1d691e0e5e1863732f4221991925..f1d56f44bc303a301471ba87a24e11be5ecbe65b 100644 --- a/router/java/src/org/cybergarage/upnp/ControlPoint.java +++ b/router/java/src/org/cybergarage/upnp/ControlPoint.java @@ -786,9 +786,13 @@ public class ControlPoint implements HTTPRequestListener HTTPServerList httpServerList = getHTTPServerList(); while (httpServerList.open(bindPort) == false) { retryCnt++; - if (UPnP.SERVER_RETRY_COUNT < retryCnt) + if (UPnP.SERVER_RETRY_COUNT < retryCnt) { + Debug.warning("Failed to open HTTP event listener port " + bindPort); + // I2P do we really need this, or can we just break ? return false; - setHTTPPort(bindPort + 1); + } + // I2P go down not up so we don't run into other I2P things + setHTTPPort(bindPort - 1); bindPort = getHTTPPort(); } httpServerList.addRequestListener(this); @@ -799,8 +803,10 @@ public class ControlPoint implements HTTPRequestListener //////////////////////////////////////// SSDPNotifySocketList ssdpNotifySocketList = getSSDPNotifySocketList(); - if (ssdpNotifySocketList.open() == false) + if (ssdpNotifySocketList.open() == false) { + Debug.warning("Failed to open SSDP notify port 1900"); return false; + } ssdpNotifySocketList.setControlPoint(this); ssdpNotifySocketList.start(); @@ -813,9 +819,12 @@ public class ControlPoint implements HTTPRequestListener SSDPSearchResponseSocketList ssdpSearchResponseSocketList = getSSDPSearchResponseSocketList(); while (ssdpSearchResponseSocketList.open(ssdpPort) == false) { retryCnt++; - if (UPnP.SERVER_RETRY_COUNT < retryCnt) + if (UPnP.SERVER_RETRY_COUNT < retryCnt) { + Debug.warning("Failed to open SSDP search response port " + ssdpPort); return false; - setSSDPPort(ssdpPort + 1); + } + // I2P go down not up so we don't run into other I2P things + setSSDPPort(ssdpPort - 1); ssdpPort = getSSDPPort(); } ssdpSearchResponseSocketList.setControlPoint(this); diff --git a/router/java/src/org/cybergarage/upnp/UPnP.java b/router/java/src/org/cybergarage/upnp/UPnP.java index e27a5db40e03669ca1698597b6dac007b04f9730..22f209d6a3fade2b48d5fe20013a7aaa77212d27 100644 --- a/router/java/src/org/cybergarage/upnp/UPnP.java +++ b/router/java/src/org/cybergarage/upnp/UPnP.java @@ -37,7 +37,8 @@ public class UPnP public final static String NAME = "CyberLink"; public final static String VERSION = "1.7"; - public final static int SERVER_RETRY_COUNT = 100; + // I2P was 100 + public final static int SERVER_RETRY_COUNT = 4; public final static int DEFAULT_EXPIRED_DEVICE_EXTRA_TIME = 60; public final static String getServerName()