Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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()}");
        }