示例#1
0
        // Token: 0x06000CE9 RID: 3305 RVA: 0x000459B0 File Offset: 0x00043BB0
        private bool Respond(StoreObjectId itemId, string requestId, MeetingResponseCommand.RequestNodeData response, bool usingLongId)
        {
            if (base.Version <= 141)
            {
                return(this.LegacyRespond(itemId, requestId, response.UserResponse, usingLongId));
            }
            if (response.RespondToEventParameters == null)
            {
                throw new InvalidOperationException("Response.RespondToEventParameters must not be null at this point.");
            }
            StoreObjectId storeObjectId = null;
            string        calendarId    = null;

            if (this.CalendaringContainer == null)
            {
                AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, this, "Set default CalendaringContainer");
                this.CalendaringContainer = new CalendaringContainer(base.MailboxSession, null);
            }
            if (this.MailboxGuid == Guid.Empty)
            {
                AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, this, "Set default MailboxGuid");
                this.MailboxGuid = base.MailboxSession.MailboxGuid;
            }
            string  key = EntitySyncItem.GetKey(this.MailboxGuid, itemId);
            IEvents events;

            if (itemId.ObjectType == StoreObjectType.CalendarItem || itemId.ObjectType == StoreObjectType.CalendarItemOccurrence || itemId.ObjectType == StoreObjectType.CalendarItemSeries)
            {
                storeObjectId = itemId;
                events        = EntitySyncItem.GetEvents(this.CalendaringContainer, base.MailboxSession, itemId);
            }
            else
            {
                if (itemId.ObjectType != StoreObjectType.MeetingRequest)
                {
                    this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolVersionMismatch, response.UserResponse, "The item is not meeting-request or calendar item.", usingLongId);
                    base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "UnsupportedObjectType" + itemId.ObjectType);
                    return(false);
                }
                using (MeetingMessage meetingMessage = MeetingMessage.Bind(base.MailboxSession, itemId))
                {
                    if (meetingMessage == null)
                    {
                        this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolVersionMismatch, response.UserResponse, "Cannot find the meeting-request as specified in the reqest.", usingLongId);
                        base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "ItemNotFound");
                        return(false);
                    }
                    using (CalendarItemBase correlatedItem = meetingMessage.GetCorrelatedItem())
                    {
                        if (meetingMessage == null)
                        {
                            this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolVersionMismatch, response.UserResponse, "Cannot find the correlated meeitng item.", usingLongId);
                            base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "NullCalItemInMRCmd");
                            return(false);
                        }
                        storeObjectId = correlatedItem.Id.ObjectId;
                    }
                }
                response.RespondToEventParameters.MeetingRequestIdToBeDeleted = key;
                key    = EntitySyncItem.GetKey(this.MailboxGuid, storeObjectId);
                events = this.CalendaringContainer.Calendars.Default.Events;
            }
            try
            {
                events.Respond(key, response.RespondToEventParameters, null);
            }
            catch (LocalizedException ex)
            {
                this.AppendNonSuccessXmlNode(requestId, StatusCode.Sync_ProtocolError, response.UserResponse, ex.Message, usingLongId);
                base.ProtocolLogger.SetValue(ProtocolLoggerData.Error, "EntityRespondError");
                return(false);
            }
            if (storeObjectId != null)
            {
                MailboxSyncItemId mailboxSyncItemId = MailboxSyncItemId.CreateForNewItem(storeObjectId);
                if (this.CalendarItemIdMapping.Contains(mailboxSyncItemId))
                {
                    calendarId = this.CalendarItemIdMapping[mailboxSyncItemId];
                }
                else
                {
                    calendarId = this.CalendarItemIdMapping.Add(mailboxSyncItemId);
                    this.calendarSyncStateChangedFlag = true;
                }
            }
            this.AppendXmlNode(requestId, StatusCode.Success, calendarId, response.UserResponse, usingLongId);
            return(true);
        }
示例#2
0
        // Token: 0x06000CE5 RID: 3301 RVA: 0x00045540 File Offset: 0x00043740
        private void ValidateRequestNodeData(XmlNode requestNode)
        {
            XmlNode xmlNode  = requestNode["UserResponse", "MeetingResponse:"];
            XmlNode xmlNode2 = requestNode["CollectionId", "MeetingResponse:"];
            XmlNode xmlNode3 = requestNode["RequestId", "MeetingResponse:"];
            XmlNode xmlNode4 = requestNode["LongId", "Search:"];
            XmlNode xmlNode5 = requestNode["InstanceId", "MeetingResponse:"];

            if (xmlNode4 != null)
            {
                if (string.IsNullOrEmpty(xmlNode4.InnerText))
                {
                    throw new RequestParsingException("longIdNode cannot be empty", "NoLongId");
                }
                if (xmlNode3 != null || xmlNode2 != null)
                {
                    throw new RequestParsingException("CollectionId/RequestId cannot be present when LongId supplied!", "TooManyIds");
                }
            }
            else
            {
                if (xmlNode3 == null || string.IsNullOrEmpty(xmlNode3.InnerText))
                {
                    throw new RequestParsingException("RequestIdNode cannot be missing or null", "NoRequestId");
                }
                if (xmlNode2 == null || string.IsNullOrEmpty(xmlNode2.InnerText) || (AirSyncUtility.GetCollectionType(xmlNode2.InnerText) != SyncCollection.CollectionTypes.Mailbox && AirSyncUtility.GetCollectionType(xmlNode2.InnerText) != SyncCollection.CollectionTypes.Unknown))
                {
                    throw new RequestParsingException("CollectionIdNode cannot be missing, null, or the collection type is other than mailbox or unknown.", "NoCollectionId");
                }
            }
            if (xmlNode == null || string.IsNullOrEmpty(xmlNode.InnerText) || (xmlNode.InnerText != "1" && xmlNode.InnerText != "2" && xmlNode.InnerText != "3"))
            {
                throw new RequestParsingException("UserResponseNode cannot be missing or null", "NoUserResponse");
            }
            if (xmlNode5 != null)
            {
                if (string.IsNullOrEmpty(xmlNode5.InnerText))
                {
                    throw new RequestParsingException("InstanceIdNode cannot be empty", "InvalidInstanceId");
                }
                if (base.Version >= 160)
                {
                    throw new RequestParsingException("InstanceIdNode is not supported", "InvalidInstanceId");
                }
            }
            MeetingResponseCommand.RequestNodeData requestNodeData;
            if (xmlNode4 != null)
            {
                requestNodeData = new MeetingResponseCommand.RequestNodeData(xmlNode, xmlNode4, xmlNode5);
                if (base.Version >= 160)
                {
                    requestNodeData.FillRespondToEventParameters(requestNode);
                }
                this.longIdRequests.Add(requestNodeData);
                return;
            }
            if (!this.shortIdRequests.ContainsKey(xmlNode2.InnerText))
            {
                this.shortIdRequests.Add(xmlNode2.InnerText, new List <MeetingResponseCommand.RequestNodeData>());
            }
            requestNodeData = new MeetingResponseCommand.RequestNodeData(xmlNode, xmlNode3, xmlNode5);
            if (base.Version >= 160)
            {
                requestNodeData.FillRespondToEventParameters(requestNode);
            }
            this.shortIdRequests[xmlNode2.InnerText].Add(requestNodeData);
        }