diff --git a/xep-0191.xml b/xep-0191.xml index 99fbefd3..1caeddd9 100644 --- a/xep-0191.xml +++ b/xep-0191.xml @@ -10,7 +10,7 @@ This document specifies an XMPP protocol extension for simple communications blocking. &LEGALNOTICE; 0191 - Proposed + Experimental Standards Track Standards JIG @@ -22,6 +22,12 @@ None blocking &stpeter; + + 0.3 + 2006-10-16 + psa +

Specified relationship to privacy lists, JID matching rules, server handling of outbound presence on block and unblock, handling of directed presence, syntax of block element.

+
0.2 2006-08-30 @@ -47,15 +53,28 @@

First draft.

- -

&rfc3921; includes an XMPP protocol extension for communications blocking. Unfortunately, because that extension (privacy lists) is quite complex, it has not been widely implemented in servers and has been implemented virtually not at all in clients. This is problematic, since the ability to block communications from selected users is an important feature for an instant messaging system (and is required by &rfc2779;). However, the full power of privacy lists is not needed in order to block communications, so this document proposes a much simpler blocking protocol that meets the requirement specified in RFC 2779 and can be implemented much more easily in Jabber/XMPP clients and servers.

+ +

&rfc3921; includes an XMPP protocol extension for communications blocking, which has since been moved to &xep0016;. Unfortunately, because the privacy lists extension is quite complex, it has not been widely implemented in servers and has been implemented virtually not at all in clients. This is problematic, since the ability to block communications with selected users is an important feature for an instant messaging system (and is required by &rfc2779;). However, the full power of privacy lists is not needed in order to block communications, so this document proposes a much simpler blocking protocol that meets the requirement specified in RFC 2779 and can be implemented much more easily in Jabber/XMPP clients and servers.

- +

The requirements for simple communications blocking are straightforward:

    -
  1. A user must be able to block communications from a specific contact.
  2. +
  3. A user must be able to block communications with a specific contact.
  4. A user should be able to determine which contacts are blocked.
  5. -
  6. A user should be able to unblock communications from a specific contact.
  7. +
  8. A user should be able to unblock communications with a specific contact.
  9. +
+
+ +

The simple communications blocking protocol specified herein is intended to be a user-friendly "front end" to a subset of the functionality defined by the privacy lists protocol. If a service deploys both privacy lists and simple communications blocking, both protocols MUST use the same back-end data store.

+

Wherever possible, this document attempts to define a protocol that is fully consistent with XEP-0016. If a particular aspect of functionality (e.g., stanza processing or JID matching rules) is not specified herein, the relevant text in XEP-0016 shall be taken to apply.

+
+ +

Matching of JIDs as specified in the 'jid' attribute of the <item/> element SHOULD proceed in the following order (this is consistent with XEP-0016):

+
    +
  1. <user@domain/resource> (only that resource matches)
  2. +
  3. <user@domain> (any resource matches)
  4. +
  5. <domain/resource> (only that resource matches)
  6. +
  7. <domain> (the domain itself matches, as does any user@domain, domain/resource, or address containing a subdomain)
@@ -78,7 +97,7 @@ ]]> -

In order for a user to block communications from a contact, the user's client shall send an IQ-set with no 'to' address (thus handled by the user's server) containing a <block/> element qualified by the 'http://jabber.org/protocol/blocking' namespace, where the JID to be blocked is encapsulated as the 'jid' attribute of the <item/> child element:

+

In order for a user to block communications with a contact, the user's client shall send an IQ-set with no 'to' address (thus handled by the user's server) containing a <block/> element qualified by the 'http://jabber.org/protocol/blocking' namespace, where the JID to be blocked is encapsulated as the 'jid' attribute of the <item/> child element:

@@ -90,15 +109,16 @@ ]]> -

(Standard XMPP stanza errors apply; see &xmppcore; and &xep0086;.)

+

If the <block/> element does not contain at least one <item/> child element, the server MUST return a &badrequest; error. Other standard XMPP stanza errors also apply; see &xmppcore; and &xep0086;.

Note: The <block/> element MAY contain more than one <item/> child.

-

Once the user has blocked communications from the contact, the user's server MUST NOT deliver any XML stanzas from the contact to the user.

-

If the contact attempts to send a stanza to the user (i.e., an inbound stanza from the user's perspective), the user's server shall return an error according to the following rules:

+

When the user blocks communications with the contact, the user's server MUST send unavailable presence information to the contact (but only if the contact is allowed to receive presence notifications from the user in accordance with the rules defined in RFC 3921).

+

Once the user has blocked communications with the contact, the user's server MUST NOT deliver any XML stanzas from the contact to the user. The block remains in force until the user subsequently unblocks commmunications with the contact (i.e., the duration of the block is potentially unlimited and applies across sessions).

+

If the contact attempts to send a stanza to the user (i.e., an inbound stanza from the user's perspective), the user's server shall handle the stanza according to the following rules:

    -
  • For presence stanzas, it is NOT RECOMMENDED to return an error.
  • -
  • For message stanzas, the server MAY return an error, which SHOULD be &unavailable;.
  • +
  • For message stanzas and presence stanzas (including notifications, subscriptions, and probes), the user's server MUST NOT respond and MUST NOT return an error.
  • For IQ stanzas, the server MUST return an error, which SHOULD be &unavailable;.
+

If the foregoing suggestions are followed, the user will appear offline to the contact.

If the user attempts to send an outbound stanza to the contact, the user's server MUST NOT route the stanza to the contact but instead MUST return a ¬acceptable; error containing an application-specific error condition of <blocked/> qualified by the 'http://jabber.org/protocol/blocking#errors' namespace:

@@ -135,7 +155,7 @@

A client SHOULD retrieve the block list after authenticating with its server.

-

In order for a user to unblock communications from a contact, the user's client shall send an IQ-set with no 'to' address (thus handled by the user's server) containing an <unblock/> element qualified by the 'http://jabber.org/protocol/blocking' namespace, where the JID to be unblocked is encapsulated as the 'jid' attribute of the <item/> child element:

+

In order for a user to unblock communications with a contact, the user's client shall send an IQ-set with no 'to' address (thus handled by the user's server) containing an <unblock/> element qualified by the 'http://jabber.org/protocol/blocking' namespace, where the JID to be unblocked is encapsulated as the 'jid' attribute of the <item/> child element:

@@ -147,10 +167,11 @@ ]]> -

Once the user has unblocked communications from the contact, the user's server MUST deliver any XML stanzas from the contact to the user.

+

When the user unblocks communications with the contact, the user's server MUST send the user's current presence information to the contact (but only if the contact is allowed to receive presence notifications from the user in accordance with the rules defined in RFC 3921).

+

After the user has unblocked communications with the contact, the user's server MUST deliver any subsequent XML stanzas from the contact to the user.

-

In order for a user to unblock communications from all contacts, the user's client shall send an IQ-set with no 'to' address (thus handled by the user's server) containing an empty <unblock/> element qualified by the 'http://jabber.org/protocol/blocking' namespace:

+

In order for a user to unblock communications with all contacts, the user's client shall send an IQ-set with no 'to' address (thus handled by the user's server) containing an empty <unblock/> element qualified by the 'http://jabber.org/protocol/blocking' namespace:

@@ -160,7 +181,7 @@ ]]> -

Once the user has unblocked communications from all contacts, the user's server MUST deliver any XML stanzas from those contacts to the user.

+

Once the user has unblocked communications with all contacts, the user's server MUST deliver any XML stanzas from those contacts to the user.

@@ -192,7 +213,7 @@ - +