private static RecipientTrackingEvent Create(string domain, string recipientEmail, string recipientDisplayName, string deliveryStatusString, string eventDescriptionString, string[] eventData, string server, DateTime date, string internalIdString, string uniquePathId, bool hiddenRecipient, bool?bccRecipient, string rootAddress, Microsoft.Exchange.SoapWebClient.EWS.TrackingPropertyType[] properties) { if (string.IsNullOrEmpty(recipientEmail)) { TraceWrapper.SearchLibraryTracer.TraceError <string>(0, "Null recipient address in WS-RecipientTrackingEvent: {0}", recipientEmail); TrackingFatalException.RaiseED(ErrorCode.UnexpectedErrorPermanent, "Null recipient in WS-response", new object[0]); } SmtpAddress smtpAddress = new SmtpAddress(recipientEmail); if (!smtpAddress.IsValidAddress) { TraceWrapper.SearchLibraryTracer.TraceError <SmtpAddress>(0, "Corrupt recipient address in RD-RecipientTrackingEvent: {0}", smtpAddress); TrackingFatalException.RaiseED(ErrorCode.UnexpectedErrorPermanent, "Invalid recipient address {0} in WS-response", new object[] { smtpAddress }); } recipientDisplayName = (recipientDisplayName ?? smtpAddress.ToString()); DeliveryStatus deliveryStatus; if (!EnumValidator <DeliveryStatus> .TryParse(deliveryStatusString, EnumParseOptions.Default, out deliveryStatus)) { TraceWrapper.SearchLibraryTracer.TraceDebug <string>(0, "Skipping event because of unknown delivery-status value in WS-RecipientTrackingEvent: {0}", deliveryStatusString); return(null); } EventDescription eventDescription; if (!EnumValidator <EventDescription> .TryParse(eventDescriptionString, EnumParseOptions.Default, out eventDescription)) { TraceWrapper.SearchLibraryTracer.TraceDebug <string>(0, "Skipping event because of unknown event-description in WS-RecipientTrackingEvent: {0}", eventDescriptionString); return(null); } if (string.IsNullOrEmpty(internalIdString)) { TraceWrapper.SearchLibraryTracer.TraceError <string>(0, "Null or empty internalIdString in RD-RecipientTrackingEvent: {0}", internalIdString); TrackingFatalException.RaiseED(ErrorCode.UnexpectedErrorPermanent, "No InternalId {0} in WS-response", new object[0]); } long num = 0L; if (!long.TryParse(internalIdString, out num) || num < 0L) { TraceWrapper.SearchLibraryTracer.TraceError <string>(0, "Non-numeric or negative internalIdString in RD-RecipientTrackingEvent: {0}", internalIdString); TrackingFatalException.RaiseED(ErrorCode.UnexpectedErrorPermanent, "Invalid InternalId {0} in WS-response", new object[] { internalIdString }); } TrackingExtendedProperties trackingExtendedProperties = TrackingExtendedProperties.CreateFromTrackingPropertyArray(properties); if (eventDescription == EventDescription.PendingModeration && !string.IsNullOrEmpty(trackingExtendedProperties.ArbitrationMailboxAddress) && !SmtpAddress.IsValidSmtpAddress(trackingExtendedProperties.ArbitrationMailboxAddress)) { TraceWrapper.SearchLibraryTracer.TraceDebug <string>(0, "Arbitration address is in the extended proprties but it's invalid: {0}", trackingExtendedProperties.ArbitrationMailboxAddress); TrackingFatalException.RaiseED(ErrorCode.UnexpectedErrorPermanent, "Invalid ArbitrationMailboxAddress property {0} in WS-response", new object[] { trackingExtendedProperties.ArbitrationMailboxAddress }); } return(new RecipientTrackingEvent(domain, smtpAddress, recipientDisplayName, deliveryStatus, EventType.Pending, eventDescription, eventData, server, date, num, uniquePathId, hiddenRecipient, bccRecipient, rootAddress, true, trackingExtendedProperties)); }
public static void Convert(Microsoft.Exchange.SoapWebClient.EWS.FindMessageTrackingReportRequestType request, int version) { Microsoft.Exchange.SoapWebClient.EWS.ExchangeVersionType exchangeVersionType = VersionConverter.GetExchangeVersionType(version); Microsoft.Exchange.SoapWebClient.EWS.ExchangeVersionType exchangeVersionType2 = exchangeVersionType; if (exchangeVersionType2 == Microsoft.Exchange.SoapWebClient.EWS.ExchangeVersionType.Exchange2010) { TrackingExtendedProperties trackingExtendedProperties = TrackingExtendedProperties.CreateFromTrackingPropertyArray(request.Properties); Options options = new Options(VersionConverter.BasicDiagnostics.Equals(request.DiagnosticsLevel, StringComparison.Ordinal), trackingExtendedProperties.ExpandTree, trackingExtendedProperties.SearchAsRecip, request.ServerHint); request.DiagnosticsLevel = options.ToString(); request.ServerHint = null; request.Properties = null; return; } if (request.Properties != null && request.Properties.Length == 0) { request.Properties = null; } }
private RecipientTrackingEvent(string domain, SmtpAddress recipientAddress, string recipientDisplayName, DeliveryStatus status, EventType eventType, EventDescription eventDescription, string[] rawEventData, string serverFqdn, DateTime date, long internalMessageId, string uniquePathId, bool hiddenRecipient, bool?bccRecipient, string rootAddress, bool parseEventData, TrackingExtendedProperties trackingExtendedProperties) { this.domain = domain; this.recipientAddress = recipientAddress; this.recipientDisplayName = recipientDisplayName; this.status = status; this.eventType = eventType; this.eventDescription = eventDescription; this.server = serverFqdn; this.date = date; this.internalMessageId = internalMessageId; this.uniquePathId = uniquePathId; this.hiddenRecipient = hiddenRecipient; this.bccRecipient = bccRecipient; this.rootAddress = rootAddress; this.extendedProperties = trackingExtendedProperties; if (parseEventData) { VersionConverter.ConvertRawEventData(rawEventData, this); return; } this.eventData = rawEventData; }
public InternalGetMessageTrackingReportResponse GetMessageTrackingReport(string messageTrackingReportId, ReportTemplate reportTemplate, SmtpAddress[] recipientFilter, SearchScope scope, bool returnQueueEvents, TrackingEventBudget eventBudget) { GetMessageTrackingReportRequestType getMessageTrackingReportRequestType = new GetMessageTrackingReportRequestType(); getMessageTrackingReportRequestType.MessageTrackingReportId = messageTrackingReportId; if (reportTemplate == ReportTemplate.Summary) { getMessageTrackingReportRequestType.ReportTemplate = MessageTrackingReportTemplateType.Summary; } else { if (reportTemplate != ReportTemplate.RecipientPath) { throw new ArgumentException("ReportTemplate must be RecipientPath or Summary", "reportTemplate"); } getMessageTrackingReportRequestType.ReportTemplate = MessageTrackingReportTemplateType.RecipientPath; } if (recipientFilter != null && recipientFilter.Length > 0) { getMessageTrackingReportRequestType.RecipientFilter = new EmailAddressType(); getMessageTrackingReportRequestType.RecipientFilter.EmailAddress = recipientFilter[0].ToString(); } getMessageTrackingReportRequestType.ReturnQueueEvents = returnQueueEvents; getMessageTrackingReportRequestType.ReturnQueueEventsSpecified = true; if (this.diagnosticsContext.Enabled) { getMessageTrackingReportRequestType.DiagnosticsLevel = Names <DiagnosticsLevel> .Map[(int)this.diagnosticsContext.DiagnosticsLevel]; } TimeSpan clientTimeout; TimeSpan value; this.directoryContext.TrackingBudget.GetTimeBudgetRemainingForWSCall(this.trackingAuthority.TrackingAuthorityKind, out clientTimeout, out value); TrackingExtendedProperties trackingExtendedProperties = new TrackingExtendedProperties(false, false, new TimeSpan?(value), reportTemplate == ReportTemplate.Summary, false); getMessageTrackingReportRequestType.Properties = trackingExtendedProperties.ToTrackingPropertyArray(); getMessageTrackingReportRequestType.Scope = WebServiceBinding.GetWebServiceScope(scope); Exception ex = null; InternalGetMessageTrackingReportResponse internalGetMessageTrackingReportResponse = null; this.WriteStartEvent(false, messageTrackingReportId, null); internalGetMessageTrackingReportResponse = this.TryCallWebServiceMethod <InternalGetMessageTrackingReportResponse, GetMessageTrackingReportRequestType>(delegate(GetMessageTrackingReportRequestType req) { if (clientTimeout == TimeSpan.Zero) { throw new TimeoutExpiredException("Not enough time remaining"); } return(this.clientProxy.GetMessageTrackingReport(new GetMessageTrackingReportRequestTypeWrapper(req), clientTimeout)); }, getMessageTrackingReportRequestType, out ex); if (internalGetMessageTrackingReportResponse != null) { if (internalGetMessageTrackingReportResponse.Response.ResponseClass != ResponseClassType.Success) { TrackingError trackingErrorFromWebResponseError = this.GetTrackingErrorFromWebResponseError(internalGetMessageTrackingReportResponse.Response.ResponseCode, this.trackingAuthority.Domain, internalGetMessageTrackingReportResponse.Response.MessageText); this.errors.Errors.Add(trackingErrorFromWebResponseError); } this.errors.ReadErrorsFromWSMessage(internalGetMessageTrackingReportResponse.Response.Diagnostics, internalGetMessageTrackingReportResponse.Response.Errors); this.diagnosticsContext.MergeEvents(internalGetMessageTrackingReportResponse.Response.Diagnostics); } int num = 0; if (internalGetMessageTrackingReportResponse != null && internalGetMessageTrackingReportResponse.Response.MessageTrackingReport != null && internalGetMessageTrackingReportResponse.RecipientTrackingEvents != null) { num = internalGetMessageTrackingReportResponse.RecipientTrackingEvents.Count; if (this.diagnosticsContext.VerboseDiagnostics) { foreach (RecipientTrackingEvent recipientTrackingEvent in internalGetMessageTrackingReportResponse.RecipientTrackingEvents) { SmtpAddress recipientAddress = recipientTrackingEvent.RecipientAddress; string text = recipientTrackingEvent.RecipientAddress.ToString(); string value2 = text; if (!string.IsNullOrEmpty(recipientTrackingEvent.UniquePathId)) { value2 = string.Format("[{0}]{1}", recipientTrackingEvent.UniquePathId, text); } this.diagnosticsContext.AddProperty(DiagnosticProperty.Data1, value2); this.diagnosticsContext.WriteEvent(); } } } eventBudget.IncrementBy((uint)num); this.WriteEndEvent(ex, num); if (ex != null) { throw ex; } return(internalGetMessageTrackingReportResponse); }
public FindMessageTrackingReportResponseMessageType FindMessageTrackingReport(string domain, SmtpAddress?senderAddress, SmtpAddress?recipientAddress, string serverHint, SmtpAddress?federatedDeliveryMailbox, SearchScope scope, string messageId, string subject, bool expandTree, bool searchAsRecip, bool searchForModerationResult, DateTime start, DateTime end, TrackingEventBudget eventBudget) { FindMessageTrackingReportRequestType findMessageTrackingReportRequestType = new FindMessageTrackingReportRequestType(); findMessageTrackingReportRequestType.StartDateTime = start; findMessageTrackingReportRequestType.StartDateTimeSpecified = true; findMessageTrackingReportRequestType.EndDateTime = end; findMessageTrackingReportRequestType.EndDateTimeSpecified = true; findMessageTrackingReportRequestType.MessageId = messageId; findMessageTrackingReportRequestType.Subject = subject; findMessageTrackingReportRequestType.Domain = domain; findMessageTrackingReportRequestType.Scope = WebServiceBinding.GetWebServiceScope(scope); findMessageTrackingReportRequestType.ServerHint = serverHint; TimeSpan clientTimeout; TimeSpan value; this.directoryContext.TrackingBudget.GetTimeBudgetRemainingForWSCall(this.trackingAuthority.TrackingAuthorityKind, out clientTimeout, out value); TrackingExtendedProperties trackingExtendedProperties = new TrackingExtendedProperties(expandTree, searchAsRecip, new TimeSpan?(value), false, searchForModerationResult); findMessageTrackingReportRequestType.Properties = trackingExtendedProperties.ToTrackingPropertyArray(); if (this.diagnosticsContext.Enabled) { findMessageTrackingReportRequestType.DiagnosticsLevel = Names <DiagnosticsLevel> .Map[(int)this.diagnosticsContext.DiagnosticsLevel]; } if (federatedDeliveryMailbox != null) { findMessageTrackingReportRequestType.FederatedDeliveryMailbox = new EmailAddressType(); findMessageTrackingReportRequestType.FederatedDeliveryMailbox.EmailAddress = federatedDeliveryMailbox.Value.ToString(); } if (senderAddress != null) { findMessageTrackingReportRequestType.Sender = new EmailAddressType(); findMessageTrackingReportRequestType.Sender.EmailAddress = senderAddress.Value.ToString(); } if (recipientAddress != null) { findMessageTrackingReportRequestType.Recipient = new EmailAddressType(); findMessageTrackingReportRequestType.Recipient.EmailAddress = recipientAddress.Value.ToString(); } Exception ex = null; this.WriteStartEvent(true, messageId, serverHint); FindMessageTrackingReportResponseMessageType findMessageTrackingReportResponseMessageType = this.TryCallWebServiceMethod <FindMessageTrackingReportResponseMessageType, FindMessageTrackingReportRequestType>(delegate(FindMessageTrackingReportRequestType req) { if (clientTimeout == TimeSpan.Zero) { throw new TimeoutExpiredException("Not enough time remaining"); } return(this.clientProxy.FindMessageTrackingReport(new FindMessageTrackingReportRequestTypeWrapper(req), clientTimeout)); }, findMessageTrackingReportRequestType, out ex); int count = 0; if (findMessageTrackingReportResponseMessageType != null) { if (findMessageTrackingReportResponseMessageType.ResponseClass != ResponseClassType.Success) { TrackingError trackingErrorFromWebResponseError = this.GetTrackingErrorFromWebResponseError(findMessageTrackingReportResponseMessageType.ResponseCode, this.trackingAuthority.Domain, findMessageTrackingReportResponseMessageType.MessageText); this.errors.Errors.Add(trackingErrorFromWebResponseError); } this.errors.ReadErrorsFromWSMessage(findMessageTrackingReportResponseMessageType.Diagnostics, findMessageTrackingReportResponseMessageType.Errors); this.diagnosticsContext.MergeEvents(findMessageTrackingReportResponseMessageType.Diagnostics); if (findMessageTrackingReportResponseMessageType.MessageTrackingSearchResults != null) { count = findMessageTrackingReportResponseMessageType.MessageTrackingSearchResults.Length; eventBudget.IncrementBy(10U); if (this.diagnosticsContext.VerboseDiagnostics) { foreach (FindMessageTrackingSearchResultType findMessageTrackingSearchResultType in findMessageTrackingReportResponseMessageType.MessageTrackingSearchResults) { this.diagnosticsContext.AddProperty(DiagnosticProperty.Data1, findMessageTrackingSearchResultType.MessageTrackingReportId); this.diagnosticsContext.WriteEvent(); } } } } this.WriteEndEvent(ex, count); if (ex != null) { throw ex; } return(findMessageTrackingReportResponseMessageType); }