Esempio n. 1
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);
 }
Esempio n. 2
0
        private AvailabilityQuery CreateAvailabilityQuery(List <ResolvedRecipient> availabilityList)
        {
            AvailabilityQuery availabilityQuery = new AvailabilityQuery();

            if (availabilityList.Count > Configuration.MaximumIdentityArraySize)
            {
                throw new InvalidOperationException(string.Format("availabilityList.Count ({0}) > Availability.Configuration.MaximumIdentityArraySize ({1})", availabilityList.Count, Configuration.MaximumIdentityArraySize));
            }
            availabilityQuery.MailboxArray = new MailboxData[availabilityList.Count];
            int num = -1;

            foreach (ResolvedRecipient resolvedRecipient in availabilityList)
            {
                num++;
                availabilityQuery.MailboxArray[num] = new MailboxData(new EmailAddress(resolvedRecipient.ResolvedTo.DisplayName, resolvedRecipient.ResolvedTo.RoutingAddress, resolvedRecipient.ResolvedTo.RoutingType));
                availabilityQuery.MailboxArray[num].AttendeeType = MeetingAttendeeType.Required;
            }
            availabilityQuery.ClientContext       = ClientContext.Create(base.User.ClientSecurityContextWrapper.ClientSecurityContext, base.User.OrganizationId, base.Budget, ExTimeZone.UtcTimeZone, base.Request.Culture, AvailabilityQuery.CreateNewMessageId());
            availabilityQuery.DesiredFreeBusyView = new FreeBusyViewOptions
            {
                RequestedView = FreeBusyViewType.FreeBusyMerged,
                MergedFreeBusyIntervalInMinutes = 30,
                TimeWindow = new Duration((DateTime)this.availabilityOptions.StartTime, (DateTime)this.availabilityOptions.EndTime)
            };
            return(availabilityQuery);
        }
Esempio n. 3
0
        protected void RenderOOF(TextWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            AvailabilityQuery availabilityQuery = new AvailabilityQuery();

            if (HttpContext.Current != null)
            {
                availabilityQuery.HttpResponse = HttpContext.Current.Response;
            }
            availabilityQuery.MailboxArray                  = new MailboxData[1];
            availabilityQuery.MailboxArray[0]               = new MailboxData();
            availabilityQuery.MailboxArray[0].Email         = new EmailAddress();
            availabilityQuery.MailboxArray[0].Email.Address = base.ADRecipient.PrimarySmtpAddress.ToString();
            availabilityQuery.ClientContext                 = ClientContext.Create(base.UserContext.LogonIdentity.ClientSecurityContext, base.UserContext.ExchangePrincipal.MailboxInfo.OrganizationId, OwaContext.TryGetCurrentBudget(), base.UserContext.TimeZone, base.UserContext.UserCulture, AvailabilityQuery.CreateNewMessageId());
            ExDateTime date       = DateTimeUtilities.GetLocalTime().Date;
            ExDateTime exDateTime = date.IncrementDays(1);

            availabilityQuery.DesiredFreeBusyView = new FreeBusyViewOptions
            {
                RequestedView = FreeBusyViewType.Detailed,
                MergedFreeBusyIntervalInMinutes = 1440,
                TimeWindow = new Duration((DateTime)date, (DateTime)exDateTime.IncrementDays(1))
            };
            AvailabilityQueryResult availabilityQueryResult;

            if (Utilities.ExecuteAvailabilityQuery(base.OwaContext, availabilityQuery, true, out availabilityQueryResult))
            {
                FreeBusyQueryResult freeBusyQueryResult = availabilityQueryResult.FreeBusyResults[0];
                if (freeBusyQueryResult != null)
                {
                    string currentOofMessage = freeBusyQueryResult.CurrentOofMessage;
                    if (!string.IsNullOrEmpty(currentOofMessage))
                    {
                        writer.Write("<tr><td class=\"spcOP\"></td></tr>");
                        writer.Write("<tr><td class=\"oof oofF\">");
                        writer.Write(LocalizedStrings.GetHtmlEncoded(77678270));
                        writer.Write("</td></tr>");
                        writer.Write("<tr><td class=\"oof\">");
                        writer.Write("<textarea name=\"off\" rows=3 cols=100 readonly>");
                        writer.Write(currentOofMessage);
                        writer.Write("</textarea>");
                    }
                }
            }
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
        // Token: 0x06002A98 RID: 10904 RVA: 0x000EEC44 File Offset: 0x000ECE44
        public static string GetFreeBusy(OwaContext owaContext, string recipientPrimarySmtpAddress, ExDateTime startDate, ExDateTime endDate, HttpContext httpContext, out string allDayFreeBusy, out string workingHoursFreeBusy, out string oofMessage)
        {
            UserContext userContext = owaContext.UserContext;

            ExTraceGlobals.CalendarCallTracer.TraceDebug(0L, "DatePickerEventHandler.GetFreeBusy");
            allDayFreeBusy       = null;
            workingHoursFreeBusy = null;
            oofMessage           = null;
            AvailabilityQuery availabilityQuery = new AvailabilityQuery();

            if (HttpContext.Current != null)
            {
                availabilityQuery.HttpResponse = HttpContext.Current.Response;
            }
            availabilityQuery.DesiredFreeBusyView = new FreeBusyViewOptions
            {
                RequestedView = FreeBusyViewType.FreeBusyMerged,
                MergedFreeBusyIntervalInMinutes = 30,
                TimeWindow = new Duration((DateTime)startDate, (DateTime)endDate)
            };
            availabilityQuery.ClientContext                 = ClientContext.Create(owaContext.LogonIdentity.ClientSecurityContext, userContext.ExchangePrincipal.MailboxInfo.OrganizationId, owaContext.Budget, userContext.TimeZone, userContext.UserCulture, AvailabilityQuery.CreateNewMessageId());
            availabilityQuery.MailboxArray                  = new MailboxData[1];
            availabilityQuery.MailboxArray[0]               = new MailboxData();
            availabilityQuery.MailboxArray[0].Email         = new EmailAddress();
            availabilityQuery.MailboxArray[0].Email.Address = recipientPrimarySmtpAddress.ToString();
            ExTraceGlobals.CalendarTracer.TraceDebug <ExDateTime, ExDateTime>(0L, "Getting free/busy data from {0} to {1}", startDate, endDate);
            Stopwatch watch = Utilities.StartWatch();
            AvailabilityQueryResult availabilityQueryResult;
            bool flag = Utilities.ExecuteAvailabilityQuery(owaContext, availabilityQuery, true, true, out availabilityQueryResult);

            Utilities.StopWatch(watch, "ReadADOrgPerson.GetFreeBusy (Execute Availability Query)");
            if (flag)
            {
                FreeBusyQueryResult freeBusyQueryResult = availabilityQueryResult.FreeBusyResults[0];
                if (freeBusyQueryResult != null)
                {
                    allDayFreeBusy = freeBusyQueryResult.MergedFreeBusy;
                }
                if (userContext.WorkingHours.IsTimeZoneDifferent)
                {
                    workingHoursFreeBusy = string.Empty;
                }
                else
                {
                    int           workDayStartHour = SchedulingTabRenderingUtilities.GetWorkDayStartHour(userContext.WorkingHours, startDate);
                    int           workDayEndHour   = SchedulingTabRenderingUtilities.GetWorkDayEndHour(userContext.WorkingHours, endDate);
                    int           num           = workDayEndHour - workDayStartHour;
                    int           num2          = 24 - workDayEndHour;
                    StringBuilder stringBuilder = new StringBuilder(num * 24);
                    int           i             = 0;
                    SchedulingTabRenderingUtilities.SetFreeBusyDayLightBasedValue(startDate, endDate, userContext.TimeZone, ref allDayFreeBusy);
                    while (i < allDayFreeBusy.Length)
                    {
                        i += workDayStartHour * 2;
                        int num3;
                        if (i + num * 2 >= allDayFreeBusy.Length)
                        {
                            num3 = allDayFreeBusy.Length - i;
                        }
                        else
                        {
                            num3 = num * 2;
                        }
                        stringBuilder.Append(allDayFreeBusy.Substring(i, num3));
                        i += num3;
                        i += num2 * 2;
                    }
                    workingHoursFreeBusy = stringBuilder.ToString();
                }
                if (freeBusyQueryResult != null && !string.IsNullOrEmpty(freeBusyQueryResult.CurrentOofMessage))
                {
                    oofMessage = freeBusyQueryResult.CurrentOofMessage;
                }
            }
            else if (availabilityQueryResult != null && availabilityQueryResult.FreeBusyResults != null && availabilityQueryResult.FreeBusyResults.Length > 0)
            {
                FreeBusyQueryResult freeBusyQueryResult2 = availabilityQueryResult.FreeBusyResults[0];
                if (freeBusyQueryResult2 != null)
                {
                    if (Utilities.IsFatalFreeBusyError(freeBusyQueryResult2.ExceptionInfo))
                    {
                        ExTraceGlobals.CalendarTracer.TraceDebug <LocalizedException>(0L, "An error happened trying to get free/busy info for this recipient. Exception: {0}", freeBusyQueryResult2.ExceptionInfo);
                        ErrorInformation exceptionHandlingInformation = Utilities.GetExceptionHandlingInformation(freeBusyQueryResult2.ExceptionInfo, userContext.MailboxIdentity);
                        return(exceptionHandlingInformation.Message);
                    }
                }
                else
                {
                    ExTraceGlobals.CalendarTracer.TraceDebug(0L, "An error happened trying to get free/busy info for this recipient. FreeBusyResult is null.");
                }
            }
            return(null);
        }
Esempio n. 6
0
        internal override Command.ExecutionState ExecuteCommand()
        {
            this.ReadXmlRequest();
            this.InitializeResponseXmlDocument();
            CertificateManager certificateManager = new CertificateManager(base.User.ExchangePrincipal, base.MailboxSession, base.Context.Request.Culture.LCID, this.maxCertificates, this.SmimeConfiguration, base.User.OrganizationId);
            bool searchADFirst            = this.ShouldResolveToADFirst();
            List <ResolvedRecipient> list = null;

            if (this.availabilityOptions != null)
            {
                list = new List <ResolvedRecipient>(Math.Min(this.recipientsList.Count, Configuration.MaximumIdentityArraySize));
            }
            if (this.pictureOptions != null)
            {
                this.photoRetriever = new AirSyncPhotoRetriever(base.Context);
            }
            using (AnrManager anrManager = new AnrManager(base.User, base.MailboxSession, base.Context.Request.Culture.LCID, this.maxAmbiguousRecipients))
            {
                foreach (AmbiguousRecipientToResolve ambiguousRecipientToResolve in this.recipientsList)
                {
                    anrManager.ResolveOneRecipient(ambiguousRecipientToResolve.Name, searchADFirst, ambiguousRecipientToResolve);
                    if (ambiguousRecipientToResolve.ResolvedTo.Count != 0)
                    {
                        if (!ambiguousRecipientToResolve.ExactMatchFound)
                        {
                            goto IL_1C8;
                        }
                        ambiguousRecipientToResolve.Status = StatusCode.Success;
                        if (this.certificateRetrieval != ResolveRecipientsCommand.CertificateRetrievalType.None)
                        {
                            foreach (ResolvedRecipient resolvedRecipient in ambiguousRecipientToResolve.ResolvedTo)
                            {
                                resolvedRecipient.CertificateRetrieval = this.certificateRetrieval;
                            }
                            certificateManager.GetRecipientCerts(ambiguousRecipientToResolve);
                        }
                        if (this.availabilityOptions != null)
                        {
                            using (List <ResolvedRecipient> .Enumerator enumerator3 = ambiguousRecipientToResolve.ResolvedTo.GetEnumerator())
                            {
                                while (enumerator3.MoveNext())
                                {
                                    ResolvedRecipient resolvedRecipient2 = enumerator3.Current;
                                    if (list.Count < Configuration.MaximumIdentityArraySize)
                                    {
                                        list.Add(resolvedRecipient2);
                                    }
                                    else
                                    {
                                        resolvedRecipient2.AvailabilityStatus = StatusCode.AvailabilityTooManyRecipients;
                                    }
                                }
                                goto IL_1DC;
                            }
                            goto IL_1C8;
                        }
IL_1DC:
                        ambiguousRecipientToResolve.PictureOptions = this.pictureOptions;
                        continue;
IL_1C8:
                        ambiguousRecipientToResolve.Status = (ambiguousRecipientToResolve.CompleteList ? StatusCode.Sync_ProtocolVersionMismatch : StatusCode.Sync_InvalidSyncKey);
                        goto IL_1DC;
                    }
                    ambiguousRecipientToResolve.Status = StatusCode.Sync_ProtocolError;
                }
            }
            if (this.pictureOptions != null && base.Context.User.Features.IsEnabled(EasFeature.HDPhotos) && base.Context.Request.Version >= 160)
            {
                List <string> recipients = new List <string>();
                this.recipientsList.ForEach(delegate(AmbiguousRecipientToResolve recipient)
                {
                    if (recipient.Status == StatusCode.Success)
                    {
                        recipients.AddRange(from s in recipient.ResolvedTo
                                            select s.ResolvedTo.SmtpAddress);
                    }
                });
                this.photoRetriever.BeginGetThumbnailPhotoFromMailbox(recipients, this.pictureOptions.PhotoSize);
            }
            if (this.availabilityOptions != null && list.Count > 0)
            {
                AvailabilityQuery       availabilityQuery = this.CreateAvailabilityQuery(list);
                AvailabilityQueryResult result;
                if (this.QueryAvailability(availabilityQuery, list, out result))
                {
                    this.FillInAvailabilityData(list, result);
                }
            }
            this.BuildXmlResponse();
            return(Command.ExecutionState.Complete);
        }