// Token: 0x06001E25 RID: 7717 RVA: 0x000AED6C File Offset: 0x000ACF6C public static FreeBusyQueryResult[] BatchLoadData(UserContext userContext, string[] smtpAddresses, StoreObjectId[] folderStoreIds, DateRange[] dateRanges) { if (smtpAddresses == null || smtpAddresses.Length == 0) { throw new ArgumentNullException("smtpAddresses"); } if (dateRanges == null || dateRanges.Length == 0) { throw new ArgumentNullException("dateRanges"); } ExTraceGlobals.CalendarCallTracer.TraceDebug(0L, "GSCalendarDataSource.Load"); AvailabilityQuery availabilityQuery = new AvailabilityQuery(); availabilityQuery.MailboxArray = new MailboxData[smtpAddresses.Length]; availabilityQuery.ClientContext = ClientContext.Create(userContext.LogonIdentity.ClientSecurityContext, userContext.ExchangePrincipal.MailboxInfo.OrganizationId, OwaContext.TryGetCurrentBudget(), userContext.TimeZone, userContext.UserCulture, AvailabilityQuery.CreateNewMessageId()); for (int i = 0; i < smtpAddresses.Length; i++) { availabilityQuery.MailboxArray[i] = new MailboxData(); availabilityQuery.MailboxArray[i].Email = new EmailAddress(); availabilityQuery.MailboxArray[i].Email.Address = smtpAddresses[i]; availabilityQuery.MailboxArray[i].AssociatedFolderId = folderStoreIds[i]; } availabilityQuery.DesiredFreeBusyView = new FreeBusyViewOptions { TimeWindow = new Duration(), TimeWindow = { StartTime = (DateTime)DateRange.GetMinStartTimeInRangeArray(dateRanges), EndTime = (DateTime)DateRange.GetMaxEndTimeInRangeArray(dateRanges) }, MergedFreeBusyIntervalInMinutes = userContext.UserOptions.HourIncrement, RequestedView = FreeBusyViewType.Detailed }; AvailabilityQueryResult availabilityQueryResult = Utilities.ExecuteAvailabilityQuery(availabilityQuery); if (availabilityQueryResult == null) { return(null); } return(availabilityQueryResult.FreeBusyResults); }
private void FillInAvailabilityData(List <ResolvedRecipient> availabilityList, AvailabilityQueryResult result) { if (result.FreeBusyResults == null || result.FreeBusyResults.Length != availabilityList.Count) { if (result.FreeBusyResults == null) { AirSyncDiagnostics.TraceError(ExTraceGlobals.RequestsTracer, this, "result.FreeBusyResults is null"); } else { AirSyncDiagnostics.TraceError <int, int>(ExTraceGlobals.RequestsTracer, this, "The number of results {0} doesn't match expected {1}", result.FreeBusyResults.Length, availabilityList.Count); } base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "WrongLengthOfAvailabilityResult"); foreach (ResolvedRecipient resolvedRecipient in availabilityList) { resolvedRecipient.AvailabilityStatus = StatusCode.AvailabilityFailure; } return; } int num = -1; foreach (ResolvedRecipient resolvedRecipient2 in availabilityList) { num++; if (result.FreeBusyResults[num] == null) { AirSyncDiagnostics.TraceError <int>(ExTraceGlobals.RequestsTracer, this, "result.FreeBusyResults[{0}] is null", num); resolvedRecipient2.AvailabilityStatus = StatusCode.AvailabilityFailure; } else if (result.FreeBusyResults[num].ExceptionInfo != null) { AirSyncDiagnostics.TraceError <int, LocalizedException>(ExTraceGlobals.RequestsTracer, this, "result.FreeBusyResults[{0}] returned {1}", num, result.FreeBusyResults[num].ExceptionInfo); if (result.FreeBusyResults[num].ExceptionInfo is FreeBusyDLLimitReachedException) { resolvedRecipient2.AvailabilityStatus = StatusCode.AvailabilityDLLimitReached; } else if (result.FreeBusyResults[num].ExceptionInfo is TransientException || result.FreeBusyResults[num].ExceptionInfo.InnerException is TransientException) { resolvedRecipient2.AvailabilityStatus = StatusCode.AvailabilityTransientFailure; } else { resolvedRecipient2.AvailabilityStatus = StatusCode.AvailabilityFailure; } } else { if (string.IsNullOrEmpty(result.FreeBusyResults[num].MergedFreeBusy)) { throw new InvalidOperationException("Empty free busy string received!"); } resolvedRecipient2.AvailabilityStatus = StatusCode.Success; resolvedRecipient2.MergedFreeBusy = result.FreeBusyResults[num].MergedFreeBusy; } } }
private bool QueryAvailability(AvailabilityQuery availabilityQuery, List <ResolvedRecipient> availabilityList, out AvailabilityQueryResult result) { result = null; AirSyncCounters.NumberOfAvailabilityRequests.Increment(); try { result = availabilityQuery.Execute(); } catch (ClientDisconnectedException) { AirSyncDiagnostics.TraceError(ExTraceGlobals.RequestsTracer, this, "AvailabilityQuery has thrown ClientDisconnectedException"); base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "ClientDisconnectedException"); foreach (ResolvedRecipient resolvedRecipient in availabilityList) { resolvedRecipient.AvailabilityStatus = StatusCode.AvailabilityTransientFailure; } return(false); } finally { AirSyncDiagnostics.TraceDebug <StringBuilder>(ExTraceGlobals.RequestsTracer, this, "AvailabilityQuery log:{0}", availabilityQuery.RequestLogger.LogData); } if (result == null) { AirSyncDiagnostics.TraceError(ExTraceGlobals.RequestsTracer, this, "AvailabilityQuery has returned null result"); base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "EmptyAvailabilityResult"); foreach (ResolvedRecipient resolvedRecipient2 in availabilityList) { resolvedRecipient2.AvailabilityStatus = StatusCode.AvailabilityFailure; } return(false); } return(true); }