[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: RECURRENCE-ID discussion




Doug wrote on 08/07/2003 05:17:43 PM:
> And the ORIGINAL SEQUENCE:0 FULL object can not contain a RECURRENCE-ID.

Says who?  Its nowhere in any text or table in iTIP.  Its perfectly valid to send:

   BEGIN:VCALENDAR
  METHOD:REQUEST
  PRODID:-//RDU Software//NONSGML HandCal//EN
  VERSION:2.0
  BEGIN:VEVENT
  UID:guid-1@host1com
  RECURRENCE-ID:19970701T210000Z
  SEQUENCE:0
  ORGANIZER:Mailto:A@xxxxxxxxxxx
  ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@xxxxxxxxxxx
  ATTENDEE:Mailto:B@xxxxxxxxxxx
  ATTENDEE:Mailto:C@xxxxxxxxxxx
  ATTENDEE:Mailto:D@xxxxxxxxxxx
  DESCRIPTION:IETF-C&S Conference Call
  SUMMARY:IETF Calendaring Working Group Meeting
  DTSTART:20030814T210000Z
  DTEND:20030814T220000Z
  LOCATION:Conference Call to resolve RECURRENCE-ID
  DTSTAMP:20030811T093000Z
  STATUS:CONFIRMED
  END:VEVENT
  END:VCALENDAR


NOWHERE in iCalendar or iTIP do we ever say this is NOT allowed.  Sorry but you are creating new semantics for REQUEST that simply do not exist in iTIP.  iTIP 3.2.2 REQUEST says that REQUEST is used for multiple actions:

     .  Invite "Attendees" to an event;
    .  Reschedule an existing event;
    .  Response to a REFRESH request;
    .  Update the details of an existing event, without rescheduling it;
    .  Update the status of "Attendees" of an existing event, without
       rescheduling it;
    .  Reconfirm an existing event, without rescheduling it;
    .  Forward a "VEVENT" to another uninvited CU.
    .  For an existing "VEVENT" calendar component, delegate the role of
       "Attendee" to another CU;
    .  For an existing "VEVENT" calendar component, changing the role of
       "Organizer" to another CU.


and it later says how to differentiate between these different cases with the text:

   The "UID" and "SEQUENCE" properties are used to distinguish the
  various uses of the "REQUEST" method. If the "UID" property value in
  the "REQUEST" is not found on the recipient's calendar, then the
  "REQUEST" is for a new "VEVENT" calendar component. If the "UID"
  property value is found on the recipient's calendar, then the
  "REQUEST" is for a rescheduling, an update, or a reconfirm of the
  "VEVENT" calendar component.


and:

3.2.2.1 Rescheduling an Event

  The "REQUEST" method may be used to reschedule an event. A
  rescheduled event involves a change to the existing event in terms of
  its time or recurrence intervals and possibly the location or
  description. If the recipient CUA of a "REQUEST" method finds that
  the "UID" property value already exists on the calendar, but that the
  "SEQUENCE" (or "DTSTAMP") property value in the "REQUEST" method is
  greater than the value for the existing event, then the "REQUEST"
  method describes a rescheduling of the event.


3.2.2.2 Updating or Reconfirmation of an Event

  The "REQUEST" method may be used to update or reconfirm an event. An
  update to an existing event does not involve changes to the time or
  recurrence intervals, and might not involve a change to the location
  or description for the event. If the recipient CUA of a "REQUEST"
  method finds that the "UID" property value already exists on the
  calendar and that the "SEQUENCE" property value in the "REQUEST" is
  the same as the value for the existing event, then the "REQUEST"
  method describes an update of the event details, but no rescheduling
  of the event.


So, if the UID / RECURRENCE-ID are not found for a repeating instance then "then the "REQUEST" is for a new "VEVENT" calendar component." (aka an invitation).  

If the UID / RECURRENCE-ID are found for the repeating instance and the SEQUENCE value is "greater" (not just 1+) "then the "REQUEST" method describes a rescheduling of the event." (aka a reschedule in case the section header wasnt clue enough).  

If the UID / RECURRENCE-ID are found for the repeating instance and the SEQUENCE value is the same (factoring in DTSTAMP too) "then the "REQUEST" method describes an update of the event details, but no rescheduling of the event." (aka an update in case the section header wasnt clue enough here too).

The CUA does NOT construct semantics based on just the properties in the message; it bases it on them and those it has (or does not have) locally!  Any other behaviour is contrary to iTIP and a misapplication of it.

> And if it does contain a RECURRENCE-ID, then it is a object modify
> as defined  by iTIP and not an new invitation.

You seem to be ignoring the application of Section 2.1.5 Message Sequencing rules when you read the Section 3 messages.  Because the workflow process needs to be able to deal with different kinds of messages that may arrive in different order than they were sent, we created Section 2.1.5 as a common place for explaining how to sequence them all.  This also had the benefit of not making us having to expressly say "If you find the "UID" (or the "UID" / "RECURRENCE-ID" pair in the case of a repeating instance) ..." in every place in the Section 3 texts.  It made for a smaller draft and made editing easier.  

I say this because you keep saying that there is no RECURRENCE-ID on an invitation and Im guessing that you think this because the text from 3.2.2 does not expressly say "RECURRENCE-ID" in it somewhere.  However neither do the 3.2.2.1 or 3.2.2.2 texts so perhaps you think that you cannot have RECURRENCE-IDs on reschedules or updates too then??...

> Do you disagree that iTIP says that if it has a RECURRENCE-ID and
> METHOD:REQUEST that it is a modify and not a new invitation?

Yes. If you understand the function of Section 2.1.5 and correctly apply it to all the Section 3 texts you should see that iTIP NEVER says that a METHOD:REQUEST without a RECURRENCE-ID is an invitation, otherwise its a reschedule.  iTIP NEVER draws that distinction.

If one correctly reads the text in 3.2.2 (and 3.2.2.1 and 3.2.2.2) then you should see that the recipients interpretation of the message is dependent on what they _already_ know about the instance in question and not just the senders intent!  

So, if you never got the SEQUENCE:0 thru SEQUENCE:5 REQUESTS (they got lost in a disk crash enroute or your Admin was messing with you or some coworker was getting even or...) and you do receive the SEQUENCE:6 REQUEST then you should treat it like an invitation even though from the Organizers point of view it was the 6th reschedule of the instance (to which you may have only recently been added or were an 'original' ATTENDEE).  

It does not matter to you really in that you can correctly join the workflow for that instance by simply sending back a REPLY with the UID / RECURRENCE-ID / SEQUENCE values you just got.  If you recieve one or some of the previous SEQUENCE valued REQUESTS later then you simply can treat them as obsoleted REQUESTs for an instance you already have more current info and ignore them.  That of course assumes a fixed RECURRENCE-ID model so that you can do the correct obsolete determination.  

Otherwise you have to go thru all the extra gyrations and thrashing I described in my analysis for Tim last week.

Bruce
===========================================================================
Bruce Kahn                                INet: Bruce_Kahn@xxxxxxxxxxxxxxxx
Messaging & Collaboration                 Phone: 978.399.6496
IBM Software Group                         FAX: and nothing but the FAX...
Standard disclaimers apply, even where prohibited by law...