Changeset 67570db for router


Ignore:
Timestamp:
Apr 17, 2019 5:45:49 PM (15 months ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
a8ad30b3
Parents:
87d8d69
Message:

Transport: More fixes for NTCP when SSU disabled (ticket #1417)

Location:
router/java/src/net/i2p/router
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • router/java/src/net/i2p/router/RouterVersion.java

    r87d8d69 r67570db  
    1919    public final static String ID = "Monotone";
    2020    public final static String VERSION = CoreVersion.VERSION;
    21     public final static long BUILD = 6;
     21    public final static long BUILD = 7;
    2222
    2323    /** for example "-test" */
  • router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java

    r87d8d69 r67570db  
    14641464        }
    14651465        // ignore UPnP for now, get everything from SSU if it's enabled
    1466         if (source != SOURCE_SSU &&
    1467             _context.getBooleanPropertyDefaultTrue(TransportManager.PROP_ENABLE_UDP))
     1466        boolean ssuEnabled = _context.getBooleanPropertyDefaultTrue(TransportManager.PROP_ENABLE_UDP);
     1467        if (source != SOURCE_SSU && ssuEnabled)
    14681468            return;
     1469        Status old = ssuEnabled ? null : getReachabilityStatus();
    14691470        boolean isIPv6 = ip != null && ip.length == 16;
    1470         externalAddressReceived(ip, isIPv6, port);
     1471        boolean changed = externalAddressReceived(ip, isIPv6, port);
     1472        if (changed && !ssuEnabled) {
     1473            addressChanged(old);
     1474        }
    14711475    }
    14721476
     
    14921496            _log.warn("Removing address, ipv6? " + ipv6 + " from: " + source, new Exception());
    14931497        // ignore UPnP for now, get everything from SSU if it's enabled
    1494         if (source != SOURCE_SSU &&
    1495             _context.getBooleanPropertyDefaultTrue(TransportManager.PROP_ENABLE_UDP))
     1498        boolean ssuEnabled = _context.getBooleanPropertyDefaultTrue(TransportManager.PROP_ENABLE_UDP);
     1499        if (source != SOURCE_SSU && ssuEnabled)
    14961500            return;
    1497         externalAddressReceived(null, ipv6, 0);
     1501        Status old = ssuEnabled ? null : getReachabilityStatus();
     1502        boolean changed = externalAddressReceived(null, ipv6, 0);
     1503        if (changed && !ssuEnabled) {
     1504            addressChanged(old);
     1505        }
    14981506    }   
     1507
     1508    /**
     1509     *  Only called if SSU is disabled AND our address changed.
     1510     *  Tell the event log, and tell the router.
     1511     *
     1512     *  @since 0.9.40
     1513     */
     1514    private void addressChanged(Status old) {
     1515        Status status = getReachabilityStatus();
     1516        if (status != old) {
     1517            if (_log.shouldLog(Log.WARN))
     1518                _log.warn("Old status: " + old + " New status: " + status +
     1519                          " from: ", new Exception("traceback"));
     1520            if (old != Status.UNKNOWN)
     1521                _context.router().eventLog().addEvent(EventLog.REACHABILITY,
     1522                   "from " + _t(old.toStatusString()) + " to " +  _t(status.toStatusString()));
     1523        }
     1524        _context.router().rebuildRouterInfo();
     1525    }
    14991526   
    15001527    /**
     
    15031530     *
    15041531     *  @param ip previously validated; may be null to indicate IPv4 failure or port info only
     1532     *  @return true if our address changed
    15051533     *  @since IPv6 moved from CSFI.notifyReplaceAddress()
    15061534     */
    1507     private synchronized void externalAddressReceived(byte[] ip, boolean isIPv6, int port) {
     1535    private synchronized boolean externalAddressReceived(byte[] ip, boolean isIPv6, int port) {
    15081536        // FIXME just take first address for now
    15091537        // FIXME if SSU set to hostname, NTCP will be set to IP
     
    15811609                if (_log.shouldLog(Log.WARN))
    15821610                    _log.warn("null address with always config", new Exception());
    1583                 return;
     1611                return false;
    15841612            }
    15851613            // ip non-null
     
    15881616                _log.info("old: " + ohost + " config: " + name + " new: " + nhost);
    15891617            if (nhost == null || nhost.length() <= 0)
    1590                 return;
     1618                return false;
    15911619            if (ohost == null || ! ohost.equalsIgnoreCase(nhost)) {
    15921620                newProps.setProperty(RouterAddress.PROP_HOST, nhost);
     
    16081636            changed = true;
    16091637        } else if (ohost == null || ohost.length() <= 0) {
    1610             return;
     1638            return false;
    16111639        } else if (Boolean.parseBoolean(enabled) && !ssuOK) {
    16121640            // UDP transitioned to not-OK, turn off NTCP address
     
    16401668                } else {
    16411669                    _log.info("No change to NTCP Address");
    1642                     return;
     1670                    return false;
    16431671                }
    16441672            } else {
    16451673                _log.info("No change to NTCP Address");
    1646                 return;
     1674                return false;
    16471675            }
    16481676        }
     
    16661694        if (_log.shouldLog(Log.WARN))
    16671695            _log.warn("Updating NTCP Address (ipv6? " + isIPv6 + ") with " + newAddr);
    1668         return;         
     1696        return true;           
    16691697    }
    16701698
     
    16871715                _log.warn("UPnP has failed to open the NTCP port: " + port + " reason: " + reason);
    16881716        }
    1689         // ignore UPnP for now, get everything from SSU if it's enabled
    1690         if (!_context.getBooleanPropertyDefaultTrue(TransportManager.PROP_ENABLE_UDP)) {
    1691             // TODO
    1692             //if (success && ip != null && getExternalIP() != null) {
    1693             //    if (!isIPv4Firewalled())
    1694             //        setReachabilityStatus(Status.IPV4_OK_IPV6_UNKNOWN);
    1695             //}
    1696         }
     1717        // if SSU is disabled, externalAddressReceived() will update our address and call rebuildRouterInfo().
     1718        // getReachabilityStatus() should report correctly after address is updated.
     1719        //if (!_context.getBooleanPropertyDefaultTrue(TransportManager.PROP_ENABLE_UDP)) {
     1720        //    if (success && ip != null && isValid(ip) && !isIPv4Firewalled()) {
     1721        //        ...
     1722        //    }
     1723        //}
    16971724    }
    16981725
     
    17451772        }
    17461773        boolean hasV4 = getCurrentAddress(false) != null;
    1747         // or use _haveIPv6Addrnss ??
    17481774        boolean hasV6 = getCurrentAddress(true) != null;
    1749         if (!hasV4 && !hasV6)
    1750             return Status.UNKNOWN;
     1775        boolean showFirewalled = !_context.getBooleanPropertyDefaultTrue(TransportManager.PROP_ENABLE_UDP) &&
     1776                                 _context.router().getUptime() > 10*60*1000;
     1777        if (!hasV4 && !hasV6) {
     1778            return showFirewalled ? Status.REJECT_UNSOLICITED : Status.UNKNOWN;
     1779        }
    17511780        long now = _context.clock().now();
    17521781        boolean v4OK = hasV4 && !v4Disabled && now - _lastInboundIPv4 < 10*60*1000;
     
    17571786            if (v6Disabled)
    17581787                return Status.OK;
     1788            if (!_haveIPv6Address)
     1789                return Status.OK;
    17591790            if (!hasV6)
    17601791                return Status.IPV4_OK_IPV6_UNKNOWN;
     
    17641795                return Status.IPV4_DISABLED_IPV6_OK;
    17651796            if (!hasV4)
    1766                 return Status.IPV4_UNKNOWN_IPV6_OK;
     1797                return showFirewalled ? Status.IPV4_FIREWALLED_IPV6_OK : Status.IPV4_UNKNOWN_IPV6_OK;
    17671798        }
    17681799        for (NTCPConnection con : _conByIdent.values()) {
     
    17871818                        return Status.IPV4_DISABLED_IPV6_OK;
    17881819                    if (!hasV4)
    1789                         return Status.IPV4_UNKNOWN_IPV6_OK;
    1790                 }
    1791             }
    1792         }
    1793         if (v4OK)
     1820                        return showFirewalled ? Status.IPV4_FIREWALLED_IPV6_OK : Status.IPV4_UNKNOWN_IPV6_OK;
     1821                }
     1822            }
     1823        }
     1824        if (v4OK) {
     1825            if (!_haveIPv6Address)
     1826                return Status.OK;
    17941827            return Status.IPV4_OK_IPV6_UNKNOWN;
     1828        }
    17951829        if (v6OK)
    1796             return Status.IPV4_UNKNOWN_IPV6_OK;
     1830            return showFirewalled ? Status.IPV4_FIREWALLED_IPV6_OK : Status.IPV4_UNKNOWN_IPV6_OK;
    17971831        if (v4Disabled)
    17981832            return Status.IPV4_DISABLED_IPV6_UNKNOWN;
    1799         if (v6Disabled)
    1800             return Status.UNKNOWN;
    1801         return Status.UNKNOWN;
     1833        //if (v6Disabled)
     1834        //    return Status.UNKNOWN;
     1835        return showFirewalled ? Status.REJECT_UNSOLICITED : Status.UNKNOWN;
    18021836    }
    18031837
Note: See TracChangeset for help on using the changeset viewer.