Elvin presence specification draft 0.2
Phillips, Matthew
Matthew.Phillips at dsto.defence.gov.au
Thu Oct 4 19:52:31 EST 2001
Hello all,
as noted in a recent ticker conversation, I've been converted to the idea of
supporting multiple presence groups and keeping the user at domain concept
seperate. I've also renamed the term "domain" to "group".
Attached is a revised draft spec for comment. I haven't had any non
domain-related feedback on the previous one, and I hope this is a sign of
general consent rather than utter boredom.
Cheers,
Matthew.
Title: Elvin Presence Protocol
Elvin
Presence Protocol
Matthew Phillips
Draft 0.2 (<span style='mso-element:
field-begin'> SAVEDATE \@ "d/MM/yyyy" \* MERGEFORMAT <span
style='mso-element:field-separator'>4/10/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>1<span style='color:windowtext;
text-transform:uppercase;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 _Toc526853755 \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'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700350035000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'><span
style='text-transform:uppercase;font-weight:normal'>
2<span
style='color:windowtext;text-transform:uppercase;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 _Toc526853756 \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'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700350036000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'><span
style='text-transform:uppercase;font-weight:normal'>
3<span
style='color:windowtext;text-transform:uppercase;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 _Toc526853757 \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'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700350037000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'><span
style='text-transform:uppercase;font-weight:normal'>
3.1<span
style='color:windowtext;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1'> 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 _Toc526853758 \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'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700350038000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
3.2<span
style='color:windowtext;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1'> 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 _Toc526853759 \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'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700350039000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
3.3<span
style='color:windowtext;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1'> 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 _Toc526853760 \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'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700360030000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
3.4<span
style='color:windowtext;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1'> 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 _Toc526853761 \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'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700360031000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
3.5<span
style='color:windowtext;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1'> 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 _Toc526853762 \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'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700360032000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
3.6<span
style='color:windowtext;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1'> 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 _Toc526853763 \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'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700360033000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
3.7<span
style='color:windowtext;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1'> 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 _Toc526853764 \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'>8<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700360034000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
4<span
style='color:windowtext;text-transform:uppercase;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 _Toc526853765 \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'>8<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700360035000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'><span
style='text-transform:uppercase;font-weight:normal'>
4.1<span
style='color:windowtext;text-decoration:none;text-underline:none'><span
style='mso-tab-count:1'> 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 _Toc526853766 \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'>8<span style='color:windowtext;display:none;
mso-hide:screen;text-decoration:none;text-underline:none'>
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003500320036003800350033003700360036000000
<span style='color:windowtext;
display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
style='mso-element:field-end'>
<span style='mso-bookmark:
_Toc526853573'>1
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.
<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:-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 thus 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'>·
Extensible.
<span style='mso-bookmark:
_Toc526853575'>3
Specification
This section describes the protocol, including the
operations between clients and the format of the presence notifications.
<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.
<span style='mso-bookmark:
_Toc526853577'>3.2
Groups
A group is a namespace containing a set of online
users. Every online user will 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, suppose all the people working in the Frob
Testing Division of Bobs Frobs Inc, may elect to be in the ftc.bobco
group. The manager of FTC might also
elect to be in the management.bobco group so they 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 group, knowing this wont bog down the entire online world.
<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:-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.
<span style='mso-bookmark:
_Toc526853579'>3.4
Example Exchange
Note: see sections 3.5
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500320035003600330034003400340037000000
& 3.6
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
User: Frodo at hitch-hikers
Groups: |hitch-hikers|
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:-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 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)
&& contains(Groups, |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 group.<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
Groups: |hitch-hikers|
User: *
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(Groups, |hitch-hikers|)
&&
(User == Zaphod || User == *)
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: reply cafebabe12345
Presence-Protocol: 1000
User: Zaphod at hitch-hikers
Groups: |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
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
User: Zaphod at hitch-hikers
Groups: |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'>
<a
name="_Toc526853762"><span
style='mso-bookmark:_Ref525634447'>3.5<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="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'>
Groups
<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 group) without generating redundant Presence-Infos
from other clients in the group.
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
<a
name="_Toc526853763"><span
style='mso-bookmark:_Ref525634448'>3.6<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="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 users 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'>
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'>
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 easily use the
contains function to test for particular groups without having to handle
three cases (ie 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="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.
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'>
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="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'>
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="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 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
<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'>
<span style='mso-bookmark:
_Toc526853582'>3.7
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) cant 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 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.
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.
<span style='mso-bookmark:
_Toc526853583'>4
References
Thanks to David Arnold for providing the initial set of
links that these references are based on.
<span style='mso-bookmark:
_Toc526853584'>4.1
Other Presence Protocols
4.1.1
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.
4.1.2
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.
4.1.3
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
4.1.4
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