bugfixes for autodetection/update of IP address

This commit is contained in:
jrandom
2004-09-27 18:05:28 +00:00
committed by zzz
parent 0361246db0
commit cf780e296e
7 changed files with 53 additions and 17 deletions

View File

@ -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);

View File

@ -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(); ) {

View File

@ -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 "

View File

@ -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 {

View File

@ -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 {

View File

@ -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");

View File

@ -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;
@ -412,6 +413,11 @@ public class TCPTransport extends TransportImpl {
_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();