Beispiel #1
0
        public bool Add(string key, IDnsQueryResponse response)
        {
            if (key == null)
            {
                throw new ArgumentNullException(key);
            }
            if (Enabled && response != null && !response.HasError)
            {
                var all = response.AllRecords;
                if (all.Any())
                {
                    double minTtl = all.Min(p => p.TimeToLive) * 1000d;

                    if (MinimumTimout.HasValue && minTtl < MinimumTimout.Value.TotalMilliseconds)
                    {
                        minTtl = (long)MinimumTimout.Value.TotalMilliseconds;
                    }
                    if (minTtl < 1d)
                    {
                        return(false);
                    }

                    var newEntry = new ResponseEntry(response, minTtl);

                    StartCleanup();
                    return(_cache.TryAdd(key, newEntry));
                }
            }

            StartCleanup();
            return(false);
        }
Beispiel #2
0
        protected AsyncReply(ResponseEntry entry)
            : base(entry)
        {
            var eventName = Entry.GetString("@0");

            Event = Enum.Parse <AsyncEvent>(eventName);
        }
Beispiel #3
0
        private string GetObjectJson(ResponseEntry re)
        {
            JsonSerializerSettings jsseting = new JsonSerializerSettings();

            jsseting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            jsseting.ContractResolver      = new CamelCasePropertyNamesContractResolver();
            return(JsonConvert.SerializeObject(re, Formatting.Indented, jsseting));
        }
Beispiel #4
0
        private void Send2HotelGroup(TaskOrderModel item)
        {
            ResponseEntry re = new ResponseEntry();

            re.T = "h";
            re.D = item;
            this._groups.Send("Hotel", GetObjectJson(re));
        }
Beispiel #5
0
        private void Send2TitcketGroup(TaskOrderModel item)
        {
            ResponseEntry re = new ResponseEntry();

            re.T = "k";
            re.D = item;
            this._groups.Send("Tiket", GetObjectJson(re));
        }
        public bool Add(string key, IDnsQueryResponse response, bool cacheFailures = false)
        {
            if (key == null) throw new ArgumentNullException(key);

            if (Enabled && response != null && (cacheFailures || (!response.HasError && response.Answers.Count > 0)))
            {
                if (response.Answers.Count == 0)
                {
                    // Cache entry for a failure response.
                    var newEntry = new ResponseEntry(response, FailureEntryTimeout.TotalMilliseconds);

                    StartCleanup();
                    return _cache.TryAdd(key, newEntry);
                }
                else
                {
                    var all = response.AllRecords.Where(p => !(p is Protocol.Options.OptRecord));
                    if (all.Any())
                    {
                        // in millis
                        double minTtl = all.Min(p => p.InitialTimeToLive) * 1000d;

                        if (MinimumTimout == Timeout.InfiniteTimeSpan)
                        {
                            // TODO: Log warning once?
                            minTtl = s_maxTimeout.TotalMilliseconds;
                        }
                        else if (MinimumTimout.HasValue && minTtl < MinimumTimout.Value.TotalMilliseconds)
                        {
                            minTtl = MinimumTimout.Value.TotalMilliseconds;
                        }

                        // max TTL check which can limit the upper boundary
                        if (MaximumTimeout.HasValue && MaximumTimeout != Timeout.InfiniteTimeSpan && minTtl > MaximumTimeout.Value.TotalMilliseconds)
                        {
                            minTtl = MaximumTimeout.Value.TotalMilliseconds;
                        }

                        if (minTtl < 1d)
                        {
                            return false;
                        }

                        var newEntry = new ResponseEntry(response, minTtl);

                        StartCleanup();
                        return _cache.TryAdd(key, newEntry);
                    }
                }
            }

            StartCleanup();
            return false;
        }
Beispiel #7
0
        internal static AsyncReply Parse(ResponseEntry reply)
        {
            var eventName = reply.GetString("@0");
            var eventCode = Enum.Parse <AsyncEvent>(eventName);

            return(eventCode switch
            {
                AsyncEvent.ADDRMAP => new NewAddressMappingEvent(reply),
                AsyncEvent.AUTHDIR_NEWDESCS => new AuthDirNewDescsEvent(reply),
                AsyncEvent.BUILDTIMEOUT_SET => new BuildTimeoutSetEvent(reply),
                AsyncEvent.BW => new BandwidthEvent(reply),
                AsyncEvent.CIRC => new CircuitEvent(reply),
                AsyncEvent.CIRC_MINOR => new CircuitMinorEvent(reply),
                AsyncEvent.CLIENTS_SEEN => new ClientsSeenEvent(reply),
                AsyncEvent.CONF_CHANGED => new ConfChangedEvent(reply),
                AsyncEvent.DEBUG => new DebugLogEvent(reply),
                AsyncEvent.DESCCHANGED => new DescChangedEvent(reply),
                AsyncEvent.ERR => new ErrorLogEvent(reply),
                AsyncEvent.GUARD => new GuardEvent(reply),
                AsyncEvent.INFO => new InfoLogEvent(reply),
                AsyncEvent.NEWCONSENSUS => new NewConsensusEvent(reply),
                AsyncEvent.NEWDESC => new NewDescriptorsAvailableEvent(reply),
                AsyncEvent.NOTICE => new NoticeLogEvent(reply),
                AsyncEvent.NS => new NsEvent(reply),
                AsyncEvent.ORCONN => new OrConnEvent(reply),
                AsyncEvent.SIGNAL => new SignalEvent(reply),
                AsyncEvent.STATUS_CLIENT => new StatusClientEvent(reply),
                AsyncEvent.STATUS_GENERAL => new StatusGeneralEvent(reply),
                AsyncEvent.STATUS_SERVER => new StatusServerEvent(reply),
                AsyncEvent.STREAM => new StreamEvent(reply),
                AsyncEvent.STREAM_BW => new StreamBandwidthEvent(reply),
                AsyncEvent.WARN => new WarningLogEvent(reply),
                AsyncEvent.STATUS_SEVER => new StatusServerEvent(reply),
                AsyncEvent.TRANSPORT_LAUNCHED => new TransportLaunchedEvent(reply),
                AsyncEvent.CONN_BW => new ConnectionBandwidthEvent(reply),
                AsyncEvent.CIRC_BW => new CircuitBandwidthEvent(reply),
                AsyncEvent.CELL_STATS => new CellStatsEvent(reply),
                AsyncEvent.TB_EMPTY => new TokenBucketsEmptyEvent(reply),
                AsyncEvent.HS_DESC => new HiddenServiceDescriptorEvent(reply),
                AsyncEvent.HS_DESC_CONTENT => new HiddenServiceDescriptorContentEvent(reply),
                AsyncEvent.NETWORK_LIVENESS => new NetworkLivenessEvent(reply),
                _ => throw new ProtocolException($"Unknown Event: \"{eventCode}\".")
            });
Beispiel #8
0
 internal SingleLineReply(ResponseEntry entry)
 {
     Entry = entry;
 }
Beispiel #9
0
 public Response(ResponseEntry entry)
 {
     Entries = new[] { entry };
 }