Exemplo n.º 1
0
        // 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);
        }
Exemplo n.º 2
0
        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;
                }
            }
        }
Exemplo n.º 3
0
 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);
 }