public bool Check(IPAddress ipAddress) { if (ipAddress.AddressFamily == AddressFamily.InterNetwork) { var ipv4 = new Ipv4(ipAddress); lock (_lockObject) { return(!_ipv4ResultMap.GetOrAdd(ipv4, (_) => _ipv4RangeSet.Any(n => n.Verify(ipv4)))); } } return(true); }
public Task <IEnumerable <MulticastMessage <ChatMessage> > > GetChatMessages(Tag tag) { if (tag == null) { throw new ArgumentNullException(nameof(tag)); } var now = DateTime.UtcNow; return(Task.Run(() => { var results = new List <MulticastMessage <ChatMessage> >(); var trusts = new List <MulticastMetadata>(); var untrusts = new List <MulticastMetadata>(); foreach (var multicastMetadata in _coreManager.GetMulticastMetadatas(tag, "ChatMessage")) { if (_searchSignatures.Contains(multicastMetadata.Certificate.GetSignature())) { trusts.Add(multicastMetadata); } else { if ((now - multicastMetadata.CreationTime).TotalDays > 7) { continue; } untrusts.Add(multicastMetadata); } } trusts.Sort((x, y) => y.CreationTime.CompareTo(x.CreationTime)); untrusts.Sort((x, y) => { int c; if (0 != (c = y.Cost.CashAlgorithm.CompareTo(x.Cost.CashAlgorithm))) { return c; } if (0 != (c = y.Cost.Value.CompareTo(x.Cost.Value))) { return c; } return y.CreationTime.CompareTo(x.CreationTime); }); foreach (var multicastMetadata in CollectionUtils.Unite(trusts.Take(1024), untrusts.Take(1024))) { var dic = _cache_ChatMessages.GetOrAdd(multicastMetadata.Tag, (_) => new LockedHashDictionary <MulticastMetadata, MulticastMessage <ChatMessage> >()); // Cache { if (dic.TryGetValue(multicastMetadata, out var result)) { results.Add(result); continue; } } { var stream = _coreManager.VolatileGetStream(multicastMetadata.Metadata, 1024 * 1024 * 1); if (stream == null) { continue; } var result = new MulticastMessage <ChatMessage>( multicastMetadata.Tag, multicastMetadata.Certificate.GetSignature(), multicastMetadata.CreationTime, multicastMetadata.Cost, ContentConverter.FromStream <ChatMessage>(stream)); if (result.Value == null) { continue; } dic[multicastMetadata] = result; results.Add(result); } } return (IEnumerable <MulticastMessage <ChatMessage> >)results.ToArray(); })); }
public Task <IEnumerable <UnicastMessage <MailMessage> > > GetMailMessages(Signature signature, ExchangePrivateKey exchangePrivateKey) { if (signature == null) { throw new ArgumentNullException(nameof(signature)); } if (exchangePrivateKey == null) { throw new ArgumentNullException(nameof(exchangePrivateKey)); } return(Task.Run(() => { var results = new List <UnicastMessage <MailMessage> >(); var trusts = new List <UnicastMetadata>(); foreach (var unicastMetadata in _coreManager.GetUnicastMetadatas(signature, "MailMessage")) { if (_searchSignatures.Contains(unicastMetadata.Certificate.GetSignature())) { trusts.Add(unicastMetadata); } } trusts.Sort((x, y) => y.CreationTime.CompareTo(x.CreationTime)); foreach (var unicastMetadata in trusts.Take(1024)) { var dic = _cache_MailMessages.GetOrAdd(unicastMetadata.Signature, (_) => new LockedHashDictionary <UnicastMetadata, UnicastMessage <MailMessage> >()); // Cache { if (dic.TryGetValue(unicastMetadata, out var result)) { results.Add(result); continue; } } { var stream = _coreManager.VolatileGetStream(unicastMetadata.Metadata, 1024 * 1024 * 1); if (stream == null) { continue; } var result = new UnicastMessage <MailMessage>( unicastMetadata.Signature, unicastMetadata.Certificate.GetSignature(), unicastMetadata.CreationTime, ContentConverter.FromCryptoStream <MailMessage>(stream, exchangePrivateKey)); if (result.Value == null) { continue; } dic[unicastMetadata] = result; results.Add(result); } } return (IEnumerable <UnicastMessage <MailMessage> >)results.ToArray(); })); }