Пример #1
0
        void IdentHashLookup_RouterInfoReceived(I2PRouterInfo ri)
        {
            LookupDestination lud = null;

            lock ( QueuedMessages )
            {
                if (QueuedMessages.TryGetValue(ri.Identity.IdentHash, out lud))
                {
                    Logging.LogTransport("UnknownRouterQueue: IdentHashLookup_RouterInfoReceived: Destination " +
                                         ri.Identity.IdentHash.Id32Short + " found. Sending.");

                    QueuedMessages.Remove(ri.Identity.IdentHash);
                }
            }

            if (lud != null)
            {
                try
                {
                    foreach (var msg in lud.Messages)
                    {
                        TransportProvider.Send(ri.Identity.IdentHash, msg);
                    }
                }
                catch (Exception ex)
                {
                    Logging.Log("UnknownRouterQueue", ex);
                }
            }
        }
Пример #2
0
        void IdentHashLookup_LookupFailure(I2PIdentHash key)
        {
            LookupDestination lud = null;

            lock ( QueuedMessages )
            {
                if (QueuedMessages.TryGetValue(key, out lud))
                {
                    DebugUtils.Log("UnknownRouterQueue: IdentHashLookup_LookupFailure: Destination " +
                                   key.Id32Short + " not found. Marking unresolvable.");

                    QueuedMessages.Remove(key);
                }
            }

            if (lud != null)
            {
                CurrentlyUnresolvableRouters.Add(key);
            }
        }
Пример #3
0
        void IdentHashLookup_LookupFailure(I2PIdentHash key)
        {
            LookupDestination lud = null;

            lock ( QueuedMessages )
            {
                if (QueuedMessages.TryGetValue(key, out lud))
                {
                    Logging.LogTransport("UnknownRouterQueue: IdentHashLookup_LookupFailure: Destination " +
                                         key.Id32Short + " not found. Marking unresolvable.");

                    QueuedMessages.Remove(key);
                }
            }

            if (lud != null)
            {
                CurrentlyUnresolvableRouters.Add(key);
                NetDb.Inst.Statistics.DestinationInformationFaulty(key);
            }
        }
Пример #4
0
        internal void Add(I2PIdentHash dest, I2NPMessage msg)
        {
            if (CurrentlyUnresolvableRouters.Contains(dest))
            {
                throw new RouterUnresolvableException("Destination is tagged as unresolvable " + dest.ToString());
            }

            var sendlookup = false;

            lock ( QueuedMessages )
            {
                if (!QueuedMessages.ContainsKey(dest))
                {
                    var newld = new LookupDestination(dest);
                    newld.Add(msg);
                    QueuedMessages[dest] = newld;
                    sendlookup           = true;
                }
                else
                {
                    var queue = QueuedMessages[dest];
                    if (queue.Messages.Count < MaxMessagesInQueue)
                    {
                        queue.Add(msg);
                    }
#if DEBUG
                    else
                    {
                        Logging.LogWarning("UnknownRouterQueue: Add: Too many messages in queue. Dropping new message.");
                    }
#endif
                }
            }

            if (sendlookup)
            {
                NetDb.Inst.IdentHashLookup.LookupRouterInfo(dest);
            }
        }