// Token: 0x06001401 RID: 5121 RVA: 0x00073E68 File Offset: 0x00072068 private void SendPublishNotificationRequest(MailboxNotificationBatch batch) { AverageTimeCounter requestCounter = new AverageTimeCounter(PushNotificationsAssistantPerfCounters.AveragePublishingRequestProcessing, PushNotificationsAssistantPerfCounters.AveragePublishingRequestProcessingBase, true); this.publisherClient.BeginPublishNotifications(batch, delegate(IAsyncResult asyncResult) { object asyncState = asyncResult.AsyncState; try { this.publisherClient.EndPublishNotifications(asyncResult); PushNotificationsMonitoring.PublishSuccessNotification("SendPublishNotification", ""); } catch (Exception exception) { PushNotificationsAssistantPerfCounters.PublishingRequestErrors.Increment(); PushNotificationHelper.LogSendPublishNotificationException(exception, null); } finally { requestCounter.Stop(); } }, requestCounter); }
// Token: 0x0600167A RID: 5754 RVA: 0x0007EF34 File Offset: 0x0007D134 private void PerformDLExpansionOnItemRecipients(MailboxSession itemStore, MessageItem messageItem, ref bool isExpectedException) { Exception ex = null; try { GroupExpansionRecipients groupExpansionRecipients = null; if (this.MessageAlreadyHasRecipientsExpanded(messageItem, MessageItemSchema.GroupExpansionRecipients, out groupExpansionRecipients)) { RecipientDLExpansionEventBasedAssistant.Tracer.TraceDebug <StoreObjectId, string>((long)this.GetHashCode(), "Message with id: {0} and subject: '{1}' already have group recipients expanded.", messageItem.StoreObjectId, messageItem.Subject); StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_RecipientDLExpansionMessageAlreadyProcessed, null, new object[] { messageItem.StoreObjectId, groupExpansionRecipients }); return; } IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, itemStore.GetADSessionSettings(), 314, "PerformDLExpansionOnItemRecipients", "f:\\15.00.1497\\sources\\dev\\MailboxAssistants\\src\\assistants\\Compliance\\RecipientDLExpansionEventBasedAssistant.cs"); List <ADRecipient> list = new List <ADRecipient>(); List <ADRecipient> list2 = new List <ADRecipient>(); List <ADRecipient> list3 = new List <ADRecipient>(); foreach (Recipient recipient in messageItem.Recipients) { bool?flag = recipient.IsDistributionList(); if (flag != null && flag.Value) { if (recipient.RecipientItemType == RecipientItemType.To) { ADRecipient adrecipient = null; if (recipient.Participant.TryGetADRecipient(tenantOrRootOrgRecipientSession, out adrecipient) && adrecipient != null && !list.Contains(adrecipient)) { list.Add(adrecipient); } } else if (recipient.RecipientItemType == RecipientItemType.Cc) { ADRecipient adrecipient2 = null; if (recipient.Participant.TryGetADRecipient(tenantOrRootOrgRecipientSession, out adrecipient2) && adrecipient2 != null && !list2.Contains(adrecipient2)) { list2.Add(adrecipient2); } } else if (recipient.RecipientItemType == RecipientItemType.Bcc) { ADRecipient adrecipient3 = null; if (recipient.Participant.TryGetADRecipient(tenantOrRootOrgRecipientSession, out adrecipient3) && adrecipient3 != null && !list3.Contains(adrecipient3)) { list3.Add(adrecipient3); } } } } if (list.Count > 0 || list2.Count > 0 || list3.Count > 0) { RecipientDLExpansionPerfmon.TotalDLExpansionMessages.Increment(); RecipientDLExpansionPerfmon.TotalRecipientDLsInMessage.IncrementBy((long)(list.Count + list2.Count + list3.Count)); using (AverageTimeCounter averageTimeCounter = new AverageTimeCounter(RecipientDLExpansionPerfmon.AverageMessageDLExpansionProcessing, RecipientDLExpansionPerfmon.AverageMessageDLExpansionProcessingBase, true)) { try { GroupExpansionRecipients groupExpansionRecipients2 = new GroupExpansionRecipients(); DistributionGroupExpansionError distributionGroupExpansionError = DistributionGroupExpansionError.NoError; distributionGroupExpansionError |= this.ExpandGroupMemberRecipients(messageItem, list, RecipientItemType.To, groupExpansionRecipients2); distributionGroupExpansionError |= this.ExpandGroupMemberRecipients(messageItem, list2, RecipientItemType.Cc, groupExpansionRecipients2); distributionGroupExpansionError |= this.ExpandGroupMemberRecipients(messageItem, list3, RecipientItemType.Bcc, groupExpansionRecipients2); int num = 0; while (num++ <= 1) { try { groupExpansionRecipients2.SaveToStore(messageItem, MessageItemSchema.GroupExpansionRecipients); if (distributionGroupExpansionError != DistributionGroupExpansionError.NoError) { messageItem[MessageItemSchema.GroupExpansionError] = distributionGroupExpansionError; } SaveMode saveMode = SaveMode.NoConflictResolution; messageItem.Save(saveMode); break; } catch (TransientException ex2) { RecipientDLExpansionEventBasedAssistant.Tracer.TraceError <TransientException>((long)this.GetHashCode(), "Got transient exception when trying to update the message: \r\n{0}", ex2); if (num > 1) { RecipientDLExpansionEventBasedAssistant.Tracer.TraceDebug <int>((long)this.GetHashCode(), "It still failed after retry for {0} times, so give up.", 1); throw; } if (ex2 is SaveConflictException) { RecipientDLExpansionEventBasedAssistant.Tracer.TraceDebug((long)this.GetHashCode(), "Got SaveConflictException, will reload the item and retry immediately."); StoreId id = messageItem.Id; MessageItem messageItem2 = Item.BindAsMessage(itemStore, id, RecipientDLExpansionEventBasedAssistant.ItemProperties); messageItem.Dispose(); messageItem = messageItem2; } else { RecipientDLExpansionEventBasedAssistant.Tracer.TraceDebug <int>((long)this.GetHashCode(), "Wait for {0} milliseconds before retry again.", 30000); Thread.Sleep(30000); } } } } finally { averageTimeCounter.Stop(); } goto IL_382; } } RecipientDLExpansionEventBasedAssistant.Tracer.TraceWarning <StoreObjectId, string>((long)this.GetHashCode(), "Message with id: {0} and subject: '{1}' does not have any DG recipients.", messageItem.StoreObjectId, messageItem.Subject); StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_RecipientDLExpansionMessageNoDLRecipients, null, new object[] { messageItem.StoreObjectId }); IL_382 :; } catch (AccessDeniedException ex3) { ex = ex3; isExpectedException = true; } catch (ObjectNotFoundException ex4) { ex = ex4; isExpectedException = true; } catch (RecoverableItemsAccessDeniedException ex5) { isExpectedException = true; RecipientDLExpansionEventBasedAssistant.Tracer.TraceWarning((long)this.GetHashCode(), "Can't save DL expansion list to message with id: {0} and subject: '{1}' in mailbox: {2}, tenant: {3} because update item in Dumpster is not allowed. Exception: \r\n{4}", new object[] { messageItem.StoreObjectId, messageItem.Subject, itemStore.MailboxGuid, itemStore.OrganizationId, ex5 }); StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_RecipientDLExpansionUpdateItemInDumpster, null, new object[] { messageItem.StoreObjectId, messageItem.Subject, itemStore.MailboxGuid, itemStore.OrganizationId, ex5 }); } if (ex != null) { RecipientDLExpansionEventBasedAssistant.Tracer.TraceWarning((long)this.GetHashCode(), "Can't process message with id: {0} and subject: '{1}' in mailbox: {2}, tenant: {3} because it may no longer exist. Exception: \r\n{4}", new object[] { messageItem.StoreObjectId, messageItem.Subject, itemStore.MailboxGuid, itemStore.OrganizationId, ex }); StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_RecipientDLExpansionMessageNoLongerExist, null, new object[] { messageItem.StoreObjectId, itemStore.MailboxGuid, itemStore.OrganizationId, ex }); } }