3.1.4.7 Determining Whether a Meeting Request Corresponds to an Existing Calendar Object

Clients need to determine whether the GlobalObjId element (section 2.2.2.37) value for a meeting request corresponds to an existing Calendar object in the Calendar folder. When protocol version 2.5, 12.0, 12.1, 14.0, or 14.1 is used, clients need to convert the GlobalObjId element value to a calendar:UID element value ([MS-ASCAL] section 2.2.2.46) to make the comparison of the unique identifier of the meeting request and the unique identifier of the calendar item. When protocol version 16.0 or 16.1 is used, no conversion is necessary.

In protocol versions 2.5, 12.0, 12.1, 14.0, and 14.1, the following process SHOULD be used to convert the GlobalObjId element value to a UID value:

  1. Decode the GlobalObjId element value, assuming base64 encoding, to determine its length.

  2. Determine whether the GlobalObjId element value is an OutlookID<2> or a vCal ID. A vCal ID is an identifier set in accordance with the guidelines specified by [RFC2445], [RFC2446], and [RFC2447]. The GlobalObjId element value is an OutlookID if any of the following conditions are true:

    • If the length of the GlobalObjId element value is less than 53 bytes.

    • If bytes 41-48 of the GlobalObjId element value do not equal "vCal-Uid".

    • If the value of bytes 37-40, which represent the length of the data that follows, are less than 13 or greater than the remaining length of the GlobalObjId element value.

  3. If the GlobalObjId element value is an OutlookID, hex encode the entire base64 decoded GlobalObjID element value, and zero out bytes 17-20. The resulting value is the UID value.

  4. If the GlobalObjId element value is a vCal ID, the length of the UID value to be extracted is equal to the length of the data, as specified bytes 37-40, minus 12 bytes for the vCal marker, minus one byte for null-terminating 00 byte at the end of the vCal ID.

  5. Using the length of the UID value calculated in the previous step, extract that number of bytes beginning at byte 53. These extracted bytes are the UID value.

For an example of this process, see section 4.3.

In protocol versions 16.0 and 16.1, clients SHOULD use the following procedure to correlate a meeting request to a calendar item:

  1. Compare the value of the calendar:UID element that is provided in the MeetingRequest element (section 2.2.2.48) of a command response to the unique identifier of one or more calendar items. In the case that a user has been invited to multiple orphan instances, multiple calendar items will exist with the same unique identifier; otherwise zero or one match will exist.

  2. If the MeetingRequest element contains a RecurrenceId element (section 2.2.2.61) and the InstanceType element (section 2.2.2.39) with a value of 4 (signifying this is an orphan instance), compare the RecurrenceId element value to the InstanceId property of each calendar item to identify the matching orphan instance.

  3. If the MeetingRequest element contains a RecurrenceId element and the InstanceType element with a value of 2 or 3 (signifying this is an instance of a recurring series), the calendar item that was matched in step 1 represents the recurring series. In this case, the RecurrenceId element is used to determine the instance, which can be an exception to the calendar item's recurrence pattern.