// Token: 0x06001A1C RID: 6684 RVA: 0x0005E458 File Offset: 0x0005C658 protected override GetDlpPolicyTipsResponse InternalExecute() { PolicyTipRequestLogger policyTipRequestLogger = PolicyTipRequestLogger.CreateInstance(this.CorrelationId); policyTipRequestLogger.StartStage(LogStage.ReceiveRequest); Item item = null; GetDlpPolicyTipsResponse result; try { GetDlpPolicyTipsCommand.SetReceiveRequestLogData(policyTipRequestLogger, this.ItemId, this.NeedToReclassify, this.BodyOrSubjectChanged, this.Recipients, this.EventTrigger, this.CustomizedStringsNeeded, this.ClientSupportsScanResultData, this.ScanResultData); if (base.CallContext != null && base.CallContext.AccessingADUser != null && base.CallContext.AccessingADUser.OrganizationId != null) { this.OrganizationId = base.CallContext.AccessingADUser.OrganizationId; if (this.ItemId == null || string.IsNullOrEmpty(this.ItemId.GetId())) { GetDlpPolicyTipsResponse invalidStoreItemIdResponse = GetDlpPolicyTipsResponse.InvalidStoreItemIdResponse; this.TransitionToSendResponse(false, true, invalidStoreItemIdResponse, policyTipRequestLogger, true); result = invalidStoreItemIdResponse; } else if (this.ItemId.GetId().Equals(GetDlpPolicyTipsCommand.pingRequestItemId, StringComparison.OrdinalIgnoreCase)) { policyTipRequestLogger.AppendData("Ping", "1"); GetDlpPolicyTipsResponse responseToPingRequest = GetDlpPolicyTipsResponse.GetResponseToPingRequest(); this.TransitionToSendResponse(true, false, responseToPingRequest, policyTipRequestLogger, false); result = responseToPingRequest; } else if (!GetDlpPolicyTipsCommand.AddItemToCurrentPending(this.ItemId.GetId())) { policyTipRequestLogger.AppendData("ItemAlreadyBeingProcessed", "1"); GetDlpPolicyTipsResponse itemAlreadyBeingProcessedResponse = GetDlpPolicyTipsResponse.ItemAlreadyBeingProcessedResponse; this.TransitionToSendResponse(true, true, itemAlreadyBeingProcessedResponse, policyTipRequestLogger, false); result = itemAlreadyBeingProcessedResponse; } else { ShortList <string> recipients = GetDlpPolicyTipsCommand.ValidateAndGetEmailAddressStrings(this.Recipients, policyTipRequestLogger); IdAndSession idAndSession = null; try { idAndSession = base.IdConverter.ConvertItemIdToIdAndSessionReadOnly(this.ItemId); } catch (InvalidStoreIdException exception) { policyTipRequestLogger.SetException(exception); GetDlpPolicyTipsResponse invalidStoreItemIdResponse2 = GetDlpPolicyTipsResponse.InvalidStoreItemIdResponse; this.TransitionToSendResponse(false, true, invalidStoreItemIdResponse2, policyTipRequestLogger, true); return(invalidStoreItemIdResponse2); } catch (ObjectNotFoundException exception2) { policyTipRequestLogger.SetException(exception2); GetDlpPolicyTipsResponse invalidStoreItemIdResponse3 = GetDlpPolicyTipsResponse.InvalidStoreItemIdResponse; this.TransitionToSendResponse(false, true, invalidStoreItemIdResponse3, policyTipRequestLogger, true); return(invalidStoreItemIdResponse3); } catch (AccessDeniedException exception3) { policyTipRequestLogger.SetException(exception3); GetDlpPolicyTipsResponse accessDeniedStoreItemIdResponse = GetDlpPolicyTipsResponse.AccessDeniedStoreItemIdResponse; this.TransitionToSendResponse(false, true, accessDeniedStoreItemIdResponse, policyTipRequestLogger, true); return(accessDeniedStoreItemIdResponse); } policyTipRequestLogger.EndStageAndTransitionToStage(LogStage.LoadItem); List <DlpPolicyMatchDetail> list = null; bool flag = false; string empty = string.Empty; string empty2 = string.Empty; item = Item.Bind(idAndSession.Session, idAndSession.Id); ScanResultStorageProvider scanResultStorageProvider = null; if (this.ClientSupportsScanResultData) { try { scanResultStorageProvider = new ClientScanResultStorageProvider(this.ScanResultData, item); goto IL_274; } catch (ClientScanResultParseException exception4) { policyTipRequestLogger.SetException(exception4); GetDlpPolicyTipsResponse invalidClientScanResultResponse = GetDlpPolicyTipsResponse.InvalidClientScanResultResponse; this.TransitionToSendResponse(false, true, invalidClientScanResultResponse, policyTipRequestLogger, true); return(invalidClientScanResultResponse); } } item.OpenAsReadWrite(); scanResultStorageProvider = new StoreItemScanResultStorageProvider(item); IL_274: string empty3 = string.Empty; if (!GetDlpPolicyTipsCommand.IsSupportedStoreItemType(item, policyTipRequestLogger, out empty3)) { GetDlpPolicyTipsResponse getDlpPolicyTipsResponse = new GetDlpPolicyTipsResponse(EvaluationResult.PermanentError); getDlpPolicyTipsResponse.DiagnosticData = string.Format("{0}:{1}", "UnSupportedStoreItemType", empty3); this.TransitionToSendResponse(false, true, getDlpPolicyTipsResponse, policyTipRequestLogger, true); result = getDlpPolicyTipsResponse; } else { if (item != null) { policyTipRequestLogger.AppendData("Subject", PolicyTipRequestLogger.MarkAsPII(item.GetValueOrDefault <string>(InternalSchema.Subject, string.Empty))); } string fromAddress = GetDlpPolicyTipsCommand.GetFromAddress(idAndSession, item, policyTipRequestLogger); if (string.IsNullOrEmpty(fromAddress)) { policyTipRequestLogger.AppendData("NullFrom", "1"); GetDlpPolicyTipsResponse getDlpPolicyTipsResponse2 = new GetDlpPolicyTipsResponse(EvaluationResult.PermanentError); getDlpPolicyTipsResponse2.DiagnosticData = "NullFrom"; this.TransitionToSendResponse(false, true, getDlpPolicyTipsResponse2, policyTipRequestLogger, true); result = getDlpPolicyTipsResponse2; } else if (!GetDlpPolicyTipsCommand.HasContent(item, scanResultStorageProvider, policyTipRequestLogger)) { policyTipRequestLogger.AppendData("NoContent", "1"); GetDlpPolicyTipsResponse noContentResponse = GetDlpPolicyTipsResponse.NoContentResponse; this.TransitionToSendResponse(true, true, noContentResponse, policyTipRequestLogger, true); result = noContentResponse; } else { policyTipRequestLogger.EndStageAndTransitionToStage(LogStage.RefreshClassifications); policyTipRequestLogger.AppendData("BeforeRefreshClassifications", DiscoveredDataClassification.ToString(scanResultStorageProvider.GetDlpDetectedClassificationObjects())); if (this.NeedToReclassify) { scanResultStorageProvider.ResetAllClassifications(); } else { if (this.BodyOrSubjectChanged) { scanResultStorageProvider.RefreshBodyClassifications(); } scanResultStorageProvider.RefreshAttachmentClassifications(); } policyTipRequestLogger.AppendData("AfterRefreshClassifications", DiscoveredDataClassification.ToString(scanResultStorageProvider.GetDlpDetectedClassificationObjects())); policyTipRequestLogger.EndStageAndTransitionToStage(LogStage.LoadRules); policyTipRequestLogger.AppendData("OrganizationId", this.OrganizationId.ToString()); RuleCollection ruleCollection = GetDlpPolicyTipsCommand.LoadRules(this.OrganizationId); if (ruleCollection == null || ruleCollection.Count == 0) { policyTipRequestLogger.AppendData("RuleCount", "0"); GetDlpPolicyTipsResponse noRulesResponse = GetDlpPolicyTipsResponse.NoRulesResponse; this.TransitionToSendResponse(true, true, noRulesResponse, policyTipRequestLogger, true); result = noRulesResponse; } else { policyTipRequestLogger.AppendData("RuleCount", ruleCollection.Count.ToString()); policyTipRequestLogger.AppendData("RuleNames", GetDlpPolicyTipsCommand.GetRuleNamesForTracking(ruleCollection)); policyTipRequestLogger.EndStageAndTransitionToStage(LogStage.EvaluateRules); ExecutionStatus executionStatus = GetDlpPolicyTipsCommand.RunRules(ruleCollection, scanResultStorageProvider, item, fromAddress, recipients, out list, out flag, out empty, out empty2, policyTipRequestLogger); policyTipRequestLogger.AppendData("ExecutionStatus", executionStatus.ToString()); policyTipRequestLogger.AppendData("MatchResults", (list == null) ? string.Empty : DlpPolicyMatchDetail.ToString(list)); policyTipRequestLogger.AppendData("RuleEvalLatency", empty); policyTipRequestLogger.AppendData("RuleEvalResult", empty2); PolicyTipCustomizedStrings policyTipCustomizedStrings = null; if (this.CustomizedStringsNeeded) { policyTipRequestLogger.EndStageAndTransitionToStage(LogStage.LoadCustomStrings); UserContext userContext = UserContextManager.GetUserContext(base.CallContext.HttpContext, base.CallContext.EffectiveCaller, true); CultureInfo userCulture = userContext.UserCulture; policyTipRequestLogger.AppendData("CallersCulture", userCulture.Name); policyTipCustomizedStrings = ADUtils.GetPolicyTipStrings(this.OrganizationId, userCulture.Name); policyTipRequestLogger.AppendData("PolicyTipStrings", (policyTipCustomizedStrings == null) ? string.Empty : string.Format("Url:{0}/Notify:{1}/Override:{2}/Block:{3}", new object[] { policyTipCustomizedStrings.ComplianceURL ?? string.Empty, policyTipCustomizedStrings.PolicyTipMessageNotifyString ?? string.Empty, policyTipCustomizedStrings.PolicyTipMessageOverrideString ?? string.Empty, policyTipCustomizedStrings.PolicyTipMessageBlockString ?? string.Empty })); } GetDlpPolicyTipsResponse getDlpPolicyTipsResponse3 = new GetDlpPolicyTipsResponse(EvaluationResult.Success); if (this.ClientSupportsScanResultData) { getDlpPolicyTipsResponse3.ScanResultData = ((ClientScanResultStorageProvider)scanResultStorageProvider).GetScanResultData(); getDlpPolicyTipsResponse3.DetectedClassificationIds = ((ClientScanResultStorageProvider)scanResultStorageProvider).GetDetectedClassificationIds(); } else { item.Save(SaveMode.ResolveConflicts); } if (list != null) { getDlpPolicyTipsResponse3.Matches = list.ToArray(); } if (flag) { getDlpPolicyTipsResponse3.OptimizationResult = OptimizationResult.NoContentMatch; } if (this.CustomizedStringsNeeded) { getDlpPolicyTipsResponse3.CustomizedStrings = policyTipCustomizedStrings; } this.TransitionToSendResponse(true, false, getDlpPolicyTipsResponse3, policyTipRequestLogger, true); result = getDlpPolicyTipsResponse3; } } } } } else { GetDlpPolicyTipsResponse nullOrganizationResponse = GetDlpPolicyTipsResponse.NullOrganizationResponse; this.TransitionToSendResponse(false, true, nullOrganizationResponse, policyTipRequestLogger, true); result = nullOrganizationResponse; } } catch (Exception ex) { policyTipRequestLogger.SetException(ex); GetDlpPolicyTipsResponse getDlpPolicyTipsResponse4; if (!GetDlpPolicyTipsCommand.CheckIfKnownExceptionAndUpdatePerfCounters(ex)) { getDlpPolicyTipsResponse4 = new GetDlpPolicyTipsResponse(EvaluationResult.UnexpectedPermanentError); this.TransitionToSendResponse(false, false, getDlpPolicyTipsResponse4, policyTipRequestLogger, true); throw; } getDlpPolicyTipsResponse4 = new GetDlpPolicyTipsResponse(EvaluationResult.PermanentError); this.TransitionToSendResponse(false, false, getDlpPolicyTipsResponse4, policyTipRequestLogger, true); List <string> list2 = null; List <string> list3 = null; string text = null; PolicyTipProtocolLog.GetExceptionTypeAndDetails(ex, out list2, out list3, out text, false); getDlpPolicyTipsResponse4.DiagnosticData = string.Format("OuterExceptionType:{0}/OuterExceptionMessage:{1}/InnerExceptionType:{2}/InnerExceptionMessage:{3}/ExceptionChain:{4}.", new object[] { list2[0], list3[0], (list2.Count > 1) ? list2[list2.Count - 1] : string.Empty, (list2.Count > 1) ? list3[list3.Count - 1] : string.Empty, text }); result = getDlpPolicyTipsResponse4; } finally { if (item != null) { item.Dispose(); item = null; } } return(result); }