// Token: 0x06001575 RID: 5493 RVA: 0x0007E438 File Offset: 0x0007C638
        internal override Command.ExecutionState ExecuteCommand()
        {
            MessageItem     messageItem     = null;
            bool            flag            = false;
            DeleteItemFlags deletedItemFlag = DeleteItemFlags.HardDelete;

            try
            {
                base.ValidateBody();
                StoreObjectId defaultFolderId = base.MailboxSession.GetDefaultFolderId(DefaultFolderType.Drafts);
                messageItem = MessageItem.Create(base.MailboxSession, defaultFolderId);
                base.ParseMimeToMessage(messageItem);
                Guid guid;
                if (base.IsIrmOperation(out guid))
                {
                    RmsTemplate rmsTemplate = RmsTemplateReaderCache.LookupRmsTemplate(base.User.OrganizationId, guid);
                    if (rmsTemplate == null)
                    {
                        AirSyncDiagnostics.TraceError <Guid>(ExTraceGlobals.RequestsTracer, this, "Template {0} not found in cache", guid);
                        throw new AirSyncPermanentException(StatusCode.IRM_InvalidTemplateID, false)
                              {
                                  ErrorStringForProtocolLogger = "smcEInvalidTemplateID"
                              };
                    }
                    messageItem = RightsManagedMessageItem.Create(messageItem, AirSyncUtility.GetOutboundConversionOptions());
                    RightsManagedMessageItem rightsManagedMessageItem = messageItem as RightsManagedMessageItem;
                    rightsManagedMessageItem.SetRestriction(rmsTemplate);
                    rightsManagedMessageItem.Sender = new Participant(base.MailboxSession.MailboxOwner);
                }
                Command.CurrentCommand.ProtocolLogger.SetValue(ProtocolLoggerData.ClassName, messageItem.ClassName);
                if (!GlobalSettings.OnlyOrganizersCanSendMeetingChanges || !this.IsMeetingRelatedMessage(messageItem))
                {
                    base.SendMessage(messageItem);
                    flag = true;
                }
                else
                {
                    bool flag2 = this.CanSendMessage(messageItem);
                    if (GlobalSettings.GetGoidFromCalendarItemForMeetingResponse && base.Version < 160 && this.IsResponseMessageToSingleMeeting(messageItem))
                    {
                        GlobalObjectId goidFromItem = this.GetGoidFromItem(messageItem);
                        try
                        {
                            ResponseType       valueOrDefault    = messageItem.GetValueOrDefault <ResponseType>(MeetingResponseSchema.ResponseType);
                            DefaultFolderType  defaultFolderType = (valueOrDefault == ResponseType.Decline) ? DefaultFolderType.DeletedItems : DefaultFolderType.Calendar;
                            List <PropertyBag> list = this.QueryRelatedCalendarItems(defaultFolderType, goidFromItem);
                            if (list.Count == 0 && valueOrDefault == ResponseType.Decline)
                            {
                                list = this.QueryRelatedCalendarItems(DefaultFolderType.Calendar, goidFromItem);
                                if (list.Count == 0)
                                {
                                    list = this.QueryRelatedCalendarItems(DefaultFolderType.DeletedItems, goidFromItem);
                                }
                            }
                            this.FindAndSetMessageGoid(list, messageItem, goidFromItem);
                        }
                        catch (Exception ex)
                        {
                            AirSyncDiagnostics.TraceError <Exception>(ExTraceGlobals.RequestsTracer, this, "GetRelatedCalendarItemGoid threw exception {0}", ex);
                            AirSyncDiagnostics.SendInMemoryTraceWatson(ex);
                        }
                    }
                    if (flag2)
                    {
                        base.SendMessage(messageItem);
                        flag = true;
                    }
                    else
                    {
                        AirSyncDiagnostics.TraceDebug <Participant>(ExTraceGlobals.RequestsTracer, this, "Attempt to send meeting cancellation by attendee. Sender {0}", messageItem.Sender);
                        messageItem.ClassName = "IPM.Note";
                        messageItem.Save(SaveMode.NoConflictResolution);
                        deletedItemFlag = DeleteItemFlags.MoveToDeletedItems;
                        Command.CurrentCommand.ProtocolLogger.SetValue(ProtocolLoggerData.SkipSend, true.ToString());
                    }
                }
            }
            finally
            {
                if (messageItem != null)
                {
                    if (!flag)
                    {
                        base.DeleteMessage(messageItem, deletedItemFlag);
                    }
                    messageItem.Dispose();
                }
            }
            return(Command.ExecutionState.Complete);
        }
        // Token: 0x06001568 RID: 5480 RVA: 0x0007DFC4 File Offset: 0x0007C1C4
        protected SendMailBase.IrmAction GetIrmAction(SendMailBase.GetIrmActionCallback irmActionDelegate, ref Item smartItem, out RmsTemplate rmsTemplate)
        {
            if (irmActionDelegate == null)
            {
                throw new ArgumentNullException("irmActionDelegate");
            }
            if (smartItem == null)
            {
                throw new ArgumentNullException("smartItem");
            }
            SendMailBase.IrmAction irmAction = SendMailBase.IrmAction.None;
            rmsTemplate = null;
            Guid guid;

            if (this.IsIrmOperation(out guid))
            {
                RightsManagedMessageItem rightsManagedMessageItem = smartItem as RightsManagedMessageItem;
                if (rightsManagedMessageItem != null)
                {
                    if (!rightsManagedMessageItem.IsRestricted || !rightsManagedMessageItem.CanDecode)
                    {
                        AirSyncDiagnostics.TraceError(ExTraceGlobals.RequestsTracer, this, "Either the original IRM message was not properly formatted or it could not be decoded");
                        throw new AirSyncPermanentException(StatusCode.IRM_OperationNotPermitted, false)
                              {
                                  ErrorStringForProtocolLogger = "smbGiaOperationNotPermitted"
                              };
                    }
                    rightsManagedMessageItem.Decode(AirSyncUtility.GetOutboundConversionOptions(), true);
                    irmActionDelegate(rightsManagedMessageItem);
                    irmAction = SendMailBase.GetIrmActionForReplyForward(rightsManagedMessageItem.UsageRights, this.ReplaceMime, rightsManagedMessageItem.Restriction.Id == guid);
                    AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, this, "GetIrmActionForReplyForward: originalMessageRights={0}; originalTemplate={1}; newTemplate={2}; irmAction={3}", new object[]
                    {
                        rightsManagedMessageItem.UsageRights,
                        rightsManagedMessageItem.Restriction.Id,
                        guid,
                        irmAction
                    });
                    if (irmAction == SendMailBase.IrmAction.CreateNewPublishingLicense || irmAction == SendMailBase.IrmAction.CreateNewPublishingLicenseAttachOriginalMessage)
                    {
                        smartItem.Dispose();
                        smartItem = this.GetSmartItem();
                    }
                }
                else
                {
                    irmAction = SendMailBase.IrmAction.CreateNewPublishingLicense;
                }
                if (irmAction == SendMailBase.IrmAction.None)
                {
                    throw new InvalidOperationException("irmAction should not be None here.");
                }
                if (irmAction != SendMailBase.IrmAction.ReusePublishingLicense && irmAction != SendMailBase.IrmAction.ReusePublishingLicenseInlineOriginalBody && guid != Guid.Empty)
                {
                    rmsTemplate = RmsTemplateReaderCache.LookupRmsTemplate(base.User.OrganizationId, guid);
                    if (rmsTemplate == null)
                    {
                        AirSyncDiagnostics.TraceError <Guid>(ExTraceGlobals.RequestsTracer, this, "Template {0} not found in cache", guid);
                        throw new AirSyncPermanentException(StatusCode.IRM_InvalidTemplateID, false)
                              {
                                  ErrorStringForProtocolLogger = "smbGiaInvalidTemplateID"
                              };
                    }
                }
            }
            if ((irmAction == SendMailBase.IrmAction.ReusePublishingLicense && !this.ReplaceMime) || ((irmAction == SendMailBase.IrmAction.CreateNewPublishingLicenseInlineOriginalBody || irmAction == SendMailBase.IrmAction.ReusePublishingLicenseInlineOriginalBody || irmAction == SendMailBase.IrmAction.CreateNewPublishingLicenseAttachOriginalMessage) && this.ReplaceMime))
            {
                throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "irmAction = {0}, ReplaceMime = {1}", new object[]
                {
                    irmAction,
                    this.ReplaceMime
                }));
            }
            return(irmAction);
        }