diff --git a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java
index 86ba394e4..63bf73653 100644
--- a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java
+++ b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java
@@ -619,8 +619,8 @@ public class FIFOBandwidthLimiter {
public void renderStatusHTML(Writer out) throws IOException {
long now = now();
StringBuffer buf = new StringBuffer(4096);
- buf.append("
Limiter status: ").append(getStatus().toString()).append("
\n");
- buf.append("Pending bandwidth requests:
");
+ buf.append("Limiter Status:
").append(getStatus().toString()).append("
\n");
+ buf.append("Pending bandwidth requests:
");
buf.append("- Inbound requests:
");
synchronized (_pendingInboundRequests) {
for (int i = 0; i < _pendingInboundRequests.size(); i++) {
@@ -643,7 +643,7 @@ public class FIFOBandwidthLimiter {
buf.append("ms ago
\n");
}
}
- buf.append("
\n");
+ buf.append("
\n");
out.write(buf.toString());
out.flush();
}
diff --git a/router/java/src/net/i2p/router/transport/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java
index 0b7d8d547..813f7aa26 100644
--- a/router/java/src/net/i2p/router/transport/TransportManager.java
+++ b/router/java/src/net/i2p/router/transport/TransportManager.java
@@ -369,7 +369,7 @@ public class TransportManager implements TransportEventListener {
t.renderStatusHTML(out, urlBase, sortFlags);
}
StringBuffer buf = new StringBuffer(4*1024);
- buf.append("Listening on:
\n");
+ buf.append("Router Transport Addresses:
\n");
for (int i = 0; i < _transports.size(); i++) {
Transport t = (Transport)_transports.get(i);
if (t.getCurrentAddress() != null)
@@ -379,6 +379,8 @@ public class TransportManager implements TransportEventListener {
}
buf.append("
\n");
out.write(buf.toString());
+ out.write(_upnpManager.renderStatusHTML());
+ buf.append("\n");
out.flush();
}
}
diff --git a/router/java/src/net/i2p/router/transport/UPnP.java b/router/java/src/net/i2p/router/transport/UPnP.java
index aef65adc5..61ce5183b 100644
--- a/router/java/src/net/i2p/router/transport/UPnP.java
+++ b/router/java/src/net/i2p/router/transport/UPnP.java
@@ -108,11 +108,17 @@ public class UPnP extends ControlPoint implements DeviceChangeListener {
DetectedIP result = null;
final String natAddress = getNATAddress();
+ if (natAddress == null || natAddress.length() <= 0) {
+ _log.warn("No external address returned");
+ return null;
+ }
try {
InetAddress detectedIP = InetAddress.getByName(natAddress);
+
short status = DetectedIP.NOT_SUPPORTED;
thinksWeAreDoubleNatted = !TransportImpl.isPubliclyRoutable(detectedIP.getAddress());
// If we have forwarded a port AND we don't have a private address
+ _log.warn("NATAddress: \"" + natAddress + "\" detectedIP: " + detectedIP + " double? " + thinksWeAreDoubleNatted);
if((portsForwarded.size() > 1) && (!thinksWeAreDoubleNatted))
status = DetectedIP.FULL_INTERNET;
@@ -291,6 +297,7 @@ public class UPnP extends ControlPoint implements DeviceChangeListener {
return Integer.valueOf(getIP.getOutputArgumentList().getArgument("NewDownstreamMaxBitRate").getValue());
}
+/***
private void listStateTable(Service serv, StringBuilder sb) {
ServiceStateTable table = serv.getServiceStateTable();
sb.append("");
@@ -320,6 +327,7 @@ public class UPnP extends ControlPoint implements DeviceChangeListener {
sb.append("
");
}
}
+***/
private String toString(String action, String Argument, Service serv) {
Action getIP = serv.getAction(action);
@@ -333,122 +341,103 @@ public class UPnP extends ControlPoint implements DeviceChangeListener {
// TODO: extend it! RTFM
private void listSubServices(Device dev, StringBuilder sb) {
ServiceList sl = dev.getServiceList();
+ if (sl.size() <= 0)
+ return;
+ sb.append("
\n");
for(int i=0; iservice ("+i+") : "+serv.getServiceType()+"
");
+ sb.append("- Service: ");
if("urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1".equals(serv.getServiceType())){
- sb.append("WANCommonInterfaceConfig");
- sb.append(" status: " + toString("GetCommonLinkProperties", "NewPhysicalLinkStatus", serv));
- sb.append(" type: " + toString("GetCommonLinkProperties", "NewWANAccessType", serv));
- sb.append(" upstream: " + toString("GetCommonLinkProperties", "NewLayer1UpstreamMaxBitRate", serv));
- sb.append(" downstream: " + toString("GetCommonLinkProperties", "NewLayer1DownstreamMaxBitRate", serv) + "
");
+ sb.append("WAN Common Interface Config");
+ sb.append("- Status: " + toString("GetCommonLinkProperties", "NewPhysicalLinkStatus", serv));
+ sb.append("
- Type: " + toString("GetCommonLinkProperties", "NewWANAccessType", serv));
+ sb.append("
- Upstream: " + toString("GetCommonLinkProperties", "NewLayer1UpstreamMaxBitRate", serv));
+ sb.append("
- Downstream: " + toString("GetCommonLinkProperties", "NewLayer1DownstreamMaxBitRate", serv) + "
");
}else if("urn:schemas-upnp-org:service:WANPPPConnection:1".equals(serv.getServiceType())){
- sb.append("WANPPPConnection");
- sb.append(" status: " + toString("GetStatusInfo", "NewConnectionStatus", serv));
- sb.append(" type: " + toString("GetConnectionTypeInfo", "NewConnectionType", serv));
- sb.append(" upstream: " + toString("GetLinkLayerMaxBitRates", "NewUpstreamMaxBitRate", serv));
- sb.append(" downstream: " + toString("GetLinkLayerMaxBitRates", "NewDownstreamMaxBitRate", serv) + "
");
- sb.append(" external IP: " + toString("GetExternalIPAddress", "NewExternalIPAddress", serv) + "
");
+ sb.append("WAN PPP Connection");
+ sb.append("- Status: " + toString("GetStatusInfo", "NewConnectionStatus", serv));
+ sb.append("
- Type: " + toString("GetConnectionTypeInfo", "NewConnectionType", serv));
+ sb.append("
- Upstream: " + toString("GetLinkLayerMaxBitRates", "NewUpstreamMaxBitRate", serv));
+ sb.append("
- Downstream: " + toString("GetLinkLayerMaxBitRates", "NewDownstreamMaxBitRate", serv) + "
");
+ sb.append(" - External IP: " + toString("GetExternalIPAddress", "NewExternalIPAddress", serv) + "
");
}else if("urn:schemas-upnp-org:service:Layer3Forwarding:1".equals(serv.getServiceType())){
- sb.append("Layer3Forwarding");
- sb.append("DefaultConnectionService: " + toString("GetDefaultConnectionService", "NewDefaultConnectionService", serv));
+ sb.append("Layer 3 Forwarding");
+ sb.append("- Default Connection Service: " + toString("GetDefaultConnectionService", "NewDefaultConnectionService", serv));
}else if(WAN_IP_CONNECTION.equals(serv.getServiceType())){
- sb.append("WANIPConnection");
- sb.append(" status: " + toString("GetStatusInfo", "NewConnectionStatus", serv));
- sb.append(" type: " + toString("GetConnectionTypeInfo", "NewConnectionType", serv));
- sb.append(" external IP: " + toString("GetExternalIPAddress", "NewExternalIPAddress", serv) + "
");
+ sb.append("WAN IP Connection");
+ sb.append("- Status: " + toString("GetStatusInfo", "NewConnectionStatus", serv));
+ sb.append("
- Type: " + toString("GetConnectionTypeInfo", "NewConnectionType", serv));
+ sb.append("
- External IP: " + toString("GetExternalIPAddress", "NewExternalIPAddress", serv) + "
");
}else if("urn:schemas-upnp-org:service:WANEthernetLinkConfig:1".equals(serv.getServiceType())){
- sb.append("WANEthernetLinkConfig");
- sb.append(" status: " + toString("GetEthernetLinkStatus", "NewEthernetLinkStatus", serv) + "
");
+ sb.append("WAN Ethernet Link Config");
+ sb.append("- Status: " + toString("GetEthernetLinkStatus", "NewEthernetLinkStatus", serv) + "
");
}else
- sb.append("~~~~~~~ "+serv.getServiceType());
- listActions(serv, sb);
- listStateTable(serv, sb);
- sb.append("");
+ sb.append("~~~~~~~ "+serv.getServiceType() + "");
+ //listActions(serv, sb);
+ //listStateTable(serv, sb);
+ sb.append("
\n");
}
+ sb.append("
\n");
}
private void listSubDev(String prefix, Device dev, StringBuilder sb){
- sb.append("Device : "+dev.getFriendlyName()+" - "+ dev.getDeviceType()+"
");
+ if (prefix == null)
+ sb.append("Device: ");
+ else
+ sb.append("
- Subdevice: ");
+ sb.append(dev.getFriendlyName());
listSubServices(dev, sb);
DeviceList dl = dev.getDeviceList();
+ if (dl.size() <= 0)
+ return;
+ sb.append("
\n");
for(int j=0; j");
listSubDev(dev.getFriendlyName(), subDev, sb);
- sb.append("
");
}
- sb.append("");
+ sb.append("
\n");
}
-/*****
- public String handleHTTPGet(HTTPRequest request) throws PluginHTTPException {
- if(request.isParameterSet("getDeviceCapabilities")) {
- final StringBuilder sb = new StringBuilder();
- sb.append("UPnP report");
- listSubDev("WANDevice", _router, sb);
- sb.append("");
+ public String renderStatusHTML() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("UPnP Status:
");
+
+ if(isDisabled) {
+ sb.append("The plugin has been disabled; Do you have more than one UPnP Internet Gateway Device on your LAN ?");
+ return sb.toString();
+ } else if(!isNATPresent()) {
+ sb.append("The plugin hasn't found any UPnP aware, compatible device on your LAN.");
return sb.toString();
}
- HTMLNode pageNode = pr.getPageMaker().getPageNode("UP&P plugin configuration page", false, null);
- HTMLNode contentNode = pr.getPageMaker().getContentNode(pageNode);
-
- if(isDisabled) {
- HTMLNode disabledInfobox = contentNode.addChild("div", "class", "infobox infobox-error");
- HTMLNode disabledInfoboxHeader = disabledInfobox.addChild("div", "class", "infobox-header");
- HTMLNode disabledInfoboxContent = disabledInfobox.addChild("div", "class", "infobox-content");
-
- disabledInfoboxHeader.addChild("#", "UP&P plugin report");
- disabledInfoboxContent.addChild("#", "The plugin has been disabled; Do you have more than one UP&P IGD on your LAN ?");
- return pageNode.generate();
- } else if(!isNATPresent()) {
- HTMLNode notFoundInfobox = contentNode.addChild("div", "class", "infobox infobox-warning");
- HTMLNode notFoundInfoboxHeader = notFoundInfobox.addChild("div", "class", "infobox-header");
- HTMLNode notFoundInfoboxContent = notFoundInfobox.addChild("div", "class", "infobox-content");
-
- notFoundInfoboxHeader.addChild("#", "UP&P plugin report");
- notFoundInfoboxContent.addChild("#", "The plugin hasn't found any UP&P aware, compatible device on your LAN.");
- return pageNode.generate();
- }
-
- HTMLNode foundInfobox = contentNode.addChild("div", "class", "infobox infobox-normal");
- HTMLNode foundInfoboxHeader = foundInfobox.addChild("div", "class", "infobox-header");
- HTMLNode foundInfoboxContent = foundInfobox.addChild("div", "class", "infobox-content");
-
// FIXME L10n!
- foundInfoboxHeader.addChild("#", "UP&P plugin report");
- foundInfoboxContent.addChild("p", "The following device has been found : ").addChild("a", "href", "?getDeviceCapabilities").addChild("#", _router.getFriendlyName());
- foundInfoboxContent.addChild("p", "Our current external ip address is : " + getNATAddress());
+ sb.append("Found ");
+ listSubDev(null, _router, sb);
+ sb.append("
The current external IP address reported by UPnP is " + getNATAddress());
int downstreamMaxBitRate = getDownstreamMaxBitRate();
int upstreamMaxBitRate = getUpstramMaxBitRate();
if(downstreamMaxBitRate > 0)
- foundInfoboxContent.addChild("p", "Our reported max downstream bit rate is : " + getDownstreamMaxBitRate()+ " bits/sec");
+ sb.append("
UPnP reports the max downstream bit rate is : " + getDownstreamMaxBitRate()+ " bits/sec\n");
if(upstreamMaxBitRate > 0)
- foundInfoboxContent.addChild("p", "Our reported max upstream bit rate is : " + getUpstramMaxBitRate()+ " bits/sec");
+ sb.append("
UPnP reports the max upstream bit rate is : " + getUpstramMaxBitRate()+ " bits/sec\n");
synchronized(lock) {
if(portsToForward != null) {
for(ForwardPort port : portsToForward) {
- if(portsForwarded.contains(port)) {
- foundInfoboxContent.addChild("p", "The "+port.name+" port "+port.portNumber+" / "+port.protocol+" has been forwarded successfully.");
- } else {
- foundInfoboxContent.addChild("p", "The "+port.name+" port "+port.portNumber+" / "+port.protocol+" has not been forwarded.");
- }
+ sb.append("
" + protoToString(port.protocol) + " port " + port.portNumber + " for " + port.name);
+ if(portsForwarded.contains(port))
+ sb.append(" has been forwarded successfully by UPnP.\n");
+ else
+ sb.append(" has not been forwarded UPnP.\n");
}
}
}
- return pageNode.generate();
+ sb.append("
");
+ return sb.toString();
}
-
- public String handleHTTPPost(HTTPRequest request) throws PluginHTTPException {
- return null;
- }
-***/
private boolean addMapping(String protocol, int port, String description, ForwardPort fp) {
if(isDisabled || !isNATPresent() || _router == null) {
@@ -457,8 +446,8 @@ public class UPnP extends ControlPoint implements DeviceChangeListener {
}
// Just in case...
- // this confuses my linksys - zzz
- // removeMapping(protocol, port, fp, true);
+ // this confuses my linksys? - zzz
+ removeMapping(protocol, port, fp, true);
Action add = _service.getAction("AddPortMapping");
if(add == null) {
@@ -557,14 +546,18 @@ public class UPnP extends ControlPoint implements DeviceChangeListener {
registerPorts(portsToForwardNow);
}
+ private static String protoToString(int p) {
+ if(p == ForwardPort.PROTOCOL_UDP_IPV4)
+ return "UDP";
+ if(p == ForwardPort.PROTOCOL_TCP_IPV4)
+ return "TCP";
+ return "?";
+ }
+
private void registerPorts(Set portsToForwardNow) {
for(ForwardPort port : portsToForwardNow) {
- String proto;
- if(port.protocol == ForwardPort.PROTOCOL_UDP_IPV4)
- proto = "UDP";
- else if(port.protocol == ForwardPort.PROTOCOL_TCP_IPV4)
- proto = "TCP";
- else {
+ String proto = protoToString(port.protocol);
+ if (proto.length() <= 1) {
HashMap map = new HashMap();
map.put(port, new ForwardPortStatus(ForwardPortStatus.DEFINITE_FAILURE, "Protocol not supported", port.portNumber));
forwardCallback.portForwardStatus(map);
@@ -586,15 +579,10 @@ public class UPnP extends ControlPoint implements DeviceChangeListener {
private void unregisterPorts(Set portsToForwardNow) {
for(ForwardPort port : portsToForwardNow) {
- String proto;
- if(port.protocol == ForwardPort.PROTOCOL_UDP_IPV4)
- proto = "UDP";
- else if(port.protocol == ForwardPort.PROTOCOL_TCP_IPV4)
- proto = "TCP";
- else {
+ String proto = protoToString(port.protocol);
+ if (proto.length() <= 1)
// Ignore, we've already complained about it
continue;
- }
removeMapping(proto, port.portNumber, port, false);
}
}
diff --git a/router/java/src/net/i2p/router/transport/UPnPManager.java b/router/java/src/net/i2p/router/transport/UPnPManager.java
index 4deaebc4d..a508cabef 100644
--- a/router/java/src/net/i2p/router/transport/UPnPManager.java
+++ b/router/java/src/net/i2p/router/transport/UPnPManager.java
@@ -45,15 +45,18 @@ public class UPnPManager {
}
public synchronized void start() {
- _log.error("UPnP Start");
- Debug.on(); // UPnP stuff -> wrapper log
+ if (_log.shouldLog(Log.DEBUG)) {
+ _log.debug("UPnP Start");
+ Debug.on(); // UPnP stuff -> wrapper log
+ }
if (!_isRunning)
_upnp.runPlugin();
_isRunning = true;
}
public synchronized void stop() {
- _log.error("UPnP Stop");
+ if (_log.shouldLog(Log.DEBUG))
+ _log.debug("UPnP Stop");
if (_isRunning)
_upnp.terminate();
_isRunning = false;
@@ -61,7 +64,8 @@ public class UPnPManager {
/** call when the ports might have changed */
public void update(Map addresses) {
- _log.error("UPnP Update:");
+ if (_log.shouldLog(Log.DEBUG))
+ _log.debug("UPnP Update:");
if (!_isRunning)
return;
Set forwards = new HashSet(addresses.size());
@@ -86,7 +90,8 @@ public class UPnPManager {
protocol = ForwardPort.PROTOCOL_TCP_IPV4;
else
continue;
- _log.error("Adding: " + style + " " + port);
+ if (_log.shouldLog(Log.DEBUG))
+ _log.debug("Adding: " + style + " " + port);
ForwardPort fp = new ForwardPort(style, false, protocol, port);
forwards.add(fp);
}
@@ -98,18 +103,32 @@ public class UPnPManager {
/** Called to indicate status on one or more forwarded ports. */
public void portForwardStatus(Map statuses) {
- _log.error("UPnP Callback:");
+ if (_log.shouldLog(Log.DEBUG))
+ _log.debug("UPnP Callback:");
- DetectedIP[] ips = _upnp.getAddress();
- for (DetectedIP ip : ips) {
- _log.error("External address: " + ip.publicAddress + " type: " + ip.natType);
- }
+ DetectedIP[] ips = _upnp.getAddress();
+ if (ips != null) {
+ for (DetectedIP ip : ips) {
+ if (_log.shouldLog(Log.DEBUG))
+ _log.debug("External address: " + ip.publicAddress + " type: " + ip.natType);
+ }
+ } else {
+ if (_log.shouldLog(Log.DEBUG))
+ _log.debug("No external address returned");
+ }
- for (ForwardPort fp : statuses.keySet()) {
- ForwardPortStatus fps = statuses.get(fp);
- _log.error(fp.name + " " + fp.protocol + " " + fp.portNumber +
- " status: " + fps.status + " reason: " + fps.reasonString + " ext port: " + fps.externalPort);
- }
- }
+ for (ForwardPort fp : statuses.keySet()) {
+ ForwardPortStatus fps = statuses.get(fp);
+ if (_log.shouldLog(Log.DEBUG))
+ _log.debug(fp.name + " " + fp.protocol + " " + fp.portNumber +
+ " status: " + fps.status + " reason: " + fps.reasonString + " ext port: " + fps.externalPort);
+ }
+ }
+ }
+
+ public String renderStatusHTML() {
+ if (!_isRunning)
+ return "UPnP is not enabled\n";
+ return _upnp.renderStatusHTML();
}
}