forked from I2P_Developers/i2p.i2p
bugfixes for autodetection/update of IP address
This commit is contained in:
@ -75,6 +75,9 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
|
||||
RouterAddress addr = createTCPAddress();
|
||||
if (addr != null)
|
||||
addresses.add(addr);
|
||||
|
||||
addresses.addAll(_manager.getAddresses());
|
||||
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Creating addresses: " + addresses);
|
||||
return addresses;
|
||||
@ -91,7 +94,7 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
|
||||
String name = _context.router().getConfigSetting(PROP_I2NP_TCP_HOSTNAME);
|
||||
String port = _context.router().getConfigSetting(PROP_I2NP_TCP_PORT);
|
||||
if ( (name == null) || (port == null) ) {
|
||||
_log.info("TCP Host/Port not specified in config file - skipping TCP transport");
|
||||
//_log.info("TCP Host/Port not specified in config file - skipping TCP transport");
|
||||
return null;
|
||||
} else {
|
||||
_log.info("Creating TCP address on " + name + ":" + port);
|
||||
|
@ -36,7 +36,6 @@ import net.i2p.util.Log;
|
||||
public class TransportManager implements TransportEventListener {
|
||||
private Log _log;
|
||||
private List _transports;
|
||||
private List _addresses;
|
||||
private RouterContext _context;
|
||||
|
||||
private final static String PROP_DISABLE_TCP = "i2np.tcp.disable";
|
||||
@ -45,7 +44,6 @@ public class TransportManager implements TransportEventListener {
|
||||
_context = context;
|
||||
_log = _context.logManager().getLog(TransportManager.class);
|
||||
_transports = new ArrayList();
|
||||
_addresses = new ArrayList();
|
||||
}
|
||||
|
||||
public void addTransport(Transport transport) {
|
||||
@ -77,7 +75,6 @@ public class TransportManager implements TransportEventListener {
|
||||
for (int i = 0; i < _transports.size(); i++) {
|
||||
Transport t = (Transport)_transports.get(i);
|
||||
RouterAddress addr = t.startListening();
|
||||
if (addr != null) _addresses.add(addr);
|
||||
_log.debug("Transport " + i + " (" + t.getStyle() + ") started");
|
||||
}
|
||||
_log.debug("Done start listening on transports");
|
||||
@ -94,7 +91,6 @@ public class TransportManager implements TransportEventListener {
|
||||
((Transport)_transports.get(i)).stopListening();
|
||||
}
|
||||
_transports.clear();
|
||||
_addresses.clear();
|
||||
}
|
||||
|
||||
private boolean isSupported(Set addresses, Transport t) {
|
||||
@ -114,6 +110,15 @@ public class TransportManager implements TransportEventListener {
|
||||
return peers;
|
||||
}
|
||||
|
||||
List getAddresses() {
|
||||
List rv = new ArrayList(_transports.size());
|
||||
for (int i = 0; i < _transports.size(); i++) {
|
||||
Transport t = (Transport)_transports.get(i);
|
||||
rv.addAll(t.getCurrentAddresses());
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
public List getBids(OutNetMessage msg) {
|
||||
if (msg == null)
|
||||
throw new IllegalArgumentException("Null message? no bidding on a null outNetMessage!");
|
||||
@ -264,9 +269,12 @@ public class TransportManager implements TransportEventListener {
|
||||
StringBuffer buf = new StringBuffer(8*1024);
|
||||
buf.append("<h2>Transport Manager</h2>\n");
|
||||
buf.append("Listening on: <br /><pre>\n");
|
||||
for (Iterator iter = _addresses.iterator(); iter.hasNext(); ) {
|
||||
RouterAddress addr = (RouterAddress)iter.next();
|
||||
buf.append(addr.toString()).append("\n\n");
|
||||
for (int i = 0; i < _transports.size(); i++) {
|
||||
Transport t = (Transport)_transports.get(i);
|
||||
for (Iterator iter = t.getCurrentAddresses().iterator(); iter.hasNext(); ) {
|
||||
RouterAddress addr = (RouterAddress)iter.next();
|
||||
buf.append(addr.toString()).append("\n\n");
|
||||
}
|
||||
}
|
||||
buf.append("</pre>\n");
|
||||
for (Iterator iter = _transports.iterator(); iter.hasNext(); ) {
|
||||
|
@ -610,7 +610,7 @@ public class ConnectionBuilder {
|
||||
case 1: // not reachable
|
||||
fail("According to "
|
||||
+ _target.getIdentity().calculateHash().toBase64().substring(0,6)
|
||||
+ ", we are not reachable on " + _localIP);
|
||||
+ ", we are not reachable on " + _localIP + ":" + _transport.getPort());
|
||||
return false;
|
||||
case 2: // clock skew
|
||||
fail("According to "
|
||||
|
@ -639,6 +639,9 @@ public class ConnectionHandler {
|
||||
private boolean verifyReachability() {
|
||||
if (_actualPeer == null) return false;
|
||||
_remoteAddress = new TCPAddress(_actualPeer.getTargetAddress(TCPTransport.STYLE));
|
||||
if (!_transport.allowAddress(_remoteAddress))
|
||||
return false;
|
||||
|
||||
//if (true) return true;
|
||||
Socket s = null;
|
||||
try {
|
||||
|
@ -92,6 +92,9 @@ public class TCPAddress {
|
||||
|
||||
RouterAddress addr = new RouterAddress();
|
||||
|
||||
addr.setCost(10);
|
||||
addr.setExpiration(null);
|
||||
|
||||
Properties props = new Properties();
|
||||
props.setProperty(PROP_HOST, _host);
|
||||
props.setProperty(PROP_PORT, ""+_port);
|
||||
@ -141,7 +144,8 @@ public class TCPAddress {
|
||||
public boolean equals(Object val) {
|
||||
if ( (val != null) && (val instanceof TCPAddress) ) {
|
||||
TCPAddress addr = (TCPAddress)val;
|
||||
if ( (_addr != null) && (_addr.getHostAddress() != null) ) {
|
||||
if ( (_addr != null) && (_addr.getHostAddress() != null)
|
||||
&& (addr.getAddress() != null) && (addr.getAddress().getHostAddress() != null) ) {
|
||||
return DataHelper.eq(getAddress().getHostAddress(), addr.getAddress().getHostAddress())
|
||||
&& (getPort() == addr.getPort());
|
||||
} else {
|
||||
|
@ -63,7 +63,14 @@ class TCPListener {
|
||||
|
||||
public void startListening() {
|
||||
TCPAddress addr = _transport.getMyAddress();
|
||||
if (addr != null) {
|
||||
if ( (addr != null) && (addr.getHost() != null) && (addr.getPort() > 0) ) {
|
||||
if (_listener != null) {
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
_log.warn("Not starting another listener on " + addr
|
||||
+ " while already listening on " + _listener.getMyAddress());
|
||||
return;
|
||||
}
|
||||
|
||||
_listener = new ListenerRunner(addr);
|
||||
Thread t = new I2PThread(_listener, "Listener [" + addr.getPort()+"]");
|
||||
t.setDaemon(true);
|
||||
@ -80,7 +87,9 @@ class TCPListener {
|
||||
}
|
||||
|
||||
public void stopListening() {
|
||||
_listener.stopListening();
|
||||
if (_listener != null)
|
||||
_listener.stopListening();
|
||||
|
||||
for (int i = 0; i < _handlers.size(); i++) {
|
||||
SocketHandler h = (SocketHandler)_handlers.get(i);
|
||||
h.stopHandling();
|
||||
@ -93,6 +102,7 @@ class TCPListener {
|
||||
_socket = null;
|
||||
} catch (IOException ioe) {}
|
||||
}
|
||||
_listener = null;
|
||||
}
|
||||
|
||||
private InetAddress getInetAddress(String host) {
|
||||
@ -119,6 +129,8 @@ class TCPListener {
|
||||
}
|
||||
public void stopListening() { _isRunning = false; }
|
||||
|
||||
public TCPAddress getMyAddress() { return _myAddress; }
|
||||
|
||||
public void run() {
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Beginning TCP listener");
|
||||
|
@ -270,7 +270,7 @@ public class TCPTransport extends TransportImpl {
|
||||
*
|
||||
* @param address address that the remote host said was ours
|
||||
*/
|
||||
void ourAddressReceived(String address) {
|
||||
synchronized void ourAddressReceived(String address) {
|
||||
if (allowAddressUpdate()) {
|
||||
int port = getPort();
|
||||
TCPAddress addr = new TCPAddress(address, port);
|
||||
@ -282,6 +282,8 @@ public class TCPTransport extends TransportImpl {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Update our local address to " + address);
|
||||
updateAddress(addr);
|
||||
}
|
||||
} else {
|
||||
@ -361,10 +363,10 @@ public class TCPTransport extends TransportImpl {
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the given address a valid one that we could listen to?
|
||||
* Is the given address a valid one that we could listen to or contact?
|
||||
*
|
||||
*/
|
||||
private boolean allowAddress(TCPAddress address) {
|
||||
boolean allowAddress(TCPAddress address) {
|
||||
if (address == null) return false;
|
||||
if ( (address.getPort() <= 0) || (address.getPort() > 65535) )
|
||||
return false;
|
||||
@ -391,7 +393,6 @@ public class TCPTransport extends TransportImpl {
|
||||
RouterAddress routerAddr = addr.toRouterAddress();
|
||||
_myAddress = addr;
|
||||
_listener.stopListening();
|
||||
_listener.startListening();
|
||||
|
||||
Set addresses = getCurrentAddresses();
|
||||
List toRemove = null;
|
||||
@ -411,6 +412,11 @@ public class TCPTransport extends TransportImpl {
|
||||
addresses.add(routerAddr);
|
||||
|
||||
_context.router().rebuildRouterInfo();
|
||||
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Updating our local address to include " + addr.toString()
|
||||
+ " and modified our routerInfo to have: "
|
||||
+ _context.router().getRouterInfo().getAddresses());
|
||||
|
||||
_listener.startListening();
|
||||
}
|
||||
@ -435,7 +441,7 @@ public class TCPTransport extends TransportImpl {
|
||||
*
|
||||
* @return the port number, or -1 if there is no valid port
|
||||
*/
|
||||
private int getPort() {
|
||||
int getPort() {
|
||||
if ( (_myAddress != null) && (_myAddress.getPort() > 0) )
|
||||
return _myAddress.getPort();
|
||||
|
||||
|
Reference in New Issue
Block a user