Elvin presence spec draft - request for comments

Phillips, Matthew Matthew.Phillips at dsto.defence.gov.au
Mon Sep 24 11:40:19 EST 2001


Hello all,

firstly, I'd like to extend thanks to all the participants of the ticker
workshop for a very stimulating and enjoyable couple of days.

Secondly, as promised, I've developed a draft Elvin presence protocol
specification (attached).  It extends the original spec (as implemented in
Sticker) with your suggestions and a few other ideas I've had along the way.
The fields have all been renamed to be more in line with the conventions
used in the proposed Ticker 3.0 spec (so I don't get accused of promoting
ugliness ;), so it's not directly compatible with Sticker.  When the spec is
complete, I will produce an application-independent reference implementation
in the form of a set of Java components and a test application built from
them.

Please forward any suggestions or comments out to me (and probably the rest
of the list too) and I'll integrate them into a 0.2 revision.

Cheers,

Matthew.
--
matthew.phillips at dsto.defence.gov.au
 
 <<Elvin Presence Spec.html>> 


Title: Elvin Presence Protocol








Elvin Presence Protocol

Matthew Phillips

Draft 0.1 (<span style='mso-element:
field-begin'> SAVEDATE \@ "d/MM/yyyy" \* MERGEFORMAT <span
style='mso-element:field-separator'>24/09/2001<span
style='mso-element:field-end'>)

 

1        
Purpose

The purpose of the presence protocol is to provide a
simple and flexible means for Elvin users to communicate their presence online
and publish information they may wish to have known about themselves.

2        
Requirements

Presence services are already provided to a greater or
lesser extent by a number of applications, including ‘finger’, CoffeeBiff and
various instant messaging clients.  The
primary reasons for, and advantages of, providing presence information via the
Elvin presence protocol are:

<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:
l4 level1 lfo4;tab-stops:list 36.0pt'><span
style='font-family:Symbol'>·       
Does not require centralised, persistent state.

<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:
l4 level1 lfo4;tab-stops:list 36.0pt'><span
style='font-family:Symbol'>·       
Simple and easy to support.

<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:
l4 level1 lfo4;tab-stops:list 36.0pt'><span
style='font-family:Symbol'>·       
Separate, but complementary to, ticker messaging.

<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:
l4 level1 lfo4;tab-stops:list 36.0pt'><span
style='font-family:Symbol'>·       
Easily extensible.

3        
Specification

This section describes the protocol, including the
operations between clients and the format of the presence notifications.

3.1       
Usernames and Domains

The presence protocol assumes that users are identified by
a combination of username and domain, both of which are
case-insensitive strings containing any character except ‘@’ and ‘*’.<span
style="mso-spacerun: yes">  The combination of user at domain
forms a unique name for the user in ‘presence space’ in the same manner as an
email address.

A domain is a namespace for grouping logically co-located
users, similar purpose to a DNS domain. 
It is assumed that all users within the a domain will want to be aware
of each other’s presence by default, and that presence info for users outside
the domain will be manually added as needed (eg a client might allow a user in
another domain to be explicitly added to a ‘buddy list’).

As well as providing a namespace framework, the domain
concept is the key to scalability of the presence protocol by making it ‘safe’
for clients to, by default, subscribe to all presence info in a domain, knowing
this won’t bog down the entire online world.

3.2       
Operation

The presence protocol operates by exchanging two types of
notifications:

<p class=MsoBodyText style='margin-left:35.7pt;text-indent:-17.85pt;page-break-after:
avoid;mso-list:l0 level1 lfo8;tab-stops:list 36.0pt'><span
style='font-family:Symbol'>·       
Presence-Info, and

<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:
l0 level1 lfo8;tab-stops:list 36.0pt'><span
style='font-family:Symbol'>·       
Presence-Request

Clients use Presence-Info notifications to publish presence
information about themselves, and use Presence-Request to trigger other clients
to generate info notifications.

Clients subscribe to Presence-Request notifications, and
generate Presence-Info notifications in response.<span style="mso-spacerun:
yes">  Clients also spontaneously emit Presence-Info when they start up
and when any of the presence information previously published has changed.<span
style="mso-spacerun: yes">  A number of fields in Presence-Info are
optional, meaning they may be left out when their values are the same as they
were in the last full notification.

3.3       
Example Exchange

Note: see sections 3.4
 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500320035003600330034003400340037000000
 & 3.5
 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500320035003600330034003400340038000000
 for definitions of the Presence-Request and
Presence-Info notifications.

Scenario: Zaphod (in domain “hitch-hikers”) is already
online.  Frodo, in the same domain as
Zaphod, starts up a presence-capable client.

Frodo initially announces
he is online with the following full presence info notification:

<p class=MsoBodyText style='margin-left:36.0pt;mso-pagination:widow-orphan lines-together;
tab-stops:162.0pt'><span style='font-size:11.0pt;
mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'><span
style="mso-spacerun: yes">    Presence-Info: initial
Presence-Protocol: 1000
             User: Frodo
           Domain: hitch-hikers
      Status-Text: Online
  Status-Duration: 0
      Chat-Groups: Chat;ticker-dev
      News-Groups:
BreakingStories;Slashdot
    Ticker-Client: frodoticker 1.0

Zaphod’s client, being subscribed to presence info in that
domain, receives the information about Frodo and updates its registry.

Frodo’s client now populates its registry by:

<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:
l5 level1 lfo6;tab-stops:list 36.0pt 90.0pt'>1.<span
style='font:7.0pt "Times New Roman"'>      Subscribing
to presence information for the “hitch-hikers” domain using the expression:
<span style='font-size:11.0pt;mso-bidi-font-size:12.0pt;
font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>require
(Presence-Info) && Domain == “hitch-hikers”

<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:
l5 level1 lfo6;tab-stops:list 36.0pt 72.0pt'>2.<span
style='font:7.0pt "Times New Roman"'>      Sending
a request for presence information about people in the current domain.<span
style="mso-spacerun: yes">  The presence request notification Frodo
sends is:

<span
class=Notification><span style='font-size:11.0pt;mso-bidi-font-size:12.0pt;
font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'><span
style="mso-spacerun: yes"> Presence-Request: cafebabe12345
Presence-Protocol: 1000 
           Domain: hitch-hikers
             User: *

All clients in the domain, including Zaphod’s, receive the
request since they have subscribed using an expression like:

<span
style='font-size:11.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New";
mso-bidi-font-family:"Times New Roman"'>require (Presence-Request) &&
  Domain == “hitch-hikers” &&
  (User == “Zaphod” || User == “*”)

Zaphod’s client responds with a full presence info
notification tagged with the request ID from Frodo’s message:

<p class=MsoBodyText style='margin-left:36.0pt;mso-pagination:widow-orphan lines-together;
tab-stops:162.0pt'><span style='font-size:11.0pt;
mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'><span
style="mso-spacerun: yes">    Presence-Info: reply cafebabe12345
Presence-Protocol: 1000
             User: Zaphod
           Domain: hitch-hikers
      Status-Text: Online
  Status-Duration: 42
      Chat-Groups: Chat;ticker-dev
      News-Groups: BreakingStories;Slashdot
    Ticker-Client: zticker 3.0
x-Number-Of-Heads: 2

Frodo’s client updates its registry, at which point
Zaphod, Frodo, and any other interested clients are in sync.

Later, when Zaphod decides to go for coffee, he hits the
“Coffee!” button on his client, which sends this partial presence notification:

<span
class=Notification><span style='font-size:11.0pt;mso-bidi-font-size:12.0pt;
font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'><span
style="mso-spacerun: yes">    Presence-Info: update
Presence-Protocol: 1000
             User: Zaphod
           Domain: hitch-hikers
      Status-Text: Coffee!
  Status-Duration: 0



<span style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";mso-ansi-language:EN-AU;mso-fareast-language:EN-US;
mso-bidi-language:AR-SA'><br clear=all style='page-break-before:always;
mso-break-type:section-break'>




3.4       
Presence Request Fields

<table border=1 cellspacing=0 cellpadding=0 width="100%" style='width:100.0%;
 border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt'>
 
  
   <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   Field
   
   <td width="10%" valign=top style='width:10.46%;border:solid windowtext .5pt;
   border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   Type
   
   <td width="28%" valign=top style='width:28.86%;border:solid windowtext .5pt;
   border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   Description
   
   <td width="32%" valign=top style='width:32.64%;border:solid windowtext .5pt;
   border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   Possible values
   
   <td width="14%" valign=top style='width:14.18%;border:solid windowtext .5pt;
   border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   When Used
   
  
  
   <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
   border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   Presence-Request
   
   <td width="10%" valign=top style='width:10.46%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   String
   
   <td width="28%" valign=top style='width:28.86%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   Marks the notification as a presence request and
   carries a request ID.
   
   <td width="32%" valign=top style='width:32.64%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   A random, unique request ID, not longer than 255
   characters, no spaces.
   
   <td width="14%" valign=top style='width:14.18%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   Always
   
  
  
   <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
   border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   Presence-Protocol
   
   <td width="10%" valign=top style='width:10.46%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   Int32
   
   <td width="28%" valign=top style='width:28.86%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   Same as Presence-Info
   
   <td width="32%" valign=top style='width:32.64%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
    
   
   <td width="14%" valign=top style='width:14.18%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   Always
   
  
  
   <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
   border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   Domain
   
   <td width="10%" valign=top style='width:10.46%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   String
   
   <td width="28%" valign=top style='width:28.86%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   Same as Presence-Info
   
   <td width="32%" valign=top style='width:32.64%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
    
   
   <td width="14%" valign=top style='width:14.18%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   Always
   
  
  
   <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
   border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   User
   
   <td width="10%" valign=top style='width:10.46%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   String
   
   <td width="28%" valign=top style='width:28.86%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   Allows a client to request status info of a particular
   user (perhaps in another domain) without generating redundant
   Presence-Info’s from other clients in the domain.<span style="mso-spacerun:
   yes">  Clients should respond to requests when the “User” field
   matches their username, or equals “*”.
   
   <td width="32%" valign=top style='width:32.64%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   A specific username or “*” (any user).<span
   style="mso-spacerun: yes">  
   
   <td width="14%" valign=top style='width:14.18%;border-top:none;border-left:
   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   Always
   
  
 


 

3.5       
Presence Info Fields

<table border=1 cellspacing=0 cellpadding=0 width="100%" style='width:100.0%;
 border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt'>
 
  
   <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
   padding:0cm 5.4pt 0cm 5.4pt'>
   Field
   
   <td width="10%" valign=top style='width:10.5%;border:solid windowtext .5pt;
   border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   Type
   
   <td width="29%" valign=top style='width:29.36%;border:solid windowtext .5pt;
   border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   Description
   
   <td width="33%" valign=top style='width:33.48%;border:solid windowtext .5pt;
   border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   Possible values
   
   <td width="12%" valign=top style='width:12.8%;border:solid windowtext .5pt;
   border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
   When Used
   
  
 
 
  <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  Presence-Info
  
  <td width="10%" valign=top style='width:10.5%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  String
  
  <td width="29%" valign=top style='width:29.36%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Marks this as a presence info notification and specifies
  its subtype
  
  <td width="33%" valign=top style='width:33.48%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  <p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
  mso-list:l3 level1 lfo2;tab-stops:list 18.0pt'><span
  style='font-family:Symbol;mso-bidi-font-style:italic'>·<span
  style='font:7.0pt "Times New Roman"'>       
  “initial”: Full info, with all fields that the client
  supports populated.  Generated when
  the client starts and broadcasts initial presence info.
  <p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
  mso-list:l3 level1 lfo2;tab-stops:list 18.0pt'><span
  style='font-family:Symbol;mso-bidi-font-style:italic'>·<span
  style='font:7.0pt "Times New Roman"'>       
  “reply  request_id”:
  Full info (all fields that the client supports are populated) in response to
  a Presence-Request with ID request_id.
  <p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
  mso-list:l3 level1 lfo2;tab-stops:list 18.0pt'><span
  style='font-family:Symbol;mso-bidi-font-style:italic'>·<span
  style='font:7.0pt "Times New Roman"'>       
  “update”: Partial info, with only the optional fields
  that have changed since last update included.<span style="mso-spacerun:
  yes">  Generated when presence data (eg Status-Text) changes.
  
  <td width="12%" valign=top style='width:12.8%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Always
  
 
 
  <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  Presence-Protocol
  
  <td width="10%" valign=top style='width:10.5%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Int32
  
  <td width="29%" valign=top style='width:29.36%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  The version of the presence protocol that is used in
  this notification.
  
  <td width="33%" valign=top style='width:33.48%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
   major_version
  * 1000 + minor_version.  Eg.
  2001 = version 2.1 of the protocol, 3093 = version 3.93 of the protocol.<span
  style="mso-spacerun: yes">  The usual compatibility rules for
  major/minor versions apply: major version number changes indicate
  incompatible changes to the protocol, minor number increments indicate
  backward-compatible changes to the protocol.
  
  <td width="12%" valign=top style='width:12.8%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Always
  
 
 
  <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  User
  
  <td width="10%" valign=top style='width:10.5%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  String
  
  <td width="29%" valign=top style='width:29.36%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  The user’s name.
  
  <td width="33%" valign=top style='width:33.48%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Any string: eg “mpp”, “fred”, etc.
  
  <td width="12%" valign=top style='width:12.8%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Always
  
 
 
  <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  Domain
  
  <td width="10%" valign=top style='width:10.5%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  String
  
  <td width="29%" valign=top style='width:29.36%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  The user’s domain.
  
  <td width="33%" valign=top style='width:33.48%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Any string: “dsto”, “dstc”, etc.
  
  <td width="12%" valign=top style='width:12.8%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Always
  
 
 
  <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  Status-Text
  
  <td width="10%" valign=top style='width:10.5%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  String
  
  <td width="29%" valign=top style='width:29.36%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  The status of the user.
  
  <td width="33%" valign=top style='width:33.48%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Any string, with the following conventional meanings
  (case insensitive):
  <p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
  mso-list:l1 level1 lfo1;tab-stops:list 18.0pt'><span
  style='font-family:Symbol'>·       
  Starts with “Online”: the user is online.
  <p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
  mso-list:l1 level1 lfo1;tab-stops:list 18.0pt'><span
  style='font-family:Symbol'>·       
  Starts with “Offline”: the user is not currently
  connected.  This is usually sent as
  the status when a presence client disconnects.
  <p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
  mso-list:l1 level1 lfo1;tab-stops:list 18.0pt'><span
  style='font-family:Symbol'>·       
  Starts with “Unavailable”: the user is not currently
  viewing messages (eg away from desk). 
  Clients that auto-set this status based on activity (keystroke/mouse)
  monitoring should add a question mark to indicate this is an educated guess
  (eg “Unavailable?”).
  <p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
  mso-list:l1 level1 lfo1;tab-stops:list 18.0pt'><span
  style='font-family:Symbol'>·       
  Contains “Coffee”: the user is on a coffee break.
  
  <td width="12%" valign=top style='width:12.8%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Optional
  
 
 
  <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  Status-Duration
  
  <td width="10%" valign=top style='width:10.5%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Int32
  
  <td width="29%" valign=top style='width:29.36%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  The amount of time (in seconds) that the current status
  has been in effect.
  
  <td width="33%" valign=top style='width:33.48%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Any integer >= 0. <span style="mso-spacerun:
  yes"> Undefined behaviour if anyone holds the same status longer than
  136 years ;) (232 seconds)
  
  <td width="12%" valign=top style='width:12.8%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Optional: required when Status-Text field is present
  
 
 
  <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  Chat-Groups
  
  <td width="10%" valign=top style='width:10.5%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  String
  
  <td width="29%" valign=top style='width:29.36%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Semicolon-separated list of chat groups the user is
  subscribed to.
  
  <td width="33%" valign=top style='width:33.48%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Eg. “Chat;ticker-dev”
  
  <td width="12%" valign=top style='width:12.8%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Optional
  
 
 
  <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  News-Groups
  
  <td width="10%" valign=top style='width:10.5%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  String
  
  <td width="29%" valign=top style='width:29.36%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Semicolon-separated list of news groups the user is
  subscribed to.
  
  <td width="33%" valign=top style='width:33.48%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Eg. “BreakingStories;Slashdot”
  
  <td width="12%" valign=top style='width:12.8%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Optional
  
 
 
  <td width="13%" valign=top style='width:13.86%;border:solid windowtext .5pt;
  border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  Ticker-Client
  
  <td width="10%" valign=top style='width:10.5%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  String
  
  <td width="29%" valign=top style='width:29.36%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  The ticker client the user is running
  
  <td width="33%" valign=top style='width:33.48%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  A ticker client name and version eg “sticker 2.0.1”,
  “xtickertape 2.0a”.  A missing value
  indicates the user is not running a ticker client.<span style="mso-spacerun:
  yes">  Users that are running ticker that don’t wish the type of
  client to be known should use “generic”.
  
  <td width="12%" valign=top style='width:12.8%;border-top:none;border-left:
  none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  padding:0cm 5.4pt 0cm 5.4pt'>
  Optional
  
 




<span style='font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:
"Times New Roman";mso-ansi-language:EN-AU;mso-fareast-language:EN-US;
mso-bidi-language:AR-SA'><br clear=all style='page-break-before:always;
mso-break-type:section-break'>




3.6       
Notes


 Presence-Info:
     the values of this field have been designed so that clients can easily
     discern the derivation of updates if they wish (for efficiency or
     otherwise).  However, clients are
     not required to distinguish between the different types of Status-Info
     notification: simply updating a registry with the new data in any
     Presence-Info notification is sufficient, so long as missing optional
     fields are handled.
     
     Note that one possible efficiency enabled by this approach is the ability
     to opt out of redundant “reply” updates in response to a Presence-Request
     from other clients, using the expression <span
     style='font-size:11.0pt;mso-bidi-font-size:12.0pt;font-family:"Courier New";
     mso-bidi-font-family:"Times New Roman"'>Status-Info != “reply”.<span
     style="mso-spacerun: yes">  The other obvious way to mark replies
     to status requests -- with a separate “In-Reply-To” field -- makes this
     difficult, since <span style='font-size:11.0pt;
     mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
     "Times New Roman"'>!require (In-Reply-To) can’t be used to
     create the same effect due to the tri-state logic used in the Elvin
     subscription language.
 Presence-Protocol:
     this is designed so that clients can subscribe to known protocol sets eg “<span
     class=Notification><span style='font-size:11.0pt;mso-bidi-font-size:12.0pt;
     font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Protocol-Version
     >= 1000 && Protocol-Version < 3000” picks up
     any 1.x or 2.x protocol notifications.
 It is
     assumed that, if the user is running a ticker client, then they are
     subscribed to their ‘personal’ chat group named “user at domain”.<span
     style="mso-spacerun: yes">  This convention makes it obvious how to
     send a ticker message to someone visible via the presence system.
 Non-standard
     fields should use the “x-” naming convention eg “x-Phone-Number”,
     “x-Organisation”, etc.  Ideally,
     clients should provide an option to display the non-standard fields.










More information about the ticker-dev mailing list