private InternalGetMessageTrackingReportResponse(string domain, Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.GetMessageTrackingReportResponseMessageType dispatcherResponse) { this.Response = new Microsoft.Exchange.SoapWebClient.EWS.GetMessageTrackingReportResponseMessageType(); this.Response.Diagnostics = dispatcherResponse.Diagnostics; Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.MessageTrackingReportType messageTrackingReport = dispatcherResponse.MessageTrackingReport; Microsoft.Exchange.SoapWebClient.EWS.MessageTrackingReportType messageTrackingReportType = new Microsoft.Exchange.SoapWebClient.EWS.MessageTrackingReportType(); messageTrackingReportType.OriginalRecipients = MessageConverter.CopyEmailAddressArray(messageTrackingReport.OriginalRecipients); messageTrackingReportType.PurportedSender = MessageConverter.CopyEmailAddress(messageTrackingReport.PurportedSender); messageTrackingReportType.Sender = MessageConverter.CopyEmailAddress(messageTrackingReport.Sender); messageTrackingReportType.Subject = messageTrackingReport.Subject; messageTrackingReportType.SubmitTime = messageTrackingReport.SubmitTime; messageTrackingReportType.SubmitTimeSpecified = messageTrackingReport.SubmitTimeSpecified; messageTrackingReportType.Properties = MessageConverter.CopyTrackingProperties(dispatcherResponse.Properties); this.Response.MessageTrackingReport = messageTrackingReportType; this.Response.Properties = MessageConverter.CopyTrackingProperties(dispatcherResponse.Properties); this.Response.Errors = MessageConverter.CopyErrors(dispatcherResponse.Errors); Microsoft.Exchange.SoapWebClient.EWS.ResponseCodeType responseCode; if (EnumValidator <Microsoft.Exchange.SoapWebClient.EWS.ResponseCodeType> .TryParse(dispatcherResponse.ResponseCode, EnumParseOptions.Default, out responseCode)) { this.Response.ResponseCode = responseCode; } else { TraceWrapper.SearchLibraryTracer.TraceError <string>(0, "{0} cannot be converted to a valid ResponseCodeType, mapping to ErrorMessageTrackingPermanentError", dispatcherResponse.ResponseCode); this.Response.ResponseCode = Microsoft.Exchange.SoapWebClient.EWS.ResponseCodeType.ErrorMessageTrackingPermanentError; } this.Response.ResponseClass = EnumConverter <Microsoft.Exchange.SoapWebClient.EWS.ResponseClassType, Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.ResponseClassType> .Convert(dispatcherResponse.ResponseClass); this.Response.MessageText = dispatcherResponse.MessageText; messageTrackingReportType.RecipientTrackingEvents = null; this.RecipientTrackingEvents = InternalGetMessageTrackingReportResponse.CreateEventList <Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.RecipientTrackingEventType>(domain, messageTrackingReport.RecipientTrackingEvents, InternalGetMessageTrackingReportResponse.dispatcherConversionDelegate); }
private static bool CheckValidAndFixupIfNeeded(Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.GetMessageTrackingReportResponseMessageType response) { if (response == null) { TraceWrapper.SearchLibraryTracer.TraceError(0, "Empty/Invalid response for Proxy.GetMessageTrackingReport", new object[0]); return(false); } if (response.MessageTrackingReport == null) { if (response.ResponseClass == Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.ResponseClassType.Success && response.Errors == null && response.Errors.Length == 0) { TraceWrapper.SearchLibraryTracer.TraceError(0, "Empty/Invalid response for Proxy.GetMessageTrackingReport is only permitted if there were errors", new object[0]); return(false); } TraceWrapper.SearchLibraryTracer.TraceError(0, "Fixing up error response by inserting empty Proxy.MessageTrackingReportType", new object[0]); response.MessageTrackingReport = new Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.MessageTrackingReportType(); } return(true); }
internal static InternalGetMessageTrackingReportResponse Create(string domain, Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.GetMessageTrackingReportResponseMessageType response) { if (!InternalGetMessageTrackingReportResponse.CheckValidAndFixupIfNeeded(response)) { return(null); } return(new InternalGetMessageTrackingReportResponse(domain, response)); }
InternalGetMessageTrackingReportResponse IClientProxy.GetMessageTrackingReport(GetMessageTrackingReportRequestTypeWrapper request, TimeSpan timeout) { GetMessageTrackingQuery getMessageTrackingQuery = new GetMessageTrackingQuery(this.proxyRecipient, this.directoryContext, request, this.ewsVersionRequested, timeout); GetMessageTrackingQueryResult getMessageTrackingQueryResult = getMessageTrackingQuery.Execute(); if (getMessageTrackingQueryResult == null) { TraceWrapper.SearchLibraryTracer.TraceError(this.GetHashCode(), "Empty result in Request Dispatcher FindMessageTrackingQuery.Execute", new object[0]); return(null); } Microsoft.Exchange.InfoWorker.Common.Availability.Proxy.GetMessageTrackingReportResponseMessageType response = getMessageTrackingQueryResult.Response; MessageTrackingReportId messageTrackingReportId; if (!MessageTrackingReportId.TryParse(request.WrappedRequest.MessageTrackingReportId, out messageTrackingReportId)) { throw new ArgumentException("Invalid MessageTrackingReportId, caller should have validated"); } return(InternalGetMessageTrackingReportResponse.Create(messageTrackingReportId.Domain, response)); }