示例#1
0
        protected override void Produce(object sender, DoWorkEventArgs e)
        {
            while (!BackgroundThread.CancellationPending)
            {
                Thread.Sleep(1000);

                if (!RequestFactory.IsApiKeyValid)
                {
                    Log.Error("VirusTotal API key is invalid. Please set the API key");
                    Thread.Sleep(5000);
                    continue;
                }

                if (!PendingApplications.IsEmpty)
                {
                    MultiHashRequest multiHashRequest = RequestFactory.GetMultiHashRequest();

                    foreach (var item in PendingApplications)
                    {
                        if (BackgroundThread.CancellationPending)
                        {
                            break;
                        }
                        else
                        {
                            IApplication application;
                            if (PendingApplications.TryDequeue(out application))
                            {
                                if (multiHashRequest.AddApplication(application))
                                {
                                    Log.Info("Added '" + application.Name + "' to the request");
                                }
                                else
                                {
                                    Log.Debug("Requeued application because the request is full: "
                                              + application.Name);
                                    // Requeue the application if the hash request is full.
                                    PendingApplications.Enqueue(application);
                                    break;
                                }
                            }
                        }
                    }

                    if (BackgroundThread.CancellationPending)
                    {
                        break;
                    }
                    else
                    {
                        Log.Info("Building multi hash request...");
                        multiHashRequest.Build();
                        IEvent multiHashRequestEvent = new MultiHashRequestEvent(multiHashRequest);
                        EventConduit.SendEvent(multiHashRequestEvent);
                    }
                }
            }
            e.Cancel = true;
        }
示例#2
0
        public override void OnEvent(IEvent _event)
        {
            EventType eventType = _event.GetEventType();

            switch (eventType)
            {
            case EventType.MultiHashRequest:
                MultiHashRequestEvent multiHashReportRequestEvent =
                    (MultiHashRequestEvent)_event;
                IRequest multiHashReportRequest =
                    multiHashReportRequestEvent.MultiHashReportRequest;
                RequestsToExecute.Enqueue(multiHashReportRequest);
                break;
            }
        }