SIMPLE Buddylist Configuration Problem Statement
dynamicsoft
5100 Tennyson Pkwy
Suite 1200
Plano TX 75024
US
adam@dynamicsoft.com
Transport
This document contains a brief discussion of a
particular challenge that exists in making users'
buddy list information available when a SIMPLE client
first starts up. It also
provides a very brief analysis of various solutions to the
problem.
One of the formal deliverables of the SIMPLE
working group is to provide an architecture
that allows multiple interoperable implementations
to provide a traditional buddylist-based instant
messaging presence application using SIP.
An informal design goal of the working group
that stems from this deliverable is
that such solutions should enable at least
the same set of features as the currently available
proprietary offerings. One of the keystones in
realizing this goal is allowing developers to
provide a user experience that is as good as or
better than such offerings.
One stumbling block in allowing developers to
create such a user experience is the fact that
there is currently no defined way, given a user's
address of record, to retrieve a list of contacts
for the purposes of displaying presence data and
conveniently sending messages. Without such an
ability, creating a user experience that is
as straightforward as those currently available
is frustrated.
Imagine a typical internet user, known for the
purposes of this description as Bob,
who wants to walk into a random Internet cafe
and log into an IM client
so that he can see who of his friends are
online, and begin to send and receive messages.
With currently deployed proprietary systems,
Bob would be able to fire up the client, type
in his user name and his password, and be
finished. With no further interaction, Bob's
presence information is changed, servers
know how to route incoming messages to Bob,
Bob's buddylist is displayed to him, and client
starts receiving updates which indicate which
of his buddies are online. The underlying
proprietary protocol knows, given a user
name of, e.g., "bob1963", how to perform
all of these actions.
SIMPLE currently has a hole in this area.
Client creators can acheive almost all of
the effects described above using mechanisms
already defined or under development within
the IETF. Assuming that Bob remembers
his user ID (sip:bob@example.com, which
is nicely mnemonic and probably matches
one of his e-mail addresses) and password
(used for responses to digest challenges),
the client can send a REGISTER
to sip:example.com (to route messages to
him), send a PUBLISH
to sip:bob@example.com
(to update his presence), and send an
event-list
aware presence
SUBSCRIBE
to get his buddy list and the status of each
buddy. The complication arises from the
fact that the client doesn't have a URI
to which this SUBSCRIBE can be sent. So,
without prompting Bob for an additional
URI -- that of his buddy list -- the client
is unable to provide the service.
A failure on part the of the IETF
to define an adequate mechanism to address this
problem has a very high probability of causing individual
implementors to develop their own solution
on an implementation-by-implementation basis.
Even if a sufficently large critical mass of implementations
begin using the same convention, there will almost
certainly be a substantial period of time
before a widespread pattern is established.
Until such a de-facto standard is established,
interoperability between independant implementations
will suffer. Further, even if the convention for such a
mechanism is eventually established,
older, non-interoperable conventions will
continue to exist side-by-side with it
indefinitely for reasons of backwards compatibility.
Currently, the accepted solution to this
problem is that such information is
manally entered into the client by the
user. While this invokes only a mild
startup cost whenever Bob goes to set
up his home PC (not entirely unlike
configuring the POP and SMTP servers
for an e-mail client), it adds an
extra step to Bob's login process when
he's in an internet cafe, at a friends house,
or at any other device that he doesn't
use on a regular basis.
Chances are very good that Bob isn't
going to want to remember the additional
URI for his buddy list -- or, even if
he can, probably doesn't want to go through the
trouble of typing it in (in addition to his
user ID) every
time he logs in from a different location.
Requiring him to do so provides an experience
that is clearly inferior to those available
from proprietary solutions today.
In short, while the approach of requiring the
user to enter an additional URI to access
his buddy list is a solution to the problem
of where the information comes from, it does
not do so in a way that is, from a user perspective,
as good as currently available products.
Because of this added inconvenience, implementors
will likely attempt to solve the problem
in a variety of non-interoperable ways, as discussed above.
One approach to solving this problem is to establish
a convention that indicates how to manipulate
the URI in such a way that it indicates the resource
to which the SUBSCRIBE should be sent; for example,
appending "-buddies" to the user portion
("sip:bob-buddies@example.com") would be one such
transformation, as would using the hostname
portion (e.g. "sip:bob@buddies.example.com").
While acceptable from a technical perspective,
this approach runs afoul of several philosophical
objections and has some suboptimal characteristics.
The prime philosophical objection is the supposed
property that URIs are (with certain well-defined exceptions)
treated as opaque by clients who use them. Establishing
a convention that describes specific transformations
of the URI violates this property. Suboptimal
characteristics of any implicit approach
include relics such as requiring the user's registrar to handle
buddy list services and limiting users to having
a single, centrally managed buddy list.
Another approach to solving the problem under
discussion is to allow the URI for the buddy
list itself to be retrieved from the user's home
domain server (e.g. example.com). Doing so provides
an explicit way of indicating from where to retrieve the
list. This approach is, in spirit, similar
to that defined for device configuration ;
specifically, a subscription would be sent
to the user's address-of-record for an event
package that contains user configuration data.
One component of the user's configuration information
would be a URI (or possibly even URIs) that indicate
from where the user's buddy list could be retrieved.
In addition to providing a clear mechanism for
unambiguously identifying a user's buddy list,
this mechanism has the additional properties
that it allows buddy lists to be hosted by
a domain other than that of the user's registrar,
and that it allows users to have
multiple buddy lists configured. Finally, this approach
can be specified in such a way that it
allows inclusion of additional user-profile
information if needed, such as a URI for
message waiting indication .
Thanks to Paul Tidwell for first raising the issue
discussed in this document. Steve Donovan, Robert
Sparks, and Dean Willis contributed to early
conversations on the topic.
SIP: Session Initiation Protocol
Session Initiation Protocol (SIP)-Specific Event Notification
Session Initiation Protocol (SIP) Extensions for Presence
A Session Initiation Protocol (SIP) Event Notification Extension for Resource Lists
SIMPLE Presence Publication Mechanism
A Framework for SIP User Agent Configuration
A Message Summary and Message Waiting Indication Event Package for the Session Initiation Protocol (SIP)