internal void Validate() { if (this.requestedView == FreeBusyViewType.None) { throw new InvalidFreeBusyViewTypeException(); } FreeBusyViewOptions.IsMerged(this.requestedView); if (this.requestedView == FreeBusyViewType.None) { throw new ArgumentException("RequestedView can not be None", "RequestedView"); } if (this.mergedFreeBusyIntervalInMinutes < 5 || this.mergedFreeBusyIntervalInMinutes > 1440) { throw new InvalidMergedFreeBusyIntervalException(5, 1440); } if (this.timeWindow == null) { throw new MissingArgumentException(Strings.descMissingArgument("FreeBusyViewOptions.TimeWindow")); } this.timeWindow.Validate("FreeBusyViewOptions.TimeWindow"); TimeSpan timeSpan = this.timeWindow.EndTime.Subtract(this.timeWindow.StartTime); if (timeSpan.Days > Configuration.MaximumQueryIntervalDays) { throw new TimeIntervalTooBigException("FreeBusyViewOptions.TimeWindow", Configuration.MaximumQueryIntervalDays, timeSpan.Days); } if (timeSpan.TotalMinutes < (double)this.mergedFreeBusyIntervalInMinutes) { throw new InvalidMergedFreeBusyIntervalException(5, 1440); } }
private static FreeBusyViewType GetReturnView(FreeBusyViewType requestedView, FreeBusyPermissionLevel freeBusyPermissionLevel) { FreeBusyViewType freeBusyViewType = FreeBusyViewType.None; switch (freeBusyPermissionLevel) { case FreeBusyPermissionLevel.None: freeBusyViewType = FreeBusyViewType.None; break; case FreeBusyPermissionLevel.Simple: freeBusyViewType = FreeBusyViewType.FreeBusy; break; case FreeBusyPermissionLevel.Detail: case FreeBusyPermissionLevel.Owner: freeBusyViewType = FreeBusyViewType.Detailed; break; } bool flag = FreeBusyViewOptions.IsMerged(requestedView); int num; int num2; if (flag) { num = (int)(requestedView | FreeBusyViewType.MergedOnly); num2 = (int)(freeBusyViewType | FreeBusyViewType.MergedOnly); } else { num = (int)requestedView; num2 = (int)freeBusyViewType; } int result; if (num <= num2) { result = num; } else { result = num2; } return((FreeBusyViewType)result); }
private FreeBusyQueryResult InternalGetCalendarData(FreeBusyQuery freeBusyQuery, MailboxSession session) { FreeBusyViewType freeBusyViewType = FreeBusyViewType.None; CalendarEvent[] calendarEventArray = null; string mergedFreeBusy = null; WorkingHours workingHours = null; EmailAddress email = freeBusyQuery.Email; StoreObjectId associatedFolderId = freeBusyQuery.RecipientData.AssociatedFolderId; StoreObjectId defaultFolderId = session.GetDefaultFolderId(DefaultFolderType.Calendar); if (defaultFolderId == null) { return(this.HandleException(email, new NoCalendarException())); } if (associatedFolderId != null && !associatedFolderId.Equals(defaultFolderId)) { return(this.HandleException(email, new NotDefaultCalendarException())); } session.ExTimeZone = this.clientContext.TimeZone; using (CalendarFolder calendarFolder = CalendarFolder.Bind(session, DefaultFolderType.Calendar, CalendarQuery.CalendarFolderQueryProps)) { TimeSpan t = this.deadline - DateTime.UtcNow; if (t <= TimeSpan.Zero) { return(this.HandleException(email, new TimeoutExpiredException("Determine-Allowed-Access"))); } FreeBusyPermissionLevel freeBusyPermissionLevel = FreeBusyPermission.DetermineAllowedAccess(this.clientContext, session, calendarFolder, freeBusyQuery, this.defaultFreeBusyOnly); CalendarQuery.CalendarViewTracer.TraceDebug((long)this.GetHashCode(), "{0}: AccessCheck returned {1} for user {2} on mailbox {3}", new object[] { TraceContext.Get(), freeBusyPermissionLevel, this.clientContext, email }); if (freeBusyPermissionLevel == FreeBusyPermissionLevel.None) { CalendarQuery.CalendarViewTracer.TraceDebug <object, EmailAddress>((long)this.GetHashCode(), "{0}: No mailbox data will be returned for mailbox {1} since the granted access level to caller is None.", TraceContext.Get(), email); return(new FreeBusyQueryResult(new NoFreeBusyAccessException(44348U))); } t = this.deadline - DateTime.UtcNow; if (t <= TimeSpan.Zero) { return(this.HandleException(email, new TimeoutExpiredException("Get-Calendar-View"))); } freeBusyViewType = CalendarQuery.GetReturnView(this.requestedFreeBusyView.RequestedView, freeBusyPermissionLevel); ExDateTime windowStart = new ExDateTime(this.clientContext.TimeZone, this.requestedFreeBusyView.TimeWindow.StartTime); ExDateTime windowEnd = new ExDateTime(this.clientContext.TimeZone, this.requestedFreeBusyView.TimeWindow.EndTime); try { calendarEventArray = InternalCalendarQuery.GetCalendarEvents(email, calendarFolder, windowStart, windowEnd, freeBusyViewType, freeBusyPermissionLevel == FreeBusyPermissionLevel.Owner, this.clientContext.RequestSchemaVersion); } catch (ResultSetTooBigException e) { return(this.HandleException(email, e)); } if (FreeBusyViewOptions.IsMerged(freeBusyViewType)) { t = this.deadline - DateTime.UtcNow; if (t <= TimeSpan.Zero) { return(this.HandleException(email, new TimeoutExpiredException("Generate-Merged-FreeBusy"))); } int mergedFreeBusyIntervalInMinutes = this.requestedFreeBusyView.MergedFreeBusyIntervalInMinutes; mergedFreeBusy = MergedFreeBusy.GenerateMergedFreeBusyString(this.clientContext.TimeZone, mergedFreeBusyIntervalInMinutes, windowStart, windowEnd, calendarEventArray, false, null, this.clientContext.RequestSchemaVersion); } t = this.deadline - DateTime.UtcNow; if (t <= TimeSpan.Zero) { return(this.HandleException(email, new TimeoutExpiredException("Getting-Work-Hours"))); } workingHours = this.GetWorkingHours(email, session, calendarFolder); } return(new FreeBusyQueryResult(freeBusyViewType, calendarEventArray, mergedFreeBusy, workingHours)); }