Exemple #1
0
        public void SecondTimer()
        {
            // ip cache
            lock (IPs)
                while (IPs.Count > MAX_CACHE)
                {
                    DhtContact entry = IPs.Last.Value;
                    IPTable.Remove(entry.CacheHash());
                    IPs.RemoveLast();
                }

            // save cache
            if (Core.TimeNow > NextSave)
            {
                if (Network.IsLookup)
                {
                    Network.Lookup.Save(Core);
                }
                else
                {
                    Core.User.Save();
                }

                NextSave = Core.TimeNow.AddMinutes(5);
            }


            // if unresponsive
            if (!Network.Responsive)
            {
                Retry.Timer();

                if (Network.IsLookup)
                {
                    LoookupBootstrap();
                }
                else
                {
                    OpBootstrap();
                }
            }

            // send broadcast in lan mode every 20 secs
            if (Network.LanMode)//&& !IsLookup) //crit re-enable?
            {
                // if disconnected from LAN, once reconnected, establishing should be < 20 secs
                if (BroadcastTimeout <= 0)
                {
                    Ping ping = new Ping();
                    ping.Source = Network.GetLocalSource();
                    Network.LanControl.SendTo(ping);

                    BroadcastTimeout = 20;
                }
                else
                {
                    BroadcastTimeout--;
                }
            }
        }
Exemple #2
0
        public void AddContact(DhtContact entry)
        {
            lock (IPs)
            {
                if (IPTable.ContainsKey(entry.CacheHash()))
                {
                    entry = IPTable[entry.CacheHash()].Value; // replace entry with dupe to maintain next try info
                    IPs.Remove(entry);
                }

                // sort nodes based on last seen
                LinkedListNode <DhtContact> node = null;

                for (node = IPs.First; node != null; node = node.Next)
                {
                    if (entry.LastSeen > node.Value.LastSeen)
                    {
                        break;
                    }
                }

                IPTable[entry.CacheHash()] = (node != null) ? IPs.AddBefore(node, entry) : IPs.AddLast(entry);
            }
        }