Fix problem with relay and portforwarding

This commit is contained in:
Manfred Karrer 2014-10-25 19:22:02 +02:00
parent 6a51dd154a
commit 7c8a8dffcd

View file

@ -152,25 +152,16 @@ public class BootstrappedPeerFactory {
FutureDiscover futureDiscover; FutureDiscover futureDiscover;
// just temporary while port forwarding is not working // just temporary while port forwarding is not working
lastSuccessfulBootstrap = "relay";
switch (lastSuccessfulBootstrap) { switch (lastSuccessfulBootstrap) {
case "relay": case "relay":
case "portForwarding": // just temporary while port forwarding is not working
futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start(); //futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start(); // PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start();
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover); //FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT); // bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT);
break; bootstrapWithRelay(peerDHT);
case "default":
default:
discover(peerDHT);
break;
}
/* switch (lastSuccessfulBootstrap) {
case "relay":
futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start();
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT);
break; break;
case "portForwarding": case "portForwarding":
futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start(); futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
@ -180,7 +171,7 @@ public class BootstrappedPeerFactory {
default: default:
discover(peerDHT); discover(peerDHT);
break; break;
}*/ }
} catch (IOException e) { } catch (IOException e) {
setState("Cannot create peer with port: " + port + ". Exeption: " + e, false); setState("Cannot create peer with port: " + port + ". Exeption: " + e, false);
settableFuture.setException(e); settableFuture.setException(e);
@ -211,7 +202,7 @@ public class BootstrappedPeerFactory {
setState("Port forwarding has failed. We try to use a relay as next step."); setState("Port forwarding has failed. We try to use a relay as next step.");
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start(); PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start();
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover); FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT); // bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT);
} }
} }
@ -239,7 +230,7 @@ public class BootstrappedPeerFactory {
else { else {
log.warn("Port forwarding has failed. Reason: " + futureNAT.failedReason()); log.warn("Port forwarding has failed. Reason: " + futureNAT.failedReason());
setState("Port forwarding has failed. We try to use a relay as next step."); setState("Port forwarding has failed. We try to use a relay as next step.");
bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT); // bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT);
} }
} }
@ -284,10 +275,17 @@ public class BootstrappedPeerFactory {
}); });
} }
// just temporary while port forwarding is not working
// 3. Attempt: We try to use another peer as relay // 3. Attempt: We try to use another peer as relay
private void bootstrapWithRelay(PeerDHT peerDHT, PeerNAT peerNAT, FutureDiscover futureDiscover, /* private void bootstrapWithRelay(PeerDHT peerDHT, PeerNAT peerNAT, FutureDiscover futureDiscover,
FutureNAT futureNAT) { FutureNAT futureNAT) {*/
FutureRelayNAT futureRelayNAT = peerNAT.startRelay(futureDiscover, futureNAT);
private void bootstrapWithRelay(PeerDHT peerDHT) {
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start();
FutureRelayNAT futureRelayNAT = peerNAT.startRelay(getBootstrapAddress());
//FutureRelayNAT futureRelayNAT = peerNAT.startRelay(futureDiscover, futureNAT);
futureRelayNAT.addListener(new BaseFutureListener<BaseFuture>() { futureRelayNAT.addListener(new BaseFutureListener<BaseFuture>() {
@Override @Override
public void operationComplete(BaseFuture future) throws Exception { public void operationComplete(BaseFuture future) throws Exception {
@ -298,12 +296,12 @@ public class BootstrappedPeerFactory {
settableFuture.set(peerDHT); settableFuture.set(peerDHT);
} }
else { else {
setState("Bootstrap using relay has failed " + futureDiscover.failedReason(), false); setState("Bootstrap using relay has failed " + futureRelayNAT.failedReason(), false);
persistence.write(BootstrappedPeerFactory.this, "lastSuccessfulBootstrap", "default"); persistence.write(BootstrappedPeerFactory.this, "lastSuccessfulBootstrap", "default");
futureRelayNAT.shutdown(); futureRelayNAT.shutdown();
peerDHT.shutdown().awaitUninterruptibly(); peerDHT.shutdown().awaitUninterruptibly();
settableFuture.setException(new Exception("Bootstrap using relay failed " + settableFuture.setException(new Exception("Bootstrap using relay failed " +
futureDiscover.failedReason())); futureRelayNAT.failedReason()));
} }
} }