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

Thoughts/questions on CIP







  To:   ietf-calendar @ imc.org @ IRISNET
  cc:
  Subject:  Thoughts/questions on CIP


  These snippets and comments/questions are based on the text of
  http://www.imc.org/ietf-calendar/draft-ietf-calsch-cip-00.txt .  There
  may be some overlap with those questions/comments made by others earlier
  but I have not seen any that I think are overlaps yet.

  From the top...

  Abstract
  ...
  CIP is one of three standards under development by the
  Calendaring and Scheduling Working Group of the IETF. The
  other two are the Core Object Specification (COS), a standard
  data format for representing scheduled events, and the
  Calendaring Access Protocol (CAP), a standard mechanism that
  scheduling user agents may use to access user calendars
  (analogous to POP).

  Is that CAP or ICAP?  I do not see any refs to COS and CAP on the
  CalSched web site or on any postings.  If these are the other efforts
  that we are working on then we need to include some form of reference to
  them below or on our WG's web site.  Perhaps we need to categorize the
  efforts in progress under these headings (ie: ICAP & Alex's proposals &
  Frank's proposals are under CAP, vCalendar 1.x under COS, etc).

  1.4 Commands and Responses

  The CIP session begins when the client initiates a connection
  with a CIP server on port IANA registered port xxx. The server
  responds to the client connection with the following statement
  containing the name of the protocol - "CIP" - a version number
  and the DNS name of the server:

  S: OK CIP 1.0 hostname

  Since you have introduced the concept of a "unique server identifier" you
  should probably have that value returned instead of the DNS name since
  that is the name/identifer that the client is expecting.  You could allow
  for a response in the format of:

  S: OK CIP 1.0 DNS_hostname ( unique server identifier and other assorted
  stuff like vendor ID, etc)

  1.7 Event Identifiers

  In order to manage events easily, each event that is sent or
  referred to with CIP has a unique event identifier of the form
  local-event-id@server-id. Server-id is the server identifier of the
  CIP server that owns the event. Local-event-id is a local identifier
  assigned by that server.
  ...
  Event identifiers are used in several places. In the SENDEVENT
  command, they are stored in the UID property within the
  vCalendar representation of the event. In the RESPOND
  command, one of the parameters is the event identifier of the
  event being responded to.

  The problem w/these two is that it now no longer allows for the vCalendar
  system to make the UID anything it likes (ie: clsid:...).  This forces
  all vCalendar writers to make UIDs that are event-id@server-id and that
  is not part of the current vCalendar spec so this may not hold up for
  'gateways' of vCalendar content from true vCalendar based systems (or for
  those true vCalendar apps that users may want to use in conjunction w/CIP
  work).

  1.8 Event Versioning

  In order to manage multiple versions of events, each CIP server
  must assign an event version to each event it owns. This version
  number is a monotonically increasing positive integer, starting at
  1 when the event is created. Whenever the server changes an
  event, it increments the event's version.

  First, this also violates the use of SEQUENCE from vCalendar since by
  default it is 0.  This also may cause problems as mentioned above with
  UID (WRT to true vCalendar writers).

  Second, be more precise in identifying 'the server'.  This should be the
  'the CIP server that owns the event', not any 'server'!

  If the version reaches 2^^31 (two to the thirty-first power), the
  event SHOULD be cancelled and a new event created. This
  avoids problems caused by wraparound. Of course, this should be
  very rare.

  How about a 'Replaces: UID-replaced' addition to vCalendar so that this
  'follow on' case can easily be linked/tracked in those systems that grok
  wraparound handling.

  1.9 Contacting Servers

  In order to establish a connection with a CIP server, a CIP client
  must map a server identifier to an IP address. Instead of
  performing a simple DNS host name resolution, a CIP client
  MUST use the technique described in RFC 2052 (DNS SRV) [3]
  to locate a server with service equal to CIP, protocol equal to
  TCP, and name equal to the server identifier. If no SRV record is
  found, this technique backs off to a simple DNS host name
  resolution of the server identifier. Once an IP address has been
  found, a TCP connection MUST be opened to a port number that
  will be assigned later by the IANA. This mapping process MUST
  be followed every time a CIP client tries to connect to a CIP
  server.

  This is way too much for the simple PIM -> something else case (ie: PIM
  -> PIM, PIM -> laptop, etc).  I dont have much IRDa experience but it
  seems that this wont work for IRDa users (ie: laptops in a meeting room
  together w/o a network!).  If so, this "lightweight" protocol wont be
  very useful for 'nomadic' or disconnected users.

  2.1 AUTHENTICATE Command

  C: AUTHENTICATE authenticate_code authenticate_data
  ...
  Command completion response of OK or NO only. For security
  purposes, it is not a good idea for the server to return any
  additional information for a failed login.

  A way for client/server to 'negotiate' what stength/authentication schema
  to use would be really nice.  That would allow them to find the
  'strongest' or more desirable authentication allowed by each (ala SSL
  negotiation).  This feature is not a must but having a response code to
  allow the client to 'fallback' to a less strong authentication schema
  would probably be in order in any case.

  2.2 SENDEVENT Command
  PERMDENIED - This response is given with a user name when
  the SENDEVENT failed due to access control restrictions
  imposed by an attendee.

  This implies there should be a TEMPDENIED.  There probably should be (ie:
  the calendar store for that user 'needs work' or 'is temporarily
  unavailable for some reason').

  Completion Codes:

  003     Not all attendees received the event
  ...
  C: SENDEVENT +
  C: DTSTART: 19961231T2000-0500
  C: DTEND: 19970101T0600-0500
  C: DESCRIPTION: New year's eve party in New York. The Big
  2000!
  ...
  S: * NOTFOUND <president@whitehouse.gov>
  S: NO 000 Not all users are present on this server.

  Your completion code does not jive with the completion code text
  description for what happened.  The server should respond with 003 since
  some invitee's DID get the invitation (hence the command was partially
  completed).  Otherwise the client may see the NO and think that the
  request was rejected when it was not (for all invitees that is).

  A nit with your description and DT's: your dates are for New Years Eve,
  1997, not for 2000.  :^^)  Also, be careful that your text does not wrap
  lines as some may take that as there being some implicit CRLF in the text
  (but in vCalendar, you cannot do that w/o doing some line folding which
  you didnt do).  Perhaps removing the last part would fix that and my nit.

  If you are using vCalendar in your examples then you should have the
  begin and end markers as well.  ie:

  C: SENDEVENT +
  C: BEGIN: VCALENDAR
  C: BEGIN: VEVENT
  C: DTSTART: 19961231T2000-0500

  (dont forget the end markers too).  If you are going to prohibit the
  exchange of ToDos or multiple events in one SENDEVENT then you should
  explicitly state that.  I see no reason to prohibit them since any client
  should be able to grok the response codes (although deciding which Event
  or ToDo that the response goes to could be a bit tougher than for single
  Events/ToDos).

  2.3 RSVP Command
  The client is not required to send all of the information which
  constitutes a full event, only the information to be updated in the
  original event.

  This is not good enough.  There is info that is not modifiable by the
  invitee but MUST be used (if vCalendar is the underlying data format), in
  particular UID.   You should be more liberal in allowing the invitees
  system to decide what information must/should go back (esp. if you may
  allow different underlying data formats to be used in place of
  vCalendar!!).  The requirement for the client is that it should send all
  the necessary data needed to match the original request, based on the
  underlying data format used (in case we extend the data formats beyond
  just vCalendar).

  CONFIRMED - Can be sent by the server to indicate that other
  attendees have confirmed the meeting it was last updated or
  received by the attendee performing the RSVP.

  This text is a bit disjoint in the middle of the second line.  Perhaps it
  should be:

  CONFIRMED - Can be sent by the server to indicate that other
  attendees have confirmed the meeting since it was last updated or
  received by the attendee performing the RSVP.

  Also, there is no real way to know when the responding client acutally
  did receive the request so that last part is not really feasible.   I do
  not think that it is really any one elses business to know that other
  attendees may have confirmed (what about declined?!?) recently;
  especially if they are not being told who did, just that other(s) have.

  You do not have any response codes for NOTFOUND, PERMDENIED and
  TEMPDENIED (my addition from above).  They are necessary in case the
  organizer is no longer on that server (and left no forwarding address) or
  the organizer has updated their access controls to prohibit access by an
  invitee.  These are necessary for the case where there is some lag in
  time between the invitation and the response.

  2.4 FREEBUSY Command
  We should attempt to use the same free time format for ALL of the
  protocols we agree upon.  This will allow a better degree of
  interoperability between all the implementations (and simplify the
  addtion of more complex protocols).  I vote for the format described in
  Frank Dawsons proposals that are currently on the table.

  S: "." CRLF
  Why does the server end with a "." instead of just the normal completion
  code/response line?  Or should the normal response line be also required?
  There may be cases where it is not possible to do lookups for all the
  invitees listed in the data (see the president@whitehouse.gov example
  elsewhere in the draft).

  Again, you do not have any response codes for NOTFOUND, PERMDENIED and
  TEMPDENIED (my addition from above).  They are necessary in case there
  are invitees that do not exist or that are blocking the clinet from doing
  a free time lookup on their calendar (ie: Bill Gates or Ray Ozzie come to
  mind).  If we do not allow for free time lookups to be formatted ala
  meeting requests (ie: requests to a.com only contain user identifiers for
  a.com) then NOTFOUND is not necessary (but the others still are).

  A typo in your first scenario:
  C: SENDEVENT+
  should be
  C: SENDEVENT +

  Also, you should really put in some bogus numbers for your examples (ie:
  UID: 123456789@a.com) instead of just "unique identifier for event".

  Your first example response contains:
  C: ATTENDEE: Bob SystemB <bob@b.com>
  C: STATUS:  CONFIRMED
  but that is not in proper vCalendar format.  You should really have:
  C: ATTENDEE;ROLE=ATTENDEE;STATUS=CONFIRMED: Bob SystemB <bob@b.com>

  Editorial nit: Your second scenario needs a separator from the RSVP
  example above it.

  Your description of the scenario of scheduling a meeting using Bill and
  Mary needs some more 'meat' on it.  You do not make it clear initially
  that Bill is using his PC to schedule the meeting on both his calendar
  and on Marys'.  This makes the first part of the example a bit confusing
  the first time it is read.  It also implies that CIP can be used as a
  calendar access protocol which is not a good idea if we want to keep them
  (Interop vs Access) distinct.  Unless others mind, I would suggest you
  have Bill fail anonymous access to Marys' server and then have him
  authenticate and retry.

  In Marys' reply, you need to include a RESPONSE-SEQUENCE: 1 as well.  The
  extra server response line in her RSVP example:
  S: * CONFIRMED bill@abc.com
  does not belong (since the RSVP did not include Bills information AND it
  could be considered a security leak!)

  7.0 Open Issues
  Should update numeric result codes so they're more consistent.
  One possible solution is to adopt the HTTP schema for assigning numbers.
  The MSB value is used to give a basic class of error/status (ie: 1xx =
  temporary ok  status, 2xx = final ok status, etc) and the rest of the
  code is a particular error (ie: 404 = URL Not found, 503 = Internal
  Server error, 200 = Ok, etc)  I can hear the "No" replys now but it works
  well for HTTP as it allows both humans and apps to easily tell if there
  is a problem or not.

  Should say that each event is owned by a single server.
  You should say that it is owned by the Originators 'main' server (in case
  there are 'mirrors' or clusters of servers that the originator uses).

  I wont get into the other Open Issues for now as Im sure there is lots to
  cover with the stuff that has been covered...

  Bruce
  INet: Bruce_Kahn@iris.com