public void LookupLeaseSet(I2PIdentHash ident) { var newitem = new IdentUpdateRequestInfo(ident, DatabaseLookupMessage.LookupTypes.LeaseSet); lock ( OutstandingQueries ) { DebugUtils.Log(string.Format("IdentResolver: Starting lookup of LeaseSet for {0}.", ident.Id32Short)); OutstandingQueries[ident] = newitem; } SendLSDatabaseLookup(ident, newitem); }
public void LookupRouterInfo(I2PIdentHash ident) { var newitem = new IdentUpdateRequestInfo(ident, DatabaseLookupMessage.LookupTypes.RouterInfo); lock ( OutstandingQueries ) { #if LOG_ALL_IDENT_LOOKUPS Logging.Log($"IdentResolver: Starting lookup of RouterInfo for {ident.Id32Short}."); #endif OutstandingQueries[ident] = newitem; } SendRIDatabaseLookup(ident, newitem); }
private void SendRIDatabaseLookup(I2PIdentHash ident, IdentUpdateRequestInfo info) { var ff = NetDb.Inst.GetClosestFloodfill( ident, 10 + 3 * info.Retries, info.AlreadyQueried, false); if (!ff.Any()) { Logging.Log($"IdentResolver: failed to find a floodfill router to lookup ({ident}): "); return; } ff.Shuffle(); ff = ff.Take(DatabaseLookupSelectFloodfillCount).ToArray(); foreach (var oneff in ff) { try { var msg = new DatabaseLookupMessage( ident, RouterContext.Inst.MyRouterIdentity.IdentHash, DatabaseLookupMessage.LookupTypes.RouterInfo); TransportProvider.Send(oneff, msg); #if LOG_ALL_IDENT_LOOKUPS Logging.Log($"IdentResolver: RouterInfo query {msg.Key.Id32Short} sent to {oneff.Id32Short}"); #endif } catch (Exception ex) { Logging.Log("SendRIDatabaseLookup", ex); } } foreach (var f in ff) { info.AlreadyQueried.Add(f); } }
private void SendRIDatabaseLookup(I2PIdentHash ident, IdentUpdateRequestInfo info) { var ff = NetDb.Inst.GetClosestFloodfill(ident, 10, info.AlreadyQueried, false).ToArray(); if (ff == null || ff.Length == 0) { DebugUtils.Log("IdentResolver: failed to find a floodfill router to lookup (" + ident.ToString() + "): "); return; } ff.Shuffle(); ff = ff.Take(DatabaseLookupSelectFloodfillCount).ToArray(); foreach (var oneff in ff) { try { var msg = new DatabaseLookupMessage( ident, RouterContext.Inst.MyRouterIdentity.IdentHash, DatabaseLookupMessage.LookupTypes.RouterInfo); TransportProvider.Send(oneff, msg); #if LOG_ALL_IDENT_LOOKUPS DebugUtils.Log("IdentResolver: RouterInfo query " + msg.Key.Id32Short + " sent to " + oneff.Id32Short); #endif } catch (Exception ex) { DebugUtils.Log("SendRIDatabaseLookup", ex); } } lock (info.AlreadyQueried) { info.AlreadyQueried.AddRange(ff); } }
private void SendLSDatabaseLookup(I2PIdentHash ident, IdentUpdateRequestInfo info) { var outtunnel = TunnelProvider.Inst.GetEstablishedOutboundTunnel(true); var replytunnel = TunnelProvider.Inst.GetInboundTunnel(true); if (outtunnel is null || replytunnel is null) { Logging.LogDebug($"SendLSDatabaseLookup: " + $"outtunnel: {outtunnel}, replytunnel: {replytunnel}"); return; } var getnext = DateTime.UtcNow.Hour >= 23; var ff = NetDb.Inst.GetClosestFloodfill( ident, DatabaseLookupSelectFloodfillCount + 2 * info.Retries, info.AlreadyQueried, getnext) .Select(r => new { Id = r, NetDb.Inst.Statistics[r].Score }); #if LOG_ALL_IDENT_LOOKUPS StringBuilder foundrouters = new StringBuilder(); StringBuilder foundrouterskeys = new StringBuilder(); foreach (var router in ff) { foundrouters.AppendFormat("{0}{1}{2}", (foundrouters.Length != 0 ? ", " : ""), router.Id32Short, FreenetBase64.Encode(router.Hash)); foundrouterskeys.AppendFormat("{0}{1}{2}", (foundrouterskeys.Length != 0 ? ", " : ""), router.Id32Short, FreenetBase64.Encode(router.RoutingKey.Hash)); } var st = foundrouters.ToString(); var st2 = foundrouterskeys.ToString(); #endif if (!ff.Any()) { Logging.Log($"IdentResolver failed to find a floodfill router to lookup ({ident}): "); return; } var minscore = ff.Min(r => r.Score); for (int i = 0; i < DatabaseLookupSelectFloodfillCount; ++i) { var oneff = ff .RandomWeighted(r => r.Score - minscore + 0.1) .Id; try { var msg = new DatabaseLookupMessage( ident, replytunnel.Destination, replytunnel.GatewayTunnelId, DatabaseLookupMessage.LookupTypes.LeaseSet, null); outtunnel.Send(new TunnelMessageRouter(msg, oneff)); info.AlreadyQueried.Add(oneff); #if !LOG_ALL_IDENT_LOOKUPS Logging.Log($"IdentResolver: LeaseSet query {msg.Key.Id32Short} " + $"sent to {oneff.Id32Short}. Dist: {oneff ^ msg.Key.RoutingKey}"); #endif } catch (Exception ex) { Logging.Log("SendLSDatabaseLookup", ex); } } }
private void SendLSDatabaseLookup(I2PIdentHash ident, IdentUpdateRequestInfo info) { /* * var replytunnel = TunnelProvider.Inst.GetInboundTunnel(); * if ( replytunnel == null ) return; */ var ff = NetDb.Inst.GetClosestFloodfill(ident, DatabaseLookupSelectFloodfillCount * 2, info.AlreadyQueried, false).ToArray(); #if LOG_ALL_IDENT_LOOKUPS StringBuilder foundrouters = new StringBuilder(); StringBuilder foundrouterskeys = new StringBuilder(); foreach (var router in ff) { foundrouters.AppendFormat("{0}{1}{2}", (foundrouters.Length != 0 ? ", " : ""), router.Id32Short, FreenetBase64.Encode(router.Hash)); foundrouterskeys.AppendFormat("{0}{1}{2}", (foundrouterskeys.Length != 0 ? ", " : ""), router.Id32Short, FreenetBase64.Encode(router.RoutingKey.Hash)); } var st = foundrouters.ToString(); var st2 = foundrouterskeys.ToString(); #endif if (ff == null || ff.Length == 0) { DebugUtils.Log("IdentResolver failed to find a floodfill router to lookup (" + ident.ToString() + "): "); return; } ff.Shuffle(); ff = ff.Take(DatabaseLookupSelectFloodfillCount).ToArray(); foreach (var oneff in ff) { try { var msg = new DatabaseLookupMessage( ident, RouterContext.Inst.MyRouterIdentity.IdentHash, DatabaseLookupMessage.LookupTypes.LeaseSet); /* * var msg = new DatabaseLookupMessage( * ident, * replytunnel.Destination, replytunnel.GatewayTunnelId, * DatabaseLookupMessage.LookupTypes.LeaseSet, null ); */ //TunnelProvider.Inst.SendEncrypted( oneff.Identity, false, msg ); TransportProvider.Send(oneff, msg); #if LOG_ALL_IDENT_LOOKUPS DebugUtils.Log(string.Format("IdentResolver: LeaseSet query {0} sent to {1}. Dist: {2}", msg.Key.Id32Short, oneff.Id32Short, oneff ^ msg.Key.RoutingKey)); #endif } catch (Exception ex) { DebugUtils.Log("SendLSDatabaseLookup", ex); } } lock (info.AlreadyQueried) { info.AlreadyQueried.AddRange(ff); } }