public static CalendarItemBase UpdateCalendarItem(MeetingRequest meetingRequest) { if (meetingRequest == null) { throw new ArgumentNullException("meetingRequest"); } MeetingUtilities.ThrowIfMeetingResponseInvalid(meetingRequest); CalendarItemBase calendarItemBase = null; try { try { ExTraceGlobals.CalendarTracer.TraceDebug <string>(0L, "Retreiving calendar item associated with meeting request. Value = '{0}'", (meetingRequest.Id != null && meetingRequest.Id.ObjectId != null) ? meetingRequest.Id.ObjectId.ToBase64String() : "null"); if (meetingRequest.IsOutOfDate()) { throw new OwaOperationNotSupportedException(LocalizedStrings.GetNonEncoded(-1085726012)); } calendarItemBase = meetingRequest.UpdateCalendarItem(true); if (calendarItemBase == null) { throw new OwaInvalidOperationException("meetingRequest.UpdateCalendarItem returns null."); } calendarItemBase.Load(); } catch (CorrelationFailedException ex) { ExTraceGlobals.CalendarDataTracer.TraceDebug <string>(0L, "Calendar item associated with meeting request could not be found. Exception: {0}", ex.Message); throw; } catch (StoragePermanentException ex2) { ExTraceGlobals.CalendarDataTracer.TraceDebug <string>(0L, "Calendar item associated with meeting request could not be found. Exception: {0}", ex2.Message); throw; } catch (InvalidOperationException ex3) { if (ex3.Message == ServerStrings.ExOrganizerCannotCallUpdateCalendarItem) { throw new OwaOperationNotSupportedException(LocalizedStrings.GetNonEncoded(679811893)); } throw; } try { MeetingUtilities.SaveItem(meetingRequest, new PropertyDefinition[] { MeetingMessageSchema.CalendarProcessed, StoreObjectSchema.ParentItemId }); } catch (OwaSaveConflictException ex4) { ExTraceGlobals.CalendarDataTracer.TraceDebug <string>(0L, "Calendar item associated with meeting request could not be saved. Exception: {0}", ex4.Message); throw; } } catch { if (calendarItemBase != null) { calendarItemBase.Dispose(); calendarItemBase = null; } throw; } if (Globals.ArePerfCountersEnabled) { OwaSingleCounters.ItemsCreated.Increment(); } return(calendarItemBase); }
// Token: 0x06000CEA RID: 3306 RVA: 0x00045C70 File Offset: 0x00043E70 private bool LegacyRespond(StoreObjectId itemId, string requestId, string userResponse, bool usingLongId) { MeetingRequest meetingRequest = null; CalendarItemBase calendarItemBase = null; StoreObjectId storeObjectId = null; StoreObjectId storeObjectId2 = null; Item item = null; try { base.ProtocolLogger.IncrementValue(ProtocolLoggerData.MRItems); try { item = Item.Bind(base.MailboxSession, itemId, null); } catch (ObjectNotFoundException) { this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolVersionMismatch, userResponse, "Cannot find the meeting-request as specified in the reqest.", usingLongId); base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "ItemNotFound"); return(false); } meetingRequest = (item as MeetingRequest); if (base.Version >= 141 && meetingRequest == null) { calendarItemBase = (item as CalendarItemBase); if (calendarItemBase != null) { calendarItemBase.OpenAsReadWrite(); } } if (meetingRequest == null && calendarItemBase == null) { this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolVersionMismatch, userResponse, "The item is not meeting-request or calendar item.", usingLongId); base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "ItemNotValid"); return(false); } item = null; if (meetingRequest != null) { if (meetingRequest.IsOrganizer()) { this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolError, userResponse, "The organizer of this meeting request is the mailbox owner. Checking meetingRequest.", usingLongId); base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "MRIsOrganizer"); return(false); } if (meetingRequest.IsDelegated()) { this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolError, userResponse, "Cannot respond to a delegated meeting request. Use Outlook", usingLongId); base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "MRIsDelegated"); return(false); } if (meetingRequest.IsOutOfDate()) { this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolError, userResponse, "Cannot respond to a OutOfDated meeting request.", usingLongId); base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "MRIsOutOfDate"); return(false); } meetingRequest.OpenAsReadWrite(); storeObjectId = meetingRequest.Id.ObjectId; calendarItemBase = meetingRequest.UpdateCalendarItem(false); } if (calendarItemBase == null) { base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "NullCalItemInMRCmd"); throw new AirSyncPermanentException(HttpStatusCode.InternalServerError, StatusCode.ServerError, null, false); } if (calendarItemBase.IsOrganizer()) { this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolError, userResponse, "The organizer of this meeting request is the mailbox owner. Checking calendarItem.", usingLongId); base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "CalIsOrganizer"); return(false); } if (calendarItemBase.IsCancelled) { this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolError, userResponse, "Cannot respond to a canceled meeting.", usingLongId); base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "CalIsCancelled"); return(false); } if (userResponse != null) { ResponseType responseType; if (!(userResponse == "1")) { if (!(userResponse == "2")) { if (!(userResponse == "3")) { goto IL_22F; } responseType = ResponseType.Decline; } else { responseType = ResponseType.Tentative; } } else { responseType = ResponseType.Accept; } try { using (calendarItemBase.RespondToMeetingRequest(responseType)) { } } catch (SaveConflictException ex) { this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolError, userResponse, "A conflict calendar item has been detected: " + ex.Message, usingLongId); base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "SavedWithConflicts"); return(false); } calendarItemBase.Load(); if (meetingRequest != null) { meetingRequest.Save(SaveMode.ResolveConflicts); } if (responseType != ResponseType.Decline) { if (calendarItemBase is CalendarItemOccurrence) { storeObjectId2 = ((CalendarItemOccurrence)calendarItemBase).MasterId.ObjectId; } else { storeObjectId2 = calendarItemBase.Id.ObjectId; } } else { base.MailboxSession.Delete(DeleteItemFlags.MoveToDeletedItems, new StoreId[] { calendarItemBase.Id }); } calendarItemBase.Dispose(); calendarItemBase = null; if (storeObjectId != null) { base.MailboxSession.Delete(DeleteItemFlags.MoveToDeletedItems, new StoreId[] { storeObjectId }); } goto IL_339; } IL_22F: throw new ArgumentException(string.Format("Unexpected userResponse value \"{0}\"", userResponse)); } finally { if (calendarItemBase != null) { calendarItemBase.Dispose(); } if (meetingRequest != null) { meetingRequest.Dispose(); } if (item != null) { item.Dispose(); } } IL_339: string calendarId = null; if (storeObjectId2 != null) { MailboxSyncItemId mailboxSyncItemId = MailboxSyncItemId.CreateForNewItem(storeObjectId2); if (this.CalendarItemIdMapping.Contains(mailboxSyncItemId)) { calendarId = this.CalendarItemIdMapping[mailboxSyncItemId]; } else { calendarId = this.CalendarItemIdMapping.Add(mailboxSyncItemId); this.calendarSyncStateChangedFlag = true; } } this.AppendXmlNode(requestId, StatusCode.Success, calendarId, userResponse, usingLongId); return(true); }