private I2PIdentHash GetRandomRouter( RouletteSelection <I2PRouterInfo, I2PIdentHash> r, ConcurrentBag <I2PIdentHash> exclude, bool exploratory) { I2PIdentHash result; var me = RouterContext.Inst.MyRouterIdentity.IdentHash; if (exploratory) { var subset = RouterInfos .Where(k => !exclude.Contains(k.Key)); do { result = subset .Random() .Key; } while (result == me); return(result); } var retries = 0; bool tryagain; do { result = r.GetWeightedRandom(r.Wheel.Count() < 300 ? null : exclude); tryagain = result == me; } while (tryagain && ++retries < 20); //Logging.LogInformation( $"GetRandomRouter selected {result}: {exclude.Any( k2 => k2 == result )}" ); return(result); }
private void IsFirewalledUpdate() { var fw = RouterInfos.Where(ri => ri.Value.Router.Adresses.Any(a => a.Options.Any(o => o.Key.ToString() == "ihost0"))); foreach (var ri in fw) { Statistics.IsFirewalledUpdate(ri.Key, true); } }
private void RemoveOldRouterInfos() { var inactive = Statistics.GetInactive(); var old = RouterInfos.Where(ri => (DateTime.Now - (DateTime)ri.Value.Router.PublishedDate).TotalDays > 1) .Select(p => p.Key); inactive.UnionWith(old); if (RouterInfos.Count - inactive.Count < 400) { inactive = new HashSet <I2PIdentHash>( inactive .Where(k => RouterInfos.ContainsKey(k)) .OrderBy(k => (DateTime)RouterInfos[k].Router.PublishedDate) .Take(RouterInfos.Count - 400)); } RemoveRouterInfo(inactive); }
private void ShowDebugDatabaseInfo() { Logging.LogDebug($"NetDb: Router count: {RouterInfos.Count}"); var nohost = RouterInfos .Where(ri => !ri.Value.Router.Adresses.Any(a => a.Options.TryGet("host") != null)); Logging.LogDebug($"NetDb: No host: {nohost.Count()}"); var ipv4 = RouterInfos .Where(ri => ri.Value.Router.Adresses.Any(a => a.Options.TryGet("host")?.ToString().Contains(".") ?? false)); Logging.LogDebug($"NetDb: IPV4: {ipv4.Count()}"); var ipv6 = RouterInfos .Where(ri => ri.Value.Router.Adresses.Any(a => a.Options.TryGet("host")?.ToString().Contains(":") ?? false)); Logging.LogDebug($"NetDb: IPV6: {ipv6.Count()}"); var onlyipv4 = RouterInfos .Where(ri => ri.Value.Router.Adresses.Any(a => a.Options.TryGet("host")?.ToString().Contains(".") ?? false) && !ri.Value.Router.Adresses.Any(a => a.Options.TryGet("host")?.ToString().Contains(":") ?? false)); Logging.LogDebug($"NetDb: Only IPV4: {onlyipv4.Count()}"); var onlyipv6 = RouterInfos .Where(ri => ri.Value.Router.Adresses.Any(a => a.Options.TryGet("host")?.ToString().Contains(":") ?? false) && !ri.Value.Router.Adresses.Any(a => a.Options.TryGet("host")?.ToString().Contains(".") ?? false)); Logging.LogDebug($"NetDb: Only IPV6: {onlyipv6.Count()}"); var ntcp = RouterInfos .Where(ri => ri.Value.Router.Adresses.Any(a => a.TransportStyle == "NTCP")); Logging.LogDebug($"NetDb: NTCP: {ntcp.Count()}"); var ssu = RouterInfos .Where(ri => ri.Value.Router.Adresses.Any(a => a.TransportStyle == "SSU")); Logging.LogDebug($"NetDb: SSU: {ssu.Count()}"); var onlyntcp = RouterInfos .Where(ri => ri.Value.Router.Adresses.Any(a => a.TransportStyle == "NTCP") && !ri.Value.Router.Adresses.Any(a => a.TransportStyle == "SSU")); Logging.LogDebug($"NetDb: Only NTCP: {onlyntcp.Count()}"); var onlyssu = RouterInfos .Where(ri => ri.Value.Router.Adresses.Any(a => a.TransportStyle == "SSU") && !ri.Value.Router.Adresses.Any(a => a.TransportStyle == "NTCP")); Logging.LogDebug($"NetDb: Only SSU: {onlyssu.Count()}"); }