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); }
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); }
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>"); } } } }
// 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); }
// 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); }
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); }