git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@3483 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
Peter Saint-Andre 2009-10-01 20:01:48 +00:00
parent 0aac45b14c
commit b2d5676a29
1 changed files with 125 additions and 22 deletions

View File

@ -50,8 +50,8 @@
&ralphm;
<revision>
<version>1.13rc5</version>
<date>in progress, 2009-09-29</date>
<version>1.13rc6</version>
<date>in progress, 2009-10-01</date>
<initials>psa</initials>
<remark>
<ul>
@ -62,10 +62,11 @@
<li>Removed multiple node discovery since it depended on the deprecated Service Discovery Publishing feature.</li>
<li>Defined "room" value for itemreply config option.</li>
<li>Added optional 'publisher' attribute to &lt;item/&gt; element.</li>
<li>Added optional 'timestamp' attribute to &lt;item/&gt; element.</li>
<li>Added optional &lt;redirect/&gt; child to &lt;delete/&gt; element.</li>
<li>Clarified meaning of filtered notifications (they are based on NodeIDs, not payload namespaces).</li>
<li>Added pubsub-on-a-jid service discovery feature for explicit discovery that an IM and presence account also functions as a virtual pubsub service.</li>
<li>Added purge_offline node configuration option for purging the node when the owner goes offline, for use in certain extended presence applications.</li>
<li>Added purge_offline node configuration option for purging the node when the relevant publisher goes offline, for use in certain extended presence applications.</li>
<li>Added item_expire node configuration option for automatically removing items after a certain number of seconds.</li>
<li>Added notification_type node configuration option for defining which value of the &lt;message/&gt; type attribute shall be used for notifications.</li>
<li>Added retrieve-default-sub feature for retrieving default subscription configuration from a node (as you can retrieve default node configuration from the service).</li>
@ -473,7 +474,7 @@ And by opposing end them?
<ul>
<li>An entity MUST be able to publish events to a service such that all subscribers to a node receive notification of the event. See <link url='#publisher-publish'>Publish an Item to a Node</link>.</li>
<li>An entity MUST be able to subscribe to a node (or be informed that subscription is not allowed). See <link url='#subscriber-subscribe'>Subscribe to a Node</link>.</li>
<li>An entity MUST be allowed to be affiliated with a node. Allowable affiliations are owner, publisher, none, and outcast. Implementations MUST support affiliations of owner and none, and MAY support affiliations of outcast and publisher. See <link url='#affiliations'>Affiliations</link>.</li>
<li>An entity MUST be allowed to be affiliated with a node. Allowable affiliations are owner, publisher, none, and outcast. Implementations MUST support affiliations of owner and none, and MAY support affiliations of outcast, publisher, and publish-only. See <link url='#affiliations'>Affiliations</link>.</li>
<li>An entity MUST be allowed to query the pubsub service (or a specific node) to determine what optional features of this specification the service (or node) implements. This query MUST use the Service Discovery (disco#info) protocol. See <link url='#entity-info'>Discover Node Information</link>.</li>
</ul>
@ -504,7 +505,7 @@ And by opposing end them?
<th>Subscribe</th>
<th>Retrieve Items</th>
<th>Publish Item</th>
<th>Delete Item</th>
<th>Delete Single Item</th>
<th>Configure Node</th>
<th>Delete Node</th>
<th>Purge Node</th>
@ -524,10 +525,20 @@ And by opposing end them?
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes *</td>
<td>No</td>
<td>No</td>
<td>Yes *</td>
</tr>
<tr>
<td>Publish-Only</td>
<td>No</td>
<td>No</td>
<td>Yes</td>
<td>No *</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>Yes/No *</td>
<td>No *</td>
</tr>
<tr>
<td>Member</td>
@ -560,7 +571,7 @@ And by opposing end them?
<td>No</td>
</tr>
</table>
<p>* Note: A service MAY allow any publisher to delete any item once it has been published to that node instead of allowing only the original publisher to remove it.</p>
<p>* Note: A service MAY allow any publisher to delete / purge any item once it has been published to that node instead of allowing only the original publisher to remove it. This behavior is NOT RECOMMENDED for the publish-only affiliation, which SHOULD be allowed to delete only items that the publish-only entity has published.</p>
<p>The ways in which an entity changes its affiliation with a node are well-defined. Typically, action by an owner is required to make an affiliation state transition. Affiliation changes and their triggering actions are specified in the following table.</p>
<table caption='Affiliation State Chart'>
<tr>
@ -942,7 +953,7 @@ And by opposing end them?
<tr><td>pubsub#language</td><td>Language</td></tr>
<tr><td>pubsub#publisher</td><td>Publisher</td></tr>
<tr><td>pubsub#title</td><td>Title</td></tr>
<tr><td>pubsub#type</td><td>Type <note>The pubsub type SHOULD be the namespace that defines the payload (such as 'http://www.w3.org/2005/Atom'), if payloads are supported.</note></td></tr>
<tr><td>pubsub#type</td><td>Type <note>The pubsub type is the namespace that defines the payload (such as 'http://www.w3.org/2005/Atom'), if payloads are supported.</note></td></tr>
</table>
</section2>
@ -1124,7 +1135,7 @@ And by opposing end them?
to='francisco@denmark.lit'
id='affil2'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<affiliations node='node6'>
<affiliations>
<affiliation node='node6' affiliation='owner'/>
</affiliations>
</pubsub>
@ -2667,6 +2678,43 @@ And by opposing end them?
</message>
]]></example>
</section4>
<section4 topic='Item Publisher' anchor='publisher-publish-success-publisher'>
<p>If configured to do so, the service can include the pubisher of the item when it generates notifications.</p>
<example caption='Service Notifies Subscribers'><![CDATA[
<message from='pubsub.shakespeare.lit' to='francisco@denmark.lit' id='foo'>
<event xmlns='http://jabber.org/protocol/pubsub#event'>
<items node='princely_musings'>
<item id='ae890ac52d0df67ed7cfdf51b644e901'
publisher='hamlet@denmark.lit'>
[ ... ENTRY ... ]
</item>
</items>
</event>
</message>
]]></example>
<p>The value of the 'publisher' attribute MUST be generated by the service, not accepted by the service in the published item, since allowing the publisher to assert its JID would open the possibility of spoofing.</p>
<p>The JID stamped by the service can be either (1) the full JID &LOCALFULL; of the publisher as taken the 'from' attribute of the IQ-set used to publish the item or (2) the bare JID &LOCALBARE; of the publisher as derived from a formal affiliation in the explicit list of whitelisted publishers.</p>
</section4>
<section4 topic='Item Timestamp' anchor='publisher-publish-success-timestamp'>
<p>If configured to do so, the service can include the timestamp of the item when it generates notifications.</p>
<example caption='Service Notifies Subscribers'><![CDATA[
<message from='pubsub.shakespeare.lit' to='francisco@denmark.lit' id='foo'>
<event xmlns='http://jabber.org/protocol/pubsub#event'>
<items node='princely_musings'>
<item id='ae890ac52d0df67ed7cfdf51b644e901'
publisher='hamlet@denmark.lit'
timestamp='2003-12-13T18:30:09Z'>
[ ... ENTRY ... ]
</item>
</items>
</event>
</message>
]]></example>
<p>The value of the 'timestamp' attribute MUST conform to the dateTime format specified in XEP-0082, in UTC.</p>
<p>The value of the 'timestamp' attribute MUST be generated by the service, not accepted by the service in the published item.</p>
<p>The combination of the ItemID and item timestamp MUST be unique, such that a subsequent publish with the same ItemID MUST have a different (later) value of the 'timestamp' attribute than the earlier published item, even at the expense of literal accuracy (thus it is similar to the <cite>modtime</cite> attribute in ACAP &rfc2244;).</p>
<p>However, the 'timestamp' attribute does not provide accurate tracking of the exact chronology of the items published at a node, and a recipient cannot rely on this attribute for versioning, synchronization, or other similar purposes.</p>
</section4>
<section4 topic='Inclusion of Subscription ID' anchor='publisher-publish-success-subid'>
<p>If a single entity is subscribed to a node multiple times, the service SHOULD notate the event notification so that the entity can determine which subscription identifier(s) generated this event. If these notations are included, they MUST use the &xep0131; format and SHOULD be included after the event notification information (i.e., as the last child of the &MESSAGE; stanza).</p>
<example caption='Subscriber receives notated event notification'><![CDATA[
@ -3182,7 +3230,7 @@ And by opposing end them?
from='pubsub.shakespeare.lit'
to='hamlet@denmark.lit/elsinore'
id='create2'>
<error type='auth'>
<error type='modify'>
<not-acceptable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
<unsupported-access-model xmlns='http://jabber.org/protocol/pubsub#errors'/>
</error>
@ -3334,7 +3382,7 @@ And by opposing end them?
<value>publishers</value>
</field>
<field var='pubsub#purge_offline' type='boolean'
label='Purge all items when owner goes offline?'>
label='Purge all items when the relevant publisher goes offline?'>
<value>0</value>
</field>
<field var='pubsub#max_payload_size' type='text-single'
@ -3526,7 +3574,7 @@ And by opposing end them?
from='pubsub.shakespeare.lit'
to='hamlet@denmark.lit/elsinore'
id='config2'>
<error type='cancel'>
<error type='modify'>
<not-acceptable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
</error>
</iq>
@ -3675,7 +3723,7 @@ And by opposing end them?
<value>publishers</value>
</field>
<field var='pubsub#purge_offline' type='boolean'
label='Purge all items when owner goes offline?'>
label='Purge all items when the relevant publisher goes offline?'>
<value>0</value>
</field>
<field var='pubsub#max_payload_size' type='text-single'
@ -4384,7 +4432,7 @@ And by opposing end them?
]]></example>
</section4>
<section4 topic='Success Case' anchor='owner-affiliations-retrieve-success'>
<p>If no error occurs, the service MUST return the list of entities whose affiliation is "owner", "publisher", or "outcast" (it MUST NOT return entities whose affiliation is "none").</p>
<p>If no error occurs, the service MUST return the list of entities whose affiliation is "owner", "publisher", "publish-only", or "outcast" (it MUST NOT return entities whose affiliation is "none").</p>
<example caption='Service returns list of affiliated entities'><![CDATA[
<iq type='result'
from='pubsub.shakespeare.lit'
@ -4495,7 +4543,7 @@ And by opposing end them?
]]></example>
</section5>
<section5 topic='Affiliation Not Supported' anchor='owner-affiliations-nosuchaffil'>
<p>If the node or service does not support the requested affiliation, it MUST return a &feature; error, specifying a pubsub-specific error condition of &lt;unsupported/&gt; and a feature of "member-affiliation", "outcast-affiliation", or "publisher-affiliation" as appropriate.</p>
<p>If the node or service does not support the requested affiliation, it MUST return a &feature; error, specifying a pubsub-specific error condition of &lt;unsupported/&gt; and a feature of "member-affiliation", "outcast-affiliation", "publisher-affiliation", or "publish-only-affiliation" as appropriate.</p>
<example caption='Node or service does not support the requested affiliation'><![CDATA[
<iq type='error'
from='pubsub.shakespeare.lit'
@ -4898,6 +4946,12 @@ And by opposing end them?
<td>OPTIONAL</td>
<td><link url='#publisher-publish-options'>Publishing Options</link></td>
</tr>
<tr>
<td>publish-only-affiliation</td>
<td>The publish-only affiliation is supported.</td>
<td>OPTIONAL</td>
<td><link url='#affiliations'>Affiliations</link></td>
</tr>
<tr>
<td>publisher-affiliation</td>
<td>The publisher affiliation is supported.</td>
@ -5037,7 +5091,45 @@ And by opposing end them?
</section2>
<section2 topic='Temporary Subscriptions' anchor='impl-tempsub'>
<p>Implementations of pubsub MAY enable an entity to subscribe to a node temporarily, i.e., only for as long as the subscriber is online in its current presence session. To subscribe temporarily, the subscriber sets the "pubsub#expire" subscription configuration option to a value of "presence". The service will then automatically cancel the subscription when it receives presence of type "unavailable" from the subscriber.</p>
<p>An implementation MAY enable an entity to subscribe to a node temporarily, i.e., only for as long as the subscriber is online in its current presence session. To subscribe temporarily, the subscriber MUST set the "pubsub#expire" subscription configuration option to a literal value of "presence".</p>
<example caption='A Temporary Subscription'><![CDATA[
<iq type='set'
from='francisco@denmark.lit/barracks'
to='pubsub.shakespeare.lit'
id='lease3'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<options node='princely_musings' jid='francisco@denmark.lit'>
<x xmlns='jabber:x:data' type='submit'>
<field var='FORM_TYPE' type='hidden'>
<value>http://jabber.org/protocol/pubsub#subscribe_options</value>
</field>
...
<field var='pubsub#expire'><value>presence</value></field>
...
</x>
</options>
</pubsub>
</iq>
]]></example>
<p>The service will then automatically cancel the subscription when it receives presence of type "unavailable" from the subscriber.</p>
<p>An implementation MAY enable the node owner to force all subscriptions to be temporary, which is useful for nodes that are also configured to use presence-based delivery. This setting uses the "pubsub#tempsub" node configuration option set to a value of true.</p>
<example caption='Owner sets all subscriptions to temporary'><![CDATA[
<iq type='set'
from='hamlet@denmark.lit/elsinore'
to='pubsub.shakespeare.lit'
id='configtemp'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<configure>
<x xmlns='jabber:x:data' type='submit'>
<field var='FORM_TYPE' type='hidden'>
<value>http://jabber.org/protocol/pubsub#node_config</value>
</field>
<field var='pubsub#tempsub'><value>true</value></field>
</x>
</configure>
</pubsub>
</iq>
]]></example>
</section2>
<section2 topic='Presence-Based Delivery of Events' anchor='impl-presence'>
@ -5045,7 +5137,7 @@ And by opposing end them?
</section2>
<section2 topic='IQ Notifications' anchor='impl-iqnotify'>
<p>If the pubsub service supports presence-based delivery and a node is configured to enable such delivery, the service MAY offer a value of "iq" for the "pubsub#notification_type" node configuration option. If this value is chosen, the service shall deliver notifications in XMPP IQ stanzas instead of in XMPP message stanzas. Because IQ stanzas are addressed to full JIDs &LOCALFULL;, if the service does not know the full JID of a given subscriber then it MAY send notifications to the bare JID &LOCALBARE; of the subscriber via the usual message stanza, or MAY not send a notification at all. The IQ stanza containing a notification shall be of type "set", and in accordance with the semantics of the IQ stanza defined in <cite>RFC 3920</cite> the recipient MUST return either an IQ stanza of type "result" or an IQ stanza of type "error". An example follows</p>
<p>If the pubsub service supports presence-based delivery and a node is configured to enable such delivery, the service MAY offer a value of "iq" for the "pubsub#notification_type" node configuration option. If this value is chosen, the service shall deliver notifications in XMPP IQ stanzas instead of in XMPP message stanzas. Because IQ stanzas are addressed to full JIDs &LOCALFULL;, if the service does not know the full JID of a given subscriber then it SHOULD NOT send a notification at all (just as it would not for presence-based delivery via &MESSAGE; stanzas). The IQ stanza containing a notification shall be of type "set", and in accordance with the semantics of the IQ stanza defined in <cite>RFC 3920</cite> the recipient MUST return either an IQ stanza of type "result" or an IQ stanza of type "error". An example follows</p>
<example caption='Service Notifies Subscriber via IQ'><![CDATA[
<iq from='pubsub.shakespeare.lit'
id='jc9jn253'
@ -5751,6 +5843,11 @@ xmpp:pubsub.shakespeare.lit?pubsub;action=retrieve;node=princely_musings;item=ae
<desc>Publication with publish options is supported.</desc>
<doc>XEP-0060</doc>
</var>
<var>
<name>http://jabber.org/protocol/pubsub#publish-only-affiliation</name>
<desc>The publish-only affiliation is supported.</desc>
<doc>XEP-0060</doc>
</var>
<var>
<name>http://jabber.org/protocol/pubsub#publisher-affiliation</name>
<desc>The publisher affiliation is supported.</desc>
@ -6024,6 +6121,9 @@ xmpp:pubsub.shakespeare.lit?pubsub;action=retrieve;node=princely_musings;item=ae
<field var='pubsub#description'
type='text-single'
label='A description of the node'/>
<field var='pubsub#item_expire'
type='text-single'
label='Number of seconds after which to automatically purge items'/>
<field var='pubsub#itemreply'
type='list-single'
label='Whether owners or publisher should receive replies to items'>
@ -6098,7 +6198,7 @@ xmpp:pubsub.shakespeare.lit?pubsub;action=retrieve;node=princely_musings;item=ae
</field>
<field var='pubsub#purge_offline'
type='boolean'
label='Whether to purge all items when the node owner goes offline'/>
label='Whether to purge all items when the relevant publisher goes offline'/>
<field var='pubsub#roster_groups_allowed'
type='list-multi'
label='The roster group(s) allowed to subscribe and retrieve items'/>
@ -6115,9 +6215,9 @@ xmpp:pubsub.shakespeare.lit?pubsub;action=retrieve;node=princely_musings;item=ae
<value>on_sub_and_presence</value>
</option>
</field>
<field var='pubsub#item_expire'
type='text-single'
label='Number of seconds after which to automatically purge items'/>
<field var='pubsub#tempsub'
type='boolean'
label='Whether to make all subscriptions temporary, based on subscriber presence'/>
<field var='pubsub#subscribe' type='boolean'
label='Whether to allow subscriptions'>
<value>1</value>
@ -6312,6 +6412,7 @@ xmpp:pubsub.shakespeare.lit?pubsub;action=retrieve;node=princely_musings
<xs:enumeration value='outcast'/>
<xs:enumeration value='owner'/>
<xs:enumeration value='publisher'/>
<xs:enumeration value='publish-only'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
@ -6537,6 +6638,7 @@ xmpp:pubsub.shakespeare.lit?pubsub;action=retrieve;node=princely_musings
<xs:enumeration value='presence-subscribe'/>
<xs:enumeration value='publish'/>
<xs:enumeration value='publish-options'/>
<xs:enumeration value='publish-only-affiliation'/>
<xs:enumeration value='publisher-affiliation'/>
<xs:enumeration value='purge-nodes'/>
<xs:enumeration value='retract-items'/>
@ -6779,6 +6881,7 @@ xmpp:pubsub.shakespeare.lit?pubsub;action=retrieve;node=princely_musings
<xs:enumeration value='outcast'/>
<xs:enumeration value='owner'/>
<xs:enumeration value='publisher'/>
<xs:enumeration value='publish-only'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>