private void ReturnMessage() { if (base.Message != null) { if (ExceptionHandler.IsFaulted(base.Message)) { this.FailMessage(); return; } if (this.result != null) { ComplianceMessage complianceMessage = base.Message.Clone(); Target messageTarget = complianceMessage.MessageTarget; complianceMessage.MessageTarget = complianceMessage.MessageSource; complianceMessage.MessageSource = messageTarget; complianceMessage.ComplianceMessageType = ComplianceMessageType.RecordResult; complianceMessage.ProtocolContext.DispatchData = this; complianceMessage.Payload = ComplianceSerializer.Serialize <WorkPayload>(WorkPayload.Description, new WorkPayload { WorkDefinition = this.result.GetSerializedResult(), WorkDefinitionType = complianceMessage.WorkDefinitionType }); RoutingCache.Instance.QueueDispatch(complianceMessage); } } }
// Token: 0x06000038 RID: 56 RVA: 0x00002D10 File Offset: 0x00000F10 protected RetrievedPayload RetrieveJobDistributionPayload(OrganizationId organizationId, Guid jobRunId, int taskId) { RetrievedPayload retrievedPayload = new RetrievedPayload(); ComplianceJobProvider complianceJobProvider = new ComplianceJobProvider(organizationId); Guid tenantGuid = organizationId.GetTenantGuid(); retrievedPayload.IsComplete = this.HasMoreTasks(organizationId, jobRunId); IEnumerable <CompositeTask> enumerable = from x in complianceJobProvider.FindCompositeTasks(tenantGuid, jobRunId, null, null) where x.TaskId > taskId select x; if (enumerable != null) { foreach (CompositeTask compositeTask in enumerable) { JobPayload jobPayload = new JobPayload(); jobPayload.Target = new Target { TargetType = Target.Type.MailboxSmtpAddress, Identifier = compositeTask.UserMaster }; PayloadReference payloadReference = PayloadHelper.GetPayloadReference(jobRunId, compositeTask.TaskId); jobPayload.Children.Add(ComplianceSerializer.Serialize <PayloadReference>(PayloadReference.Description, payloadReference)); retrievedPayload.Children.Add(jobPayload); retrievedPayload.Bookmark = compositeTask.TaskId.ToString(); } return(retrievedPayload); } throw new ArgumentException(string.Format("Not Task Data Found. TenantId-{0} JobId-{1} and TaskId-{2}", tenantGuid, jobRunId, taskId)); }
// Token: 0x06000007 RID: 7 RVA: 0x000025F4 File Offset: 0x000007F4 public override async Task <ComplianceMessage> GetResponseAsync(ComplianceMessage message) { byte[] messageBlob = ComplianceSerializer.Serialize <ComplianceMessage>(ComplianceMessage.Description, message); byte[] responseBlob = await this.TakeActionWithRetryOnCommunicationException <byte[]>(async() => await this.ProxyClient.ProcessMessageAsync(messageBlob), true); return(ComplianceSerializer.DeSerialize <ComplianceMessage>(ComplianceMessage.Description, responseBlob)); }
// Token: 0x06000033 RID: 51 RVA: 0x00002AB8 File Offset: 0x00000CB8 public override ComplianceMessage Process(ComplianceMessage input) { IPayloadRetriever payloadRetriever; FaultDefinition faultDefinition; WorkPayload workPayload; IApplicationPlugin applicationPlugin; if (Registry.Instance.TryGetInstance <IPayloadRetriever>(RegistryComponent.TaskDistribution, TaskDistributionComponent.PayloadRetriever, out payloadRetriever, out faultDefinition, "Process", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Blocks\\WorkBlock.cs", 40) && payloadRetriever.TryGetPayload <WorkPayload>(WorkPayload.Description, input.Payload, out workPayload, out faultDefinition) && Registry.Instance.TryGetInstance <IApplicationPlugin>(RegistryComponent.Application, workPayload.WorkDefinitionType, out applicationPlugin, out faultDefinition, "Process", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Blocks\\WorkBlock.cs", 44)) { ComplianceMessage complianceMessage = input.Clone(); complianceMessage.MessageId = string.Format("{0}-WORKRESULT", input.MessageId); complianceMessage.MessageSourceId = input.MessageId; complianceMessage.MessageSource = input.MessageTarget; complianceMessage.ComplianceMessageType = ComplianceMessageType.RecordResult; WorkPayload inputObject = null; if (ApplicationHelper.TryDoWork(complianceMessage, workPayload, out inputObject, out faultDefinition, "Process", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Blocks\\WorkBlock.cs", 54)) { complianceMessage.Payload = ComplianceSerializer.Serialize <WorkPayload>(WorkPayload.Description, inputObject); } if (faultDefinition != null) { ExceptionHandler.FaultMessage(complianceMessage, faultDefinition, true); } return(complianceMessage); } if (faultDefinition != null) { ExceptionHandler.FaultMessage(input, faultDefinition, true); } return(null); }
public IEnumerable <T> RetrievePayload <T>(ComplianceSerializationDescription <T> description, PayloadReference reference, int count = 2147483647) where T : Payload, new() { ComplianceMessage message = new ComplianceMessage { CorrelationId = Guid.NewGuid(), ComplianceMessageType = ComplianceMessageType.RetrieveRequest, WorkDefinitionType = WorkDefinitionType.Unrecognized }; bool isComplete = false; string bookmark = null; DriverClientBase driverClient; if (Registry.Instance.TryGetInstance <DriverClientBase>(RegistryComponent.Client, ClientType.DriverClient, out driverClient, out this.faultDefinition, "RetrievePayload", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Payload\\PayloadRetriever.cs", 161)) { for (;;) { reference.Bookmark = bookmark; reference.Count = count; message.Payload = ComplianceSerializer.Serialize <PayloadReference>(PayloadReference.Description, reference); Task <ComplianceMessage> payloadTask = driverClient.GetResponseAsync(message); if (!payloadTask.Wait(TaskDistributionSettings.DataLookupTime)) { break; } ComplianceMessage payloadResponse = payloadTask.Result; RetrievedPayload retrievedPayload; if (ComplianceSerializer.TryDeserialize <RetrievedPayload>(RetrievedPayload.Description, payloadResponse.Payload, out retrievedPayload, out this.faultDefinition, "RetrievePayload", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Payload\\PayloadRetriever.cs", 174)) { bookmark = retrievedPayload.Bookmark; isComplete = retrievedPayload.IsComplete; foreach (byte[] childBlob in retrievedPayload.Children) { T payload; if (ComplianceSerializer.TryDeserialize <T>(description, childBlob, out payload, out this.faultDefinition, "RetrievePayload", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Payload\\PayloadRetriever.cs", 181)) { yield return(payload); } } } if (count <= 1) { goto IL_236; } if (isComplete) { goto Block_5; } } throw new TimeoutException(); Block_5: IL_236: yield break; } throw new InvalidOperationException(); }
// Token: 0x06000118 RID: 280 RVA: 0x00006BC0 File Offset: 0x00004DC0 internal byte[] GetExchangeWorkDefinition() { SearchWorkDefinition searchWorkDefinition = new SearchWorkDefinition(); searchWorkDefinition.Parser = SearchWorkDefinition.QueryParser.KQL; searchWorkDefinition.DetailCount = 500; searchWorkDefinition.Query = this.ToKqlQuery(); WorkPayload workPayload = new WorkPayload(); workPayload.WorkDefinition = ComplianceSerializer.Serialize <SearchWorkDefinition>(SearchWorkDefinition.Description, searchWorkDefinition); workPayload.WorkDefinitionType = WorkDefinitionType.EDiscovery; return(ComplianceSerializer.Serialize <WorkPayload>(WorkPayload.Description, workPayload)); }
public static byte[][] GetMessageBlobs(IEnumerable <ComplianceMessage> messages) { int num = messages.Count <ComplianceMessage>(); int num2 = 0; byte[][] array = new byte[num][]; foreach (ComplianceMessage inputObject in messages) { byte[] array2 = ComplianceSerializer.Serialize <ComplianceMessage>(ComplianceMessage.Description, inputObject); array[num2] = array2; num2++; } return(array); }
// Token: 0x0600008E RID: 142 RVA: 0x000048BC File Offset: 0x00002ABC private void FailMessage() { if (ExceptionHandler.IsFaulted(base.Message)) { ComplianceMessage complianceMessage = base.Message.Clone(); Target messageTarget = complianceMessage.MessageTarget; complianceMessage.MessageTarget = complianceMessage.MessageSource; complianceMessage.MessageSource = messageTarget; complianceMessage.ComplianceMessageType = ComplianceMessageType.RecordResult; complianceMessage.ProtocolContext.DispatchData = this; complianceMessage.Payload = ComplianceSerializer.Serialize <WorkPayload>(WorkPayload.Description, base.Message.ProtocolContext.FaultDefinition.ToPayload()); RoutingCache.Instance.QueueDispatch(complianceMessage); } }
protected override ComplianceMessage CreateStartJobMessage() { ComplianceMessage complianceMessage = base.CreateStartJobMessage(); complianceMessage.WorkDefinitionType = WorkDefinitionType.EDiscovery; JobPayload jobPayload = new JobPayload(); jobPayload.JobId = this.DataObject.JobRunId.ToString(); jobPayload.Target = complianceMessage.MessageTarget; jobPayload.PayloadId = string.Empty; jobPayload.Children.Add(PayloadHelper.GetPayloadReference(this.DataObject.JobRunId, -1)); jobPayload.Payload = this.DataObject.GetExchangeWorkDefinition(); complianceMessage.Payload = ComplianceSerializer.Serialize <JobPayload>(JobPayload.Description, jobPayload); return(complianceMessage); }
// Token: 0x06000028 RID: 40 RVA: 0x00002944 File Offset: 0x00000B44 public override IEnumerable <ComplianceMessage> Process(ComplianceMessage input) { IPayloadRetriever retriever; FaultDefinition faultDefinition; JobPayload job; if (Registry.Instance.TryGetInstance <IPayloadRetriever>(RegistryComponent.TaskDistribution, TaskDistributionComponent.PayloadRetriever, out retriever, out faultDefinition, "Process", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Blocks\\DistributeBlock.cs", 38) && retriever.TryGetPayload <JobPayload>(JobPayload.Description, input.Payload, out job, out faultDefinition)) { WorkPayload workPayload; WorkPayload inputObject; if (MessageHelper.IsFromDriver(input) && retriever.TryGetPayload <WorkPayload>(WorkPayload.Description, job.Payload, out workPayload, out faultDefinition) && ApplicationHelper.TryPreprocess(input, workPayload, out inputObject, out faultDefinition, "Process", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Blocks\\DistributeBlock.cs", 48)) { job.Payload = ComplianceSerializer.Serialize <WorkPayload>(WorkPayload.Description, inputObject); } if (faultDefinition == null && !ExceptionHandler.IsFaulted(input)) { foreach (byte[] childBlob in job.Children) { foreach (JobPayload childJob in retriever.GetAllPayloads <JobPayload>(JobPayload.Description, childBlob, out faultDefinition)) { ComplianceMessage childMessage = input.Clone(); childMessage.MessageTarget = childJob.Target; childMessage.MessageId = childJob.JobId; childMessage.MessageSource = input.MessageTarget; childMessage.MessageSourceId = input.MessageId; if (childJob.Children.Count == 0) { childMessage.ComplianceMessageType = ComplianceMessageType.StartWork; childMessage.Payload = job.Payload; } else { childJob.Payload = job.Payload; childMessage.Payload = ComplianceSerializer.Serialize <JobPayload>(JobPayload.Description, childJob); } yield return(childMessage); } } } } if (faultDefinition != null) { ExceptionHandler.FaultMessage(input, faultDefinition, true); } yield break; }
protected override Task <IEnumerable <ComplianceMessage> > SendMessageAsyncInternal(IEnumerable <ComplianceMessage> messages) { return(Task.Run <IEnumerable <ComplianceMessage> >(delegate() { StatusPayload statusPayload = new StatusPayload(); foreach (ComplianceMessage complianceMessage in messages) { string tenantName = string.Empty; OrganizationId organizationId; if (OrganizationId.TryCreateFromBytes(complianceMessage.TenantId, Encoding.UTF8, out organizationId) && organizationId.OrganizationalUnit != null) { tenantName = organizationId.OrganizationalUnit.Name; using (IDisposable disposable = (IDisposable)this.GetRpsProvider(tenantName)) { byte[] value = ComplianceSerializer.Serialize <ComplianceMessage>(ComplianceMessage.Description, complianceMessage); PSCommand pscommand = new PSCommand(); pscommand.AddCommand(new Command("Send-ComplianceMessage", false)); pscommand.AddParameter("SerializedComplianceMessage", value); MethodBase method = this.rpsProviderAssembly.RpsProviderType.GetMethod("Execute", new Type[] { typeof(PSCommand), typeof(TimeSpan) }); object obj = disposable; object[] array = new object[2]; array[0] = pscommand; IEnumerable <PSObject> enumerable = (IEnumerable <PSObject>)method.Invoke(obj, array); if (enumerable != null && enumerable.Count <PSObject>() == 1 && (bool)enumerable.ToArray <PSObject>()[0].BaseObject) { statusPayload.QueuedMessages.Add(complianceMessage.MessageId); } } } } return (IEnumerable <ComplianceMessage>) new ComplianceMessage[] { new ComplianceMessage { Payload = ComplianceSerializer.Serialize <StatusPayload>(StatusPayload.Description, statusPayload) } }; })); }
public async Task <byte[]> ProcessMessageAsync(byte[] message) { ComplianceMessage response = null; ComplianceMessage request; FaultDefinition faultDefinition; MessageProcessorBase messageProcessor; if (ComplianceSerializer.TryDeserialize <ComplianceMessage>(ComplianceMessage.Description, message, out request, out faultDefinition, "ProcessMessageAsync", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Endpoint\\MessageProcessor.cs", 49) && Registry.Instance.TryGetInstance <MessageProcessorBase>(RegistryComponent.MessageProcessor, request.ComplianceMessageType, out messageProcessor, out faultDefinition, "ProcessMessageAsync", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Endpoint\\MessageProcessor.cs", 51)) { MessageLogger.Instance.LogMessageReceived(request); response = await messageProcessor.ProcessMessage(request); } if (faultDefinition != null) { response = new ComplianceMessage { WorkDefinitionType = WorkDefinitionType.Fault, Payload = faultDefinition.ToPayload() }; } return(ComplianceSerializer.Serialize <ComplianceMessage>(ComplianceMessage.Description, response)); }
public async Task <byte[][]> ReceiveMessagesAsync(byte[][] messageBlobs) { return(await Task.Run <byte[][]>(delegate() { StatusPayload statusPayload = new StatusPayload(); foreach (byte[] blob in messageBlobs) { ComplianceMessage complianceMessage; FaultDefinition fault; if (ComplianceSerializer.TryDeserialize <ComplianceMessage>(ComplianceMessage.Description, blob, out complianceMessage, out fault, "ReceiveMessagesAsync", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Endpoint\\MessageReceiver.cs", 56)) { MessageReceiverBase messageReceiverBase; if (Registry.Instance.TryGetInstance <MessageReceiverBase>(RegistryComponent.MessageReceiver, complianceMessage.ComplianceMessageType, out messageReceiverBase, out fault, "ReceiveMessagesAsync", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Endpoint\\MessageReceiver.cs", 58)) { if (messageReceiverBase.ReceiveMessage(complianceMessage)) { statusPayload.QueuedMessages.Add(complianceMessage.MessageId); } } else if (complianceMessage.ComplianceMessageType == ComplianceMessageType.EchoRequest) { statusPayload.QueuedMessages.Add(complianceMessage.MessageId); } else { ExceptionHandler.FaultMessage(complianceMessage, fault, true); } } } return new byte[][] { ComplianceSerializer.Serialize <ComplianceMessage>(ComplianceMessage.Description, new ComplianceMessage { ComplianceMessageType = ComplianceMessageType.Status, Payload = ComplianceSerializer.Serialize <StatusPayload>(StatusPayload.Description, statusPayload) }) }; })); }
public WorkPayload Preprocess(ComplianceMessage target, WorkPayload payload) { SearchWorkDefinition searchWorkDefinition; FaultDefinition faultDefinition; ISearchResultsProvider searchResultsProvider; if (ComplianceSerializer.TryDeserialize <SearchWorkDefinition>(SearchWorkDefinition.Description, payload.WorkDefinition, out searchWorkDefinition, out faultDefinition, "Preprocess", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\ApplicationPlugins\\EDiscovery\\SearchApplicationPlugin.cs", 128) && Registry.Instance.TryGetInstance <ISearchResultsProvider>(RegistryComponent.EDiscovery, EDiscoveryComponent.SearchResultProvider, out searchResultsProvider, out faultDefinition, "Preprocess", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\ApplicationPlugins\\EDiscovery\\SearchApplicationPlugin.cs", 130)) { searchWorkDefinition = searchResultsProvider.ParseSearch(target, searchWorkDefinition); return(new WorkPayload { PayloadId = payload.PayloadId, WorkDefinitionType = WorkDefinitionType.EDiscovery, WorkDefinition = ComplianceSerializer.Serialize <SearchWorkDefinition>(SearchWorkDefinition.Description, searchWorkDefinition) }); } if (faultDefinition != null) { ExceptionHandler.FaultMessage(target, faultDefinition, true); } return(null); }
// Token: 0x0600003D RID: 61 RVA: 0x00002FCC File Offset: 0x000011CC public override ComplianceMessage Process(ComplianceMessage input) { StatusPayload statusPayload = new StatusPayload(); if (input == null) { return(new ComplianceMessage { Payload = ComplianceSerializer.Serialize <StatusPayload>(StatusPayload.Description, statusPayload) }); } statusPayload.QueuedMessages.Add(input.MessageId); WorkPayload workPayload; FaultDefinition faultDefinition; OrganizationId orgId; if (ComplianceSerializer.TryDeserialize <WorkPayload>(WorkPayload.Description, input.Payload, out workPayload, out faultDefinition, "Process", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Blocks\\StoreResultsBlock.cs", 47) && OrganizationId.TryCreateFromBytes(input.TenantId, Encoding.UTF8, out orgId)) { Guid correlationId = input.CorrelationId; ComplianceJobProvider complianceJobProvider = new ComplianceJobProvider(orgId); ComplianceJobStatus status = ComplianceJobStatus.StatusUnknown; switch (workPayload.WorkDefinitionType) { case WorkDefinitionType.EDiscovery: status = ComplianceJobStatus.Succeeded; break; case WorkDefinitionType.Fault: status = ComplianceJobStatus.Failed; break; } complianceJobProvider.UpdateWorkloadResults(correlationId, input.Payload, ComplianceBindingType.ExchangeBinding, status); } return(new ComplianceMessage { Payload = ComplianceSerializer.Serialize <StatusPayload>(StatusPayload.Description, statusPayload) }); }
public override byte[] GetSerializedResult() { return(ComplianceSerializer.Serialize <SearchResult>(SearchResult.Description, this)); }
// Token: 0x0600029F RID: 671 RVA: 0x0000C0AF File Offset: 0x0000A2AF public override byte[] GetSerializedResult() { return(ComplianceSerializer.Serialize <FaultDefinition>(FaultDefinition.Description, this)); }
// Token: 0x0600012F RID: 303 RVA: 0x00007587 File Offset: 0x00005787 internal byte[] ToBlob() { return(ComplianceSerializer.Serialize <ComplianceSearchCondition>(ComplianceSearchCondition.Description, this)); }