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); } } }
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); } }
internal void Add(I2PIdentHash dest, I2NPMessage msg) { if (CurrentlyUnresolvableRouters.Contains(dest)) { throw new RouterUnresolvableException($"Destination is tagged as unresolvable {dest}"); } 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); } }