Compare commits

...

3 Commits

3 changed files with 28 additions and 12 deletions

View File

@ -1192,7 +1192,6 @@ class ClientConnectionRunner {
if (_floodfillNetworkDatabaseFacade == null) {
if (_log.shouldLog(Log.WARN))
_log.warn("getFloodfillNetworkDatabaseFacade is null for runner");
return _context.netDb();
}
return this._floodfillNetworkDatabaseFacade;
}

View File

@ -785,11 +785,6 @@ class ClientManager {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Getting subDb for desthash: " + destHash);
ClientConnectionRunner runner = getRunner(destHash);
if (runner == null){
if (_log.shouldLog(Log.WARN))
_log.warn("ClientManager got a null runner in getClientFloodfillNetworkDatabaseFacade for " + destHash);
return null;
}
if (_log.shouldLog(Log.DEBUG))
_log.debug("ClientManager got a runner in getClientFloodfillNetworkDatabaseFacade for " + destHash);
return runner.getFloodfillNetworkDatabaseFacade();

View File

@ -22,6 +22,7 @@ import net.i2p.data.i2cp.I2CPMessageException;
import net.i2p.data.i2cp.SessionId;
import net.i2p.router.JobImpl;
import net.i2p.router.RouterContext;
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
import net.i2p.util.Log;
/**
@ -91,7 +92,7 @@ class LookupDestJob extends JobImpl {
try {
bd = Blinding.decode(context, b);
SigningPublicKey spk = bd.getUnblindedPubKey();
BlindData bd2 = _runner.getFloodfillNetworkDatabaseFacade().getBlindData(spk);
BlindData bd2 = getRequiredFloodfillNetworkDatabaseFacade().getBlindData(spk);
if (bd2 != null) {
// BlindData from database may have privkey or secret
// check if we need it but don't have it
@ -110,7 +111,7 @@ class LookupDestJob extends JobImpl {
long exp = now + ((bd.getAuthRequired() || bd.getSecretRequired()) ? 365*24*60*60*1000L
: 90*24*68*60*1000L);
bd.setExpiration(exp);
_runner.getFloodfillNetworkDatabaseFacade().setBlindData(bd);
getRequiredFloodfillNetworkDatabaseFacade().setBlindData(bd);
}
h = bd.getBlindedHash();
if (_log.shouldDebug())
@ -185,14 +186,14 @@ class LookupDestJob extends JobImpl {
if (timeout > 1500)
timeout -= 500;
// TODO tell router this is an encrypted lookup, skip 38 or earlier ffs?
_runner.getFloodfillNetworkDatabaseFacade().lookupDestination(_hash, done, timeout, _fromLocalDest);
getRequiredFloodfillNetworkDatabaseFacade().lookupDestination(_hash, done, timeout, _fromLocalDest);
} else {
// blinding decode fail
returnFail(HostReplyMessage.RESULT_DECRYPTION_FAILURE);
}
}
private String toBase32(){
private String toBase32() {
if (_fromLocalDest != null)
return _fromLocalDest.toBase32();
return null;
@ -204,10 +205,10 @@ class LookupDestJob extends JobImpl {
}
public String getName() { return "LeaseSet Lookup Reply to Client"; }
public void runJob() {
Destination dest = _runner.getFloodfillNetworkDatabaseFacade().lookupDestinationLocally(_hash);
Destination dest = getRequiredFloodfillNetworkDatabaseFacade().lookupDestinationLocally(_hash);
if (dest == null && _blindData != null) {
// TODO store and lookup original hash instead
LeaseSet ls = _runner.getFloodfillNetworkDatabaseFacade().lookupLeaseSetLocally(_hash);
LeaseSet ls = getRequiredFloodfillNetworkDatabaseFacade().lookupLeaseSetLocally(_hash);
if (ls != null && ls.getType() == DatabaseEntry.KEY_TYPE_ENCRYPTED_LS2) {
// already decrypted
EncryptedLeaseSet encls = (EncryptedLeaseSet) ls;
@ -265,4 +266,25 @@ class LookupDestJob extends JobImpl {
_runner.doSend(msg);
} catch (I2CPMessageException ime) {}
}
/**
* If we don't have an FNDF in our runner, get the main netDb instead. This happens
* if there is not a session established yet.
*
* @return
*/
private FloodfillNetworkDatabaseFacade getRequiredFloodfillNetworkDatabaseFacade() {
if (_runner.getDestHash() == null) {
if (_log.shouldLog(Log.DEBUG))
_log.debug("destHash is null in runner in lookup for " + _hash + " using the main DB instead");
return getContext().netDb();
}
FloodfillNetworkDatabaseFacade fndf = _runner.getFloodfillNetworkDatabaseFacade();
if (fndf == null){
fndf = getContext().netDb();
if (_log.shouldLog(Log.DEBUG))
_log.debug("fndf is null in lookup for " + _runner.getDestHash() + " using the main DB instead");
}
return fndf;
}
}