private bool ShouldProcessMessage(MailboxSession session, StoreDriverDeliveryEventArgsImpl argsImpl)
        {
            MessageItem messageItem = argsImpl.MessageItem;

            if (!StoreDriverConfig.Instance.IsGroupEscalationAgentEnabled)
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: skipping group message escalation as the feature is disabled via app config.");
                return(false);
            }
            if (!GroupEscalation.IsEscalationEnabled())
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: skipping group message escalation as the feature is disabled.");
                return(false);
            }
            if (session == null || !session.IsGroupMailbox())
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: skipping group message escalation as the session is not for a group mailbox.");
                return(false);
            }
            if (this.processedMessages.IsAlreadyProcessedForStage(messageItem.InternetMessageId, messageItem.SentTime, session.MailboxGuid, DeliveryStage.CreatedMessageEventHandled))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: skipping group message escalation as it was already processed earlier.");
                return(false);
            }
            if (!ObjectClass.IsMessage(argsImpl.MessageClass, false) && !ObjectClass.IsMeetingMessage(argsImpl.MessageClass) && !ObjectClass.IsMeetingMessageSeries(argsImpl.MessageClass))
            {
                GroupEscalationAgent.Tracer.TraceDebug <string>((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: ignoring messages that are not messages nor meeting messages. Message class {0}", argsImpl.MessageClass);
                return(false);
            }
            if (ObjectClass.IsMeetingForwardNotification(argsImpl.MessageClass) || ObjectClass.IsMeetingForwardNotificationSeries(argsImpl.MessageClass))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: item class is meeting forward notification. Do not process.");
                return(false);
            }
            if (ObjectClass.IsMeetingResponse(argsImpl.MessageClass) || ObjectClass.IsMeetingResponseSeries(argsImpl.MessageClass))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: item class is meeting response. Do not process.");
                return(false);
            }
            if (GroupEscalationAgent.IsEHAMigrationMeetingMessage(argsImpl.MailItem))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: ignoring EHA migration messages.");
                return(false);
            }
            if (GroupEscalationAgent.IsRepairUpdateMessage(argsImpl.MessageItem))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: ignoring RUM messages.");
                return(false);
            }
            if (GroupEscalationAgent.IsOofOrDsnMessage(argsImpl.MessageClass))
            {
                GroupEscalationAgent.Tracer.TraceDebug((long)this.GetHashCode(), "GroupEscalationAgent.ShouldProcessMessage: ignoring OOF or DSN messages.");
                return(false);
            }
            return(true);
        }
 private static bool ShouldBlockMessageForGroup(MailboxSession session, string messageClass)
 {
     return(session != null && session.IsGroupMailbox() && GroupEscalationAgent.IsOofOrDsnMessage(messageClass));
 }