// 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);
        }
        // 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));
        }
Exemple #4
0
 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);
         }
     }
 }
        public IEnumerable <T> GetAllPayloads <T>(ComplianceSerializationDescription <T> description, byte[] blob, out FaultDefinition faultDefinition) where T : Payload, new()
        {
            T t;

            if (ComplianceSerializer.TryDeserialize <T>(description, blob, out t, out faultDefinition, "GetAllPayloads", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Payload\\PayloadRetriever.cs", 88))
            {
                return(new T[]
                {
                    t
                });
            }
            PayloadReference reference;

            if (ComplianceSerializer.TryDeserialize <PayloadReference>(PayloadReference.Description, blob, out reference, out faultDefinition, "GetAllPayloads", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Payload\\PayloadRetriever.cs", 95))
            {
                PayloadRetriever.DriverRetriever retriever = new PayloadRetriever.DriverRetriever();
                IEnumerable <T> payloads = null;
                if (ExceptionHandler.Proxy.TryRun(delegate
                {
                    payloads = retriever.RetrievePayload <T>(description, reference, int.MaxValue);
                }, TaskDistributionSettings.DataLookupTime, out faultDefinition, null, null, default(CancellationToken), null, "GetAllPayloads", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Payload\\PayloadRetriever.cs", 99))
                {
                    return(payloads);
                }
                faultDefinition = retriever.FaultDefinition;
            }
            return(null);
        }
Exemple #6
0
        // Token: 0x0600011B RID: 283 RVA: 0x00006E0C File Offset: 0x0000500C
        private void UpdateFailureResults(WorkPayload workPayload)
        {
            FaultDefinition results;
            FaultDefinition faultDefinition;

            if (ComplianceSerializer.TryDeserialize <FaultDefinition>(FaultDefinition.Description, workPayload.WorkDefinition, out results, out faultDefinition, "UpdateFailureResults", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionCommon\\ObjectModel\\ComplianceSearch.cs", 429))
            {
                this.UpdateErrors(results);
            }
        }
            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();
            }
Exemple #8
0
 public static IEnumerable <ComplianceMessage> GetMessagesFromBlobs(IEnumerable <byte[]> blobs)
 {
     if (blobs != null)
     {
         foreach (byte[] blob in blobs)
         {
             yield return(ComplianceSerializer.DeSerialize <ComplianceMessage>(ComplianceMessage.Description, blob));
         }
     }
     yield break;
 }
Exemple #9
0
        // 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));
        }
 // 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);
     }
 }
Exemple #11
0
        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: 0x06000037 RID: 55 RVA: 0x00002BD0 File Offset: 0x00000DD0
        public override ComplianceMessage Process(ComplianceMessage input)
        {
            ComplianceMessage complianceMessage = new ComplianceMessage
            {
                CorrelationId = input.CorrelationId,
                TenantId      = input.TenantId,
                MessageId     = default(Guid).ToString()
            };
            FaultDefinition  faultDefinition = null;
            RetrievedPayload payload         = new RetrievedPayload();
            PayloadReference payloadReference;

            if (!ComplianceSerializer.TryDeserialize <PayloadReference>(PayloadReference.Description, input.Payload, out payloadReference, out faultDefinition, "Process", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Blocks\\RetrievePayloadBlock.cs", 43))
            {
                throw new BadStructureFormatException(string.Format("Problem in deserializing the payload reference:{0}", input.ComplianceMessageType));
            }
            OrganizationId organizationId;

            if (!OrganizationId.TryCreateFromBytes(input.TenantId, Encoding.UTF8, out organizationId))
            {
                throw new ArgumentException(string.Format("Problem in creating Organization Id from the tenant id:{0}", input.ComplianceMessageType));
            }
            Guid         jobRunId;
            int          taskId;
            PayloadLevel payloadLevel;

            if (PayloadHelper.TryReadFromPayloadReference(payloadReference, out jobRunId, out taskId, out payloadLevel))
            {
                switch (payloadLevel)
                {
                case PayloadLevel.Job:
                {
                    int taskId2;
                    if (!int.TryParse(payloadReference.Bookmark, out taskId2))
                    {
                        taskId2 = -1;
                    }
                    payload = this.RetrieveJobDistributionPayload(organizationId, jobRunId, taskId2);
                    break;
                }

                case PayloadLevel.Task:
                    payload = this.RetrieveTaskDistributionPayload(organizationId, jobRunId, taskId);
                    break;
                }
            }
            complianceMessage.Payload = payload;
            return(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);
        }
Exemple #14
0
        // Token: 0x0600000D RID: 13 RVA: 0x00002AEC File Offset: 0x00000CEC
        public virtual async Task <bool[]> SendMessageAsync(IEnumerable <ComplianceMessage> messages)
        {
            IEnumerable <ComplianceMessage> responses = await this.SendMessageAsyncInternal(messages);

            foreach (ComplianceMessage complianceMessage in responses)
            {
                FaultDefinition faultDefinition;
                StatusPayload   status;
                if (ComplianceSerializer.TryDeserialize <StatusPayload>(StatusPayload.Description, complianceMessage.Payload, out status, out faultDefinition, "SendMessageAsync", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionCommon\\Client\\WorkloadClientBase.cs", 45))
                {
                    return((from t in messages
                            select status.QueuedMessages.Contains(t.MessageId)).ToArray <bool>());
                }
            }
            return(new bool[1]);
        }
Exemple #15
0
        // 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;
        }
Exemple #16
0
 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)
             }
         };
     }));
 }
Exemple #17
0
        // Token: 0x06000119 RID: 281 RVA: 0x00006C1C File Offset: 0x00004E1C
        internal override void UpdateJobResults()
        {
            long num  = 0L;
            long num2 = 0L;

            foreach (KeyValuePair <ComplianceBindingType, ComplianceBinding> keyValuePair in base.Bindings)
            {
                WorkPayload     workPayload;
                FaultDefinition faultDefinition;
                if (keyValuePair.Value.JobResults != null && keyValuePair.Value.JobResults.Length != 0 && ComplianceSerializer.TryDeserialize <WorkPayload>(WorkPayload.Description, keyValuePair.Value.JobResults, out workPayload, out faultDefinition, "UpdateJobResults", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionCommon\\ObjectModel\\ComplianceSearch.cs", 325))
                {
                    switch (workPayload.WorkDefinitionType)
                    {
                    case WorkDefinitionType.EDiscovery:
                    {
                        SearchResult searchResult = ComplianceSerializer.DeSerialize <SearchResult>(SearchResult.Description, workPayload.WorkDefinition);
                        if (searchResult != null)
                        {
                            num  += searchResult.TotalCount;
                            num2 += searchResult.TotalSize;
                            if (searchResult.Results != null && searchResult.Results.Count != 0)
                            {
                                foreach (SearchResult.TargetSearchResult item in searchResult.Results)
                                {
                                    this.successfulResults.Add(item);
                                }
                            }
                        }
                        break;
                    }

                    case WorkDefinitionType.Fault:
                        this.UpdateFailureResults(workPayload);
                        break;
                    }
                }
            }
            this.ResultNumber = num;
            this.ResultSize   = num2;
        }
        public ResultBase RecordResult(ResultBase existing, WorkPayload addition)
        {
            SearchResult searchResult  = new SearchResult();
            SearchResult searchResult2 = existing as SearchResult;

            if (addition != null)
            {
                FaultDefinition faultDefinition;
                if (addition.WorkDefinitionType == WorkDefinitionType.Fault)
                {
                    FaultDefinition faultDefinition2;
                    if (!ComplianceSerializer.TryDeserialize <FaultDefinition>(FaultDefinition.Description, addition.WorkDefinition, out faultDefinition, out faultDefinition2, "RecordResult", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\ApplicationPlugins\\EDiscovery\\SearchApplicationPlugin.cs", 82))
                    {
                        faultDefinition = faultDefinition2;
                    }
                }
                else if (ComplianceSerializer.TryDeserialize <SearchResult>(SearchResult.Description, addition.WorkDefinition, out searchResult, out faultDefinition, "RecordResult", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\ApplicationPlugins\\EDiscovery\\SearchApplicationPlugin.cs", 87))
                {
                    if (searchResult2 == null)
                    {
                        searchResult2 = searchResult;
                    }
                    else
                    {
                        searchResult2.UpdateTotalSize(searchResult.TotalSize);
                        searchResult2.UpdateTotalCount(searchResult.TotalCount);
                        searchResult2.MergeFaults(searchResult);
                    }
                }
                if (faultDefinition != null)
                {
                    if (searchResult2 == null)
                    {
                        searchResult2 = new SearchResult();
                    }
                    searchResult2.MergeFaults(faultDefinition);
                }
            }
            return(searchResult2);
        }
Exemple #19
0
        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));
        }
Exemple #20
0
 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);
        }
Exemple #22
0
        // 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)
            });
        }
Exemple #23
0
        // Token: 0x06000122 RID: 290 RVA: 0x00007204 File Offset: 0x00005404
        private void ParseSearchCondtions(List <byte[]> conditions)
        {
            if (conditions == null || conditions.Count == 0)
            {
                return;
            }
            foreach (byte[] blob in conditions)
            {
                ComplianceSearchCondition complianceSearchCondition = ComplianceSerializer.DeSerialize <ComplianceSearchCondition>(ComplianceSearchCondition.Description, blob);
                if (complianceSearchCondition != null)
                {
                    switch (complianceSearchCondition.Name)
                    {
                    case ComplianceSearchCondition.ConditionName.StartDate:
                    {
                        DateTime value;
                        if (this.TryParseDateString(complianceSearchCondition.Content, out value))
                        {
                            this.StartDate = new DateTime?(value);
                        }
                        break;
                    }

                    case ComplianceSearchCondition.ConditionName.EndDate:
                    {
                        DateTime value;
                        if (this.TryParseDateString(complianceSearchCondition.Content, out value))
                        {
                            this.EndDate = new DateTime?(value);
                        }
                        break;
                    }
                    }
                }
            }
        }
        public bool TryGetPayload <T>(ComplianceSerializationDescription <T> description, byte[] blob, out T payload, out FaultDefinition faultDefinition) where T : Payload, new()
        {
            if (ComplianceSerializer.TryDeserialize <T>(description, blob, out payload, out faultDefinition, "TryGetPayload", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Payload\\PayloadRetriever.cs", 39))
            {
                return(true);
            }
            PayloadReference reference;

            if (ComplianceSerializer.TryDeserialize <PayloadReference>(PayloadReference.Description, blob, out reference, out faultDefinition, "TryGetPayload", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Payload\\PayloadRetriever.cs", 48))
            {
                PayloadRetriever.DriverRetriever retriever = new PayloadRetriever.DriverRetriever();
                T currentPayload = default(T);
                if (ExceptionHandler.Proxy.TryRun(delegate
                {
                    currentPayload = retriever.RetrievePayload <T>(description, reference, int.MaxValue).FirstOrDefault <T>();
                }, TaskDistributionSettings.DataLookupTime, out faultDefinition, null, null, default(CancellationToken), null, "TryGetPayload", "f:\\15.00.1497\\sources\\dev\\EDiscovery\\src\\TaskDistributionSystem\\TaskDistributionFabric\\Payload\\PayloadRetriever.cs", 53))
                {
                    payload = currentPayload;
                    return(true);
                }
                faultDefinition = retriever.FaultDefinition;
            }
            return(false);
        }
Exemple #25
0
 public override byte[] GetSerializedResult()
 {
     return(ComplianceSerializer.Serialize <SearchResult>(SearchResult.Description, this));
 }
Exemple #26
0
 // Token: 0x0600029F RID: 671 RVA: 0x0000C0AF File Offset: 0x0000A2AF
 public override byte[] GetSerializedResult()
 {
     return(ComplianceSerializer.Serialize <FaultDefinition>(FaultDefinition.Description, this));
 }
Exemple #27
0
 // Token: 0x0600012F RID: 303 RVA: 0x00007587 File Offset: 0x00005787
 internal byte[] ToBlob()
 {
     return(ComplianceSerializer.Serialize <ComplianceSearchCondition>(ComplianceSearchCondition.Description, this));
 }