Presence specification draft 0.4.1
Phillips, Matthew
Matthew.Phillips at dsto.defence.gov.au
Mon Dec 17 18:00:50 EST 2001
A (minor) update in response to David's comments. Changes highlighted in
green as before.
Title: Elvin Presence Protocol
Elvin
Presence Protocol
Matthew Phillips
<matthew.phillips at dsto.defence.gov.au>
Draft 0.4.1 (<span style='mso-element:
field-begin'> SAVEDATE \@ "d/MM/yyyy" \* MERGEFORMAT <span
style='mso-element:field-separator'>17/12/2001<span
style='mso-element:field-end'>)
Contents
<span
style="mso-spacerun: yes"> TOC \o "2-2" \h \z \t "Heading
1,1" <span
class=MsoHyperlink>Notes About This Document<span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544818 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>1<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800310038000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'><span
style='mso-bidi-font-size:12.0pt;font-weight:normal'>
<span
class=MsoHyperlink>1<span style='mso-bidi-font-size:
12.0pt;color:windowtext;font-weight:normal;text-decoration:none;text-underline:
none'> Aim<span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544819 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>1<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800310039000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'><span
style='mso-bidi-font-size:12.0pt;font-weight:normal'>
<span
class=MsoHyperlink>2<span style='mso-bidi-font-size:
12.0pt;color:windowtext;font-weight:normal;text-decoration:none;text-underline:
none'> Requirements<span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544820 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>1<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800320030000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'><span
style='mso-bidi-font-size:12.0pt;font-weight:normal'>
<span
class=MsoHyperlink>3<span style='mso-bidi-font-size:
12.0pt;color:windowtext;font-weight:normal;text-decoration:none;text-underline:
none'> Specification<span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544821 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>2<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800320031000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'><span
style='mso-bidi-font-size:12.0pt;font-weight:normal'>
<span
class=MsoHyperlink>3.1<span style='color:windowtext;
text-decoration:none;text-underline:none'> User
Identity<span style='color:windowtext;display:none;mso-hide:screen;text-decoration:
none;text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544822 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>2<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800320032000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
<span
class=MsoHyperlink>3.2<span style='color:windowtext;
text-decoration:none;text-underline:none'> Groups<span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>. <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544823 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>2<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800320033000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
<span
class=MsoHyperlink>3.3<span style='color:windowtext;
text-decoration:none;text-underline:none'> Operation<span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544824 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>2<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800320034000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
<span
class=MsoHyperlink>3.4<span style='color:windowtext;
text-decoration:none;text-underline:none'> Example
Exchange<span style='color:windowtext;display:none;mso-hide:screen;text-decoration:
none;text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544825 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>2<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800320035000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
<span
class=MsoHyperlink>3.5<span style='color:windowtext;
text-decoration:none;text-underline:none'> Example
With Multiple Groups<span style='color:windowtext;display:none;mso-hide:screen;
text-decoration:none;text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544826 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>4<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800320036000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
<span
class=MsoHyperlink>3.6<span style='color:windowtext;
text-decoration:none;text-underline:none'> Presence
Request Fields<span style='color:windowtext;display:none;mso-hide:screen;
text-decoration:none;text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544827 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>5<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800320037000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
<span
class=MsoHyperlink>3.7<span style='color:windowtext;
text-decoration:none;text-underline:none'> Presence
Info Fields<span style='color:windowtext;display:none;mso-hide:screen;
text-decoration:none;text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544828 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>5<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800320038000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
<span
class=MsoHyperlink>3.8<span style='color:windowtext;
text-decoration:none;text-underline:none'> Handling
Conflicting Presence-Info Responses<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544829 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>10<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800320039000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
<span
class=MsoHyperlink>3.9<span style='color:windowtext;
text-decoration:none;text-underline:none'> Notes<span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>. <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544830 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>10<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800330030000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
<span
class=MsoHyperlink>4<span style='mso-bidi-font-size:
12.0pt;color:windowtext;font-weight:normal;text-decoration:none;text-underline:
none'> References<span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544831 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>11<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800330031000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'><span
style='mso-bidi-font-size:12.0pt;font-weight:normal'>
<span
class=MsoHyperlink>4.1<span style='color:windowtext;
text-decoration:none;text-underline:none'> Other
Presence Protocols<span style='color:windowtext;display:none;mso-hide:screen;
text-decoration:none;text-underline:none'> <span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'> PAGEREF _Toc532544832 \h <span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-separator'><span
style='color:windowtext;display:none;mso-hide:screen;text-decoration:none;
text-underline:none'>11<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500330032003500340034003800330032000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
<a
name="_Toc526853573"><span style='mso-bookmark:
_Toc526853573'>Notes About This Document<span style='mso-bookmark:
_Toc526853573'>
The key words
"MUST", "MUST NOT", "REQUIRED",
"SHALL", "SHALL NOT", "SHOULD", "SHOULD
NOT", "RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be
interpreted as described in <span
style='mso-bookmark:_Toc526853573'>IETF RFC 2119<span style='mso-bookmark:
_Toc526853573'>.
Changes to the
previous 0.2 draft specification are highlighted in green.
<h1 style='text-indent:-21.6pt;mso-text-indent-alt:-21.6pt;mso-list:l8 level1 lfo7;
mso-list-change:"%1\:1\:0\:" "Matthew Phillips" 20011217T1825'><span
style='mso-bookmark:_Toc526853573'>1<span
style='font:7.0pt "Times New Roman"'>
Aim
The aim 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.
<h1 style='text-indent:-21.6pt;mso-text-indent-alt:-21.6pt;mso-list:l8 level1 lfo7;
mso-list-change:"%1\:2\:0\:" "Matthew Phillips" 20011217T1825'><a
name="_Toc526853574"><span style='mso-bookmark:
_Toc526853574'>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 (IM) clients such as Jabber and ICQ.<span
style="mso-spacerun: yes"> 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:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l4 level1 lfo4;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
Does not require centralised, persistent state.
<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l4 level1 lfo4;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
Simple and thus easy to support.
<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:
l4 level1 lfo4;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
Separate, but complementary to, ticker messaging.
<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l4 level1 lfo4;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
Extensible.
<h1 style='text-indent:-21.6pt;mso-text-indent-alt:-21.6pt;mso-list:l8 level1 lfo7;
mso-list-change:"%1\:3\:0\:" "Matthew Phillips" 20011217T1825'><a
name="_Toc526853575"><span style='mso-bookmark:
_Toc526853575'>3
Specification
This section describes the protocol, including the
operations between clients and the format of the presence notifications.
<h2 style='text-indent:-28.8pt;mso-text-indent-alt:-28.8pt;mso-list:l8 level2 lfo7;
mso-list-change:"%1\:3\:0\:\.%2\:1\:0\:" "Matthew Phillips" 20011217T1825'><a
name="_Toc526853576"><span style='mso-bookmark:
_Toc526853576'>3.1
User Identity
The presence protocol assumes that users are identified by
a combination of name and domain, both of which are
case-insensitive strings containing any character except @.<span
style="mso-spacerun: yes"> The combination of name at domain
forms a unique user ID for the user in presence space in the same
manner as an email address.<ins cite="mailto:Matthew%20Phillips"
datetime="2001-12-17T18:04"> Apart from
its role as a namespace, the domain plays no other<ins
cite="mailto:Matthew%20Phillips" datetime="2001-12-17T18:05"> role in the
presence protocol.
<h2 style='text-indent:-28.8pt;mso-text-indent-alt:-28.8pt;mso-list:l8 level2 lfo7;
mso-list-change:"%1\:3\:0\:\.%2\:2\:0\:" "Matthew Phillips" 20011217T1825'><a
name="_Toc526853577"><span style='mso-bookmark:
_Toc526853577'>3.2
Presence Groups
A group is a namespace containing a set of online
users. Every online user MUST be in at
least one group and may opt to be in several.
All users within a group will be aware of each others presence by
default. A group can be thought of as a
public, dynamic buddy list that is automatically populated with community of
people. When users want to add people
outside their main group to their buddy list, they have two options: explicitly
add the other user by name, or join the other group.
For example, all the people working in the Frob Testing
Division of Bobs Frobs Inc, may elect to be in the ftc.bobco group.<span
style="mso-spacerun: yes"> The manager of FTC might also elect to be
in the management.bobco group so he or she can maintain contact with the
managers of other divisions.
As well as providing a way to partition presence
information into communities, the group concept is the key to scalability of
the presence protocol by making it efficient for clients to subscribe to all
presence info in a dynamic group smaller than the entire online world.
<h2 style='text-indent:-28.8pt;mso-text-indent-alt:-28.8pt;mso-list:l8 level2 lfo7;
mso-list-change:"%1\:3\:0\:\.%2\:3\:0\:" "Matthew Phillips" 20011217T1825'><a
name="_Toc526853578"><span style='mso-bookmark:
_Toc526853578'>3.3
Operation
The presence protocol
operates by exchanging two types of notifications:
<p class=MsoBodyText style='margin-left:35.7pt;text-indent:-35.7pt;mso-text-indent-alt:
-17.85pt;page-break-after:avoid;mso-list:l0 level1 lfo8;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
Presence-Info, and
<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l0 level1 lfo8;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
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"> <ins cite="mailto:Matthew%20Phillips"
datetime="2001-12-17T18:11">
<p class=MsoBodyText style='text-indent:0cm;mso-text-indent-alt:0cm;mso-list:
none;mso-list-ins:"Matthew Phillips" 20011217T1811'>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.<ins
cite="mailto:Matthew%20Phillips" datetime="2001-12-17T18:08"><span
style="mso-spacerun: yes"> In general, clients should never assume <ins
cite="mailto:Matthew%20Phillips" datetime="2001-12-17T18:09">that <ins
cite="mailto:Matthew%20Phillips" datetime="2001-12-17T18:08">any of the
optional fields <ins cite="mailto:Matthew%20Phillips"
datetime="2001-12-17T18:09">in a presence notification <ins
cite="mailto:Matthew%20Phillips" datetime="2001-12-17T18:11">will be <ins
cite="mailto:Matthew%20Phillips" datetime="2001-12-17T18:08">present, and
should treat a missing field as indicating the value of that field is the same <ins
cite="mailto:Matthew%20Phillips" datetime="2001-12-17T18:10">as <ins
cite="mailto:Matthew%20Phillips" datetime="2001-12-17T18:08">when it was
specified previously.
<h2 style='text-indent:-28.8pt;mso-text-indent-alt:-28.8pt;mso-list:l8 level2 lfo7;
mso-list-change:"%1\:3\:0\:\.%2\:4\:0\:" "Matthew Phillips" 20011217T1825'><a
name="_Toc526853579"><span style='mso-bookmark:
_Toc526853579'>3.4
Example Exchange
Note: see sections 3.6
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500320035003600330034003400340037000000
& 3.7
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500320035003600330034003400340038000000
for definitions of the Presence-Request and
Presence-Info notifications.
Scenario: Zaphod at hitch-hikers is already online.<span
style="mso-spacerun: yes"> Frodo at hitch-hikers, starts up a
presence-capable client. Both are in
the hitch-hikers group.
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
Client-Id: ffffff-111111
User: Frodo at hitch-hikers
Groups: |hitch-hikers|
Status: online
Status-Text: Online
Status-Duration: 0
Chat-Groups: |Chat|ticker-dev|
News-Groups:
|BreakingStories|Slashdot|
Ticker-Client: frodoticker 1.0
Zaphods client, being subscribed to presence info in for
the hitch-hikers group, receives the information about Frodo and updates its
registry.
Frodos client now populates its registry by:
<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l5 level1 lfo6;mso-list-change:"%1\:1\:0\:\." "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt 90.0pt'>1.
Subscribing to presence information for the hitch-hikers group
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) &&<span
style='mso-ansi-font-size:12.0pt;mso-ascii-font-family:"Times New Roman";
mso-hansi-font-family:"Times New Roman"'>
<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"'>contains (fold-case
(Groups), |hitch-hikers|)
<p class=MsoBodyText style='margin-left:36.0pt;text-indent:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l5 level1 lfo6;mso-list-change:"%1\:2\:0\:\." "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt 72.0pt'>2.
Sending a request for presence information about people in the
current group. 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
Reqestor: Frodo at hitch-hikers
Groups: |hitch-hikers|
Users:
All clients in the group, including Zaphods, 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) &&
(contains (fold-case (Groups),
|hitch-hikers|) ||
contains (fold-case (Users),
|zaphod at hitch-hikers|))
Zaphods client responds with a full presence info
notification tagged with the request ID from Frodos 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: cafebabe12345
Presence-Protocol: 1000
Client-Id: <span
style='mso-tab-count:1'> zz9pza-222222
User: Zaphod at hitch-hikers
Groups: |hitch-hikers|
Status: online
Status-Text: Online (going for
coffee at 3pm)
Status-Duration: 42
Chat-Groups: |Chat|ticker-dev|
News-Groups: |BreakingStories|Slashdot|
Ticker-Client: zticker 3.0
x-Number-Of-Heads: 2
Frodos 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
Client-Id: zz9pza-222222
User: Zaphod at hitch-hikers
Groups: |hitch-hikers|
Status: unavailable
Status-Text: Coffee!
Status-Duration: 0
<h2 style='text-indent:-28.8pt;mso-text-indent-alt:-28.8pt;mso-list:l8 level2 lfo7;
mso-list-change:"%1\:3\:0\:\.%2\:5\:0\:" "Matthew Phillips" 20011217T1825'><a
name="_Toc532544826">3.5
Example With Multiple Groups
The previous example assumed Frodo was in a single
group. The following example (shown
from Frodos end only) illustrates how his client would support Frodo being
both in the hitch-hikers group and the hobbits group.<span
style="mso-spacerun: yes"> The key changes from the previous example
are highlighted in bold.
Frodos client would announce he is online with:
<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
Client-Id: ffffff-111111
User: Frodo at hitch-hikers
Groups:
|hitch-hikers|hobbits|
Status: online
Status-Text: Online
Status-Duration: 0
Chat-Groups: |Chat|ticker-dev|
News-Groups:
|BreakingStories|Slashdot|
Ticker-Client: frodoticker 1.0
Frodos client subscribes to Presence-Requests using this
expression:
<span
style='font-size:11.0pt;mso-bidi-font-size:10.0pt'>require (Presence-Request) &&
contains (fold-case (Groups),<pre
style='margin-left:28.8pt'><span style='font-size:
11.0pt;mso-bidi-font-size:10.0pt'> |hitch-hikers|, |hobbits|)<span
class=Notification> ||
contains (fold-case (Users), |frodo at hitch-hikers|)
<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'>
<a
name="_Ref525634447"><span
style='mso-bookmark:_Toc526853580'>3.6<span
style='font:7.0pt "Times New Roman"'>
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="16%" valign=top style='width:16.0%;border:solid windowtext .5pt;
padding:0cm 5.4pt 0cm 5.4pt'>
Field
<td width="8%" valign=top style='width:8.32%;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="16%" valign=top style='width:16.0%;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="8%" valign=top style='width:8.32%;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. The ID MUST
NOT be initial or update.
<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="16%" valign=top style='width:16.0%;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="8%" valign=top style='width:8.32%;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="16%" valign=top style='width:16.0%;border:solid windowtext .5pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
Requestor
<td width="8%" valign=top style='width:8.32%;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'>
The username of the person requesting the presence
information.
<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 username in user at domain form.
<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'>
Optional
<td width="16%" valign=top style='width:16.0%;border:solid windowtext .5pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
Groups
<td width="8%" valign=top style='width:8.32%;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 all users in
a set of groups. Clients should
respond to requests when this field contains a group the user is a member
of.
<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 set of groups in the same format as
Presence-Info. If no groups are
being requested, this field should be left empty.
<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="16%" valign=top style='width:16.0%;border:solid windowtext .5pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
Users
<td width="8%" valign=top style='width:8.32%;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 particular
users. Clients should respond to requests when the Users field contains
their username.
<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 set of usernames delimited by |.
Eg |frodo at home|bob at bobco. If no
specific users are being requested, this field should be left empty.
<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
<h2 style='text-indent:-28.8pt;mso-text-indent-alt:-28.8pt;mso-list:l8 level2 lfo7;
mso-list-change:"%1\:3\:0\:\.%2\:7\:0\:" "Matthew Phillips" 20011217T1825'><a
name="_Ref525634448"><span
style='mso-bookmark:_Toc526853581'>3.7<span
style='font:7.0pt "Times New Roman"'>
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="16%" valign=top style='width:16.0%;border:solid windowtext .5pt;
padding:0cm 5.4pt 0cm 5.4pt'>
Field
<td width="8%" valign=top style='width:8.36%;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="16%" valign=top style='width:16.0%;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="8%" valign=top style='width:8.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'>
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;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 18.0pt'><span style='font-family:Symbol;
mso-bidi-font-style:italic'>·
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-text-indent-alt:-18.0pt;mso-list:l3 level1 lfo2;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 18.0pt'><span style='font-family:Symbol;
mso-bidi-font-style:italic'>·
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-text-indent-alt:-18.0pt;mso-list:l3 level1 lfo2;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 18.0pt'><span style='font-family:Symbol;
mso-bidi-font-style:italic'>·
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="16%" valign=top style='width:16.0%;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="8%" valign=top style='width:8.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'>
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="16%" valign=top style='width:16.0%;border:solid windowtext .5pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
Client-Id
<td width="8%" valign=top style='width:8.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'>
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'>
Identifies the client instance that generated the
response. This can be used by
receivers to resolve conflicting presence information from users that are
running multiple clients - see section 3.8
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500320037003900360036003900380038000000
for more information.
<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 that uniquely identifies the client and which
remains constant across the period between client initialisation (sending the
first presence response) and client shutdown (sending an offline status
notification).
<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="16%" valign=top style='width:16.0%;border:solid windowtext .5pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
User
<td width="8%" valign=top style='width:8.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'>
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 users username.
<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 username: eg mpp at dsto, bob at bobco, 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="16%" valign=top style='width:16.0%;border:solid windowtext .5pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
Groups
<td width="8%" valign=top style='width:8.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'>
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 groups the user is a member of.
<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 set of group names separated by |.
For example |dsto|quake heroes|.
Note that the preceding and trailing |s allow clients to use the contains
function to easily test for particular groups without having to handle three
cases (where the group is at the beginning, middle and end of the list).
<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="16%" valign=top style='width:16.0%;border:solid windowtext .5pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
Status
<td width="8%" valign=top style='width:8.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'>
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'>
<p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
mso-list:l1 level1 lfo1;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 18.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
online: the user is online and ready to receive
messages.
<p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
mso-text-indent-alt:-18.0pt;mso-list:l1 level1 lfo1;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 18.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
unavailable?: the client has made an educated guess
that the user is unavailable. This is
often the result of the client not seeing any keystroke or mouse activity
from the user for a given period of time.
<p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
mso-text-indent-alt:-18.0pt;mso-list:l1 level1 lfo1;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 18.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
unavailable: the user is not currently viewing
messages (eg away from desk).
<p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
mso-text-indent-alt:-18.0pt;mso-list:l1 level1 lfo1;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 18.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
offline: the user has disconnected.<span
style="mso-spacerun: yes"> This is usually sent when a presence
client shuts down, but may be sent whenever the user no longer exists (eg
if the user changes their name).
<p class=MsoBodyText style='margin-left:18.0pt;text-indent:-18.0pt;
mso-list:l1 level1 lfo1;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 18.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
coffee: the user is on a coffee break.<span
style="mso-spacerun: yes"> This special status, which is functionally
equivalent to unavailable, is intended to support CoffeeBiff-style client
interactions.
The status settings SHOULD be taken into account by the
client when merging conflicting notifications: see section <span
style='mso-field-code:"REF _Ref527966988 \\r \\h"'>3.8
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500320037003900360036003900380038000000
for a discussion on this.
<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="16%" valign=top style='width:16.0%;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="8%" valign=top style='width:8.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'>
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'>
Text describing 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 intended to be displayed as the current
status eg Online: but will be away this afternoon.
<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 the Status field is present
<td width="16%" valign=top style='width:16.0%;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="8%" valign=top style='width:8.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'>
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. This is a
relative duration rather than an absolute time since the status was set to
avoid the perennial problems with inaccurate clocks and time zones.
<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.
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 field is present
<td width="16%" valign=top style='width:16.0%;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="8%" valign=top style='width:8.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'>
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 set 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="16%" valign=top style='width:16.0%;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="8%" valign=top style='width:8.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'>
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 set 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="16%" valign=top style='width:16.0%;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="8%" valign=top style='width:8.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'>
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 but which dont 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
<td width="16%" valign=top style='width:16.0%;border:solid windowtext .5pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
<ins cite="mailto:Matthew%20Phillips"
datetime="2001-12-17T18:06">User-Agent
<td width="8%" valign=top style='width:8.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'>
<ins cite="mailto:Matthew%20Phillips"
datetime="2001-12-17T18:06">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'>
<ins cite="mailto:Matthew%20Phillips"
datetime="2001-12-17T18:06">The name of the presence client that generated
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'>
<ins cite="mailto:Matthew%20Phillips"
datetime="2001-12-17T18:07">Any string value identifying a presence client,
or generic if this information is being hidden.<ins
cite="mailto:Matthew%20Phillips" datetime="2001-12-17T18:06">
<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'>
<ins cite="mailto:Matthew%20Phillips"
datetime="2001-12-17T18:07">Optional<ins cite="mailto:Matthew%20Phillips"
datetime="2001-12-17T18:06">
<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'>
<a
name="_Toc526853582"><span
style='mso-bookmark:_Ref527966988'>3.8<span
style='font:7.0pt "Times New Roman"'>
Handling Conflicting Presence-Info Responses<span
style='mso-bookmark:_Toc526853582'>
Clients SHOULD
handle the situation where multiple overloaded Presence-Info responses are
received for single user by using the Client-Id and Status fields.<span
style="mso-spacerun: yes"> For example, in the case where a user is
running two clients on two hosts, one of which is listing the user as
unavailable?, the other which lists the user as online, Presence-Requests
will generate two responses with two different Client-Ids.<span
style="mso-spacerun: yes"> In this case, clients SHOULD give precedence
to the information in the online notification response over the unavailable?.
A straightforward
way of achieving this is for clients to maintain a registry of users that
assigns to each unique User a set of received Presence-Infos, one per unique
Client-Id. For each user, the client
selects the Presence-Info with the most active status as the authoritative
info for that user. In the case where
all statuses are equal, the client selects the Presence-Info with the smallest
Status-Duration. The order of
precedence for the Status field (from most active to most inactive) is
online, unavailable?, unavailable<ins
cite="mailto:Matthew%20Phillips" datetime="2001-12-17T18:25">, coffee<ins
cite="mailto:Matthew%20Phillips" datetime="2001-12-17T18:26"> and
offline, with any other (illegal) statuses being considered to fall between
unavailable and offline (ie offline is the most inactive state a user can
be in).
<h2 style='text-indent:-28.8pt;mso-text-indent-alt:-28.8pt;mso-list:l8 level2 lfo7;
mso-list-change:"%1\:3\:0\:\.%2\:9\:0\:" "Matthew Phillips" 20011217T1825'><span
style='mso-bookmark:_Toc526853582'>3.9<span
style='font:7.0pt "Times New Roman"'>
Notes
<p class=MsoNormal style='margin-left:36.0pt;text-indent:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l7 level1 lfo9;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
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 Presence-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:10.0pt;font-family:
"Courier New";mso-fareast-font-family:"Courier New"'>Presence-Info<span
class=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"'>!= update
&& Presence-Info != initial.<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
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"'>!require
(In-Reply-To) cant be used to create the same effect due to the
tri-state logic used in the Elvin subscription language.
<p class=MsoNormal style='margin-left:36.0pt;text-indent:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l7 level1 lfo9;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
Presence-Protocol: this is designed so that clients can
subscribe to known protocol sets eg <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.
<p class=MsoNormal style='margin-left:36.0pt;text-indent:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l7 level1 lfo9;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
It is assumed that, if the user is running a ticker
client, then they are subscribed to their personal chat group with the same
name as their user ID ie user at domain.
This convention makes it obvious how to send a ticker message to someone
visible via the presence system.
<p class=MsoNormal style='margin-left:36.0pt;text-indent:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l7 level1 lfo9;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
Non-standard fields should use the x- naming
convention eg x-Phone-Number, x-Organisation, etc.<span
style="mso-spacerun: yes"> Ideally, clients should provide an option to
display the non-standard fields.
<p class=MsoNormal style='margin-left:36.0pt;text-indent:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l7 level1 lfo9;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
Treating usernames or groups as case-sensitive runs the
risk of people not seeing each other because they got the case wrong eg I look
for bob at bobco and fail to see him because he is really Bob at BobCo.
<p class=MsoNormal style='margin-left:36.0pt;text-indent:-36.0pt;mso-text-indent-alt:
-18.0pt;mso-list:l7 level1 lfo9;mso-list-change:\F0B7 "Matthew Phillips" 20011217T1825;
tab-stops:list 36.0pt'>·<span
style='font:7.0pt "Times New Roman"'>
Requestor field: this was initially intended to allow
clients to respond differently depending on the requestor, eg subscriptions to
some groups might be hidden except to certain people.<span style="mso-spacerun:
yes"> But since any client can listen in to the replies, it would not
be a particularly useful way of hiding information (using the security APIs
would make more sense). It is left in
the specification but made optional.
<h1 style='text-indent:-21.6pt;mso-text-indent-alt:-21.6pt;mso-list:l8 level1 lfo7;
mso-list-change:"%1\:4\:0\:" "Matthew Phillips" 20011217T1825'><a
name="_Toc526853583"><span style='mso-bookmark:
_Toc526853583'>4
References
<h2 style='text-indent:-28.8pt;mso-text-indent-alt:-28.8pt;mso-list:l8 level2 lfo7;
mso-list-change:"%1\:4\:0\:\.%2\:1\:0\:" "Matthew Phillips" 20011217T1825'><a
name="_Toc526853584"><span style='mso-bookmark:
_Toc526853584'>4.1
Other Presence Protocols
Thanks to David Arnold for providing the initial set of
links that these references are based on.
<h3 style='text-indent:-36.0pt;mso-text-indent-alt:-36.0pt;mso-list:l8 level3 lfo7;
mso-list-change:"%1\:4\:0\:\.%2\:1\:0\:\.%3\:1\:0\:" "Matthew Phillips" 20011217T1825'>4.1.1<span
style='font:7.0pt "Times New Roman"'>
Simple General Awareness Protocol (SGAP)
A Lotus-sponsored <a
href="http://www.lotus.com/lotus/research.nsf/2b4f81291401771785256976004a8d13/86975a452540f46c8525661e0051904d/$FILE/sgap4.htm">IETF
Internet Draft, which expired on May 98.
Its not clear if this is still a live project.<span
style="mso-spacerun: yes"> Specification talks mainly about
client/server interactions and message formats.<span style="mso-spacerun:
yes"> Seems to offer little wisdom for this specification.
Also see <a
href="http://www.lotus.com/lotus/research.nsf/e2fedcc34342c897852568bd001274fd/08f78fa390138578852565c500701d11?OpenDocument">Lotus
Research Page for more information.
<h3 style='text-indent:-36.0pt;mso-text-indent-alt:-36.0pt;mso-list:l8 level3 lfo7;
mso-list-change:"%1\:4\:0\:\.%2\:1\:0\:\.%3\:2\:0\:" "Matthew Phillips" 20011217T1825'>4.1.2<span
style='font:7.0pt "Times New Roman"'>
Instant Messaging and Presence Protocol (IMPP)
Uses presence information messages (MIME type
message/cpim) that contain an XML presence info payload.
Example payload (from <a
href="http://www.ietf.org/internet-drafts/draft-ietf-impp-cpim-pidf-00.txt">IMPP
internet draft):
<presence xmlns="http://www.ietf.org/ns/cpim-pidf-xml-1.0"> <tuple name="im-1"> <status> <value>open</value> <detail type="im" schema="http://www.ietf.org/dtd/im-type-im.dtd"> away<span
style='mso-tab-count:1'> </detail> </status> <contact priority="2">im:shingo at jp.fujitsu.com</contact> <note>I'll be in Tokyo tomorrow</note> </tuple> <tuple name="email"> <status> <value>open</value> </status> <contact priority="1">mailto:shingo at jp.fujitsu.com</contact> </tuple> </presence>
The main wisdom to be gained here is that the presence info
is divided into one or more contact tuples, which describe the users status in
a particular online medium. In the
example, the user is saying they have both Instant Messaging and email
contacts, but are not online for IM.
The addition of the note to the IM tuple presumably informs interested
parties that the person will be available for chat the next day.<span
style="mso-spacerun: yes"> The Status-Text field of this protocol gives
some of this functionality, but we are really assuming that ticker is the main
messaging method. Email addresses and
other info can be supplied as an x- field.
For more info see <a
href="http://www.ietf.org/html.charters/impp-charter.html">IMPP charter page,
IMPP main page, <a
href="http://www.ietf.org/ids.by.wg/impp.html">IMPP working group pages and
<a
href="http://www.lotus.com/lotus/research.nsf/e2fedcc34342c897852568bd001274fd/989718b8a6d016228525668a00632987?OpenDocument">Lotus
Research.
<h3 style='text-indent:-36.0pt;mso-text-indent-alt:-36.0pt;mso-list:l8 level3 lfo7;
mso-list-change:"%1\:4\:0\:\.%2\:1\:0\:\.%3\:3\:0\:" "Matthew Phillips" 20011217T1825'>4.1.3<span
style='font:7.0pt "Times New Roman"'>
Jabber
Jabber is an IM/presence service built from a series of
federated servers. The protocol is open
and there are a number of open-source clients.
A free trialware server for up to 100 users is available, but a
commercial license is needed for larger numbers of users.
The XML-based <a
href="http://docs.jabber.org/general/html/protocol.html">Jabber protocol
includes a presence message type.
Example (from protocol page):
<presence to="romeo at montague.com/orchard" from="juliet at capulet.com/balcony"> <status>Stay but a little, I will come again.</status> <show>away</show> </presence>
The distinction between
show and status is interesting.
Status is user-readable text and is used in the same way the protocol in
this document. Show can be:
<table border=1 cellspacing=0 cellpadding=0 style='margin-left:30.35pt;
border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt'>
<td width=56 valign=top style='width:42.15pt;border:solid windowtext .5pt;
padding:0cm 5.4pt 0cm 5.4pt'>
chat
<td width=472 valign=top style='width:353.9pt;border:solid windowtext .5pt;
border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
The client is available for immediate contact.
<td width=56 valign=top style='width:42.15pt;border:solid windowtext .5pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
away
<td width=472 valign=top style='width:353.9pt;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 client is online, but is momentarily away (e.g., at lunch or a
meeting).
<td width=56 valign=top style='width:42.15pt;border:solid windowtext .5pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
xa
<td width=472 valign=top style='width:353.9pt;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 client is online, but has been inactive for a long time.
<td width=56 valign=top style='width:42.15pt;border:solid windowtext .5pt;
border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
dnd
<td width=472 valign=top style='width:353.9pt;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 client is in Do Not Disturb mode.
The Elvin presence protocol
currently overloads show and status into the Status field eg
Unavailable (at meeting in rm 56) is the same as Jabber show = away +
status = at meeting in rm 56. We may
want to consider following the Jabber example.
Jabber also has an iq message format can be used to
exchange extended information.
See home page, <a
href="http://www.jabber.com/">main commercial page, <a
href="http://www.jabbercentral.org/">Jabber Central news page
<h3 style='text-indent:-36.0pt;mso-text-indent-alt:-36.0pt;mso-list:l8 level3 lfo7;
mso-list-change:"%1\:4\:0\:\.%2\:1\:0\:\.%3\:4\:0\:" "Matthew Phillips" 20011217T1825'>4.1.4<span
style='font:7.0pt "Times New Roman"'>
ICQ
The ICQ
v5 protocol allows a range of, non-extensible (?) information about a user
to be published using the CMD_META_USER message such as name, phone, age, city
etc. This sort of information could be
accommodated by the Elvin presence protocol using x-Name, x-Phone etc.
See ICQ
protocol site.
More information about the ticker-dev
mailing list