Cisco AJAX XMPP Library: Public Protocol Compliance

Table of Contents

Overview

This document describes the compliance with public protocols supported by the Cisco AJAX XMPP Library. This document only details those specifications that the Cisco AJAX XMPP Library has some level of support for. This document does not discuss compliance with RFC 2616 and its successors; The Cisco AJAX XMPP Library relies on its execution container (e.g. web browser) to support compliance regarding HTTP specifics.

Terminology

The following requirements keywords as used in this document are to be interpreted as described in RFC 2119: "MUST", "SHALL", "REQUIRED"; "MUST NOT", "SHALL NOT"; "SHOULD", "RECOMMENDED"; "SHOULD NOT", "NOT RECOMMENDED"; "MAY", "OPTIONAL".

This document only discusses those protocols for which the Cisco AJAX XMPP Library contains some support for. If an RFC or XEP is not listed, the Cisco AJAX XMPP Library does not contain any explicit support for that protocol. When a protocol is listed, the "Level of Support" column indicates one of the following:

  • Full: All MUSTs, MUST NOTs, SHOULDs, SHOULD NOTs, and MAYs regarding client-side requirements are implemented.
  • Partial: All MUSTs and MUST NOTs are implemented, but other areas of the implementation do not meet all of the requirements. This document is a section that details what implmentation limitations exist for that protocol.

Supported RFCs

The Cisco AJAX XMPP Library provides support the following RFCs:

RFC Level of Support
RFC 6120 XMPP-Core Partial
RFC 6121 XMPP-IM Partial
RFC 6122 XMPP-ADDR Partial

RFC 6120: XMPP-Core

The Cisco AJAX XMPP Library partially supports all sections except for the following:

  • 4.9.3.23. unsupported-feature: A stream error is not generated for unknown mandatory to negotiate features.

  • 7.3.1. Mandatory-to-Negotiate Bind: Resource binding is not required.

  • 11.1. XML restrictions: Restricted XML is ignored.

  • 11.3. Well-Formedness: An <xml-not-well-formed/> error is sent rather than the now required <not-well-formed/> error.

  • 13.8.1. For Authentication Only: The Cisco AJAX XMPP Library does not support

    SCRAM-SHA-1 or SCRAM-SHA-1-PLUS.

RFC 6121: XMPP-IM

The Cisco AJAX XMPP Library partially supports all sections except for the following:

  • 2.1.2.5. Subscription Attribute: The subscription state is assumed to be one of the known states.
  • 5.2.2. Type Attribute: Unknown message types are not treated as "normal"s, they are instead ignored.

RFC 6121 defines new features NOT SUPPORTED in the Cisco AJAX XMPP Library. These include, but are not limited to, the following:

  • 2.6. Roster Versioning: Unsupported
  • 3.1.1. Outbound Subscription Request: The suggested 'id' attribute is not added to a presence subscription request.
  • 3.4. Pre-Approving a Subscription Request: Unsupported
  • 5.1. One To One Chat Sessions: The suggested directed presence when not subscribed to chat recipient.

RFC 6122: XMPP-ADDR

The Cisco AJAX XMPP Library fully supports all sections except for the following:

  • 2. Addresses: The Cisco AJAX XMPP Library does not implement true Stringprep due to performance limitations in JavaScript. Instead, a reasonable attempt is made to prohibit common characters from appearing in the "node" and "domain" portion of the JID; a locale-independent case mapping (to lower case equivalents) is done to the "node" and "domain" portion of the JID.

Supported XEPs

XEP Version Level of Support
XEP-0004: Data Forms 2.9 Partial
XEP-0016: Privacy Lists 1.6 Partial
XEP-0030: Service Discovery 2.4 Partial
XEP-0045: Multi-User Chat 1.24 Partial
XEP-0049: Private XML Storage 1.2 Full
XEP-0060: Publish-Subscribe 1.12 Partial
XEP-0071: XHTML-IM 1.4 Partial
XEP-0077: In-Band Registration 2.3 Partial
XEP-0082: XMPP Date and Time Profiles 1.0 Full
XEP-0085: Chat State Notifications 2.1 Partial
XEP-0090: Legacy Entity Time 1.2 Partial
XEP-0091: Legacy Delayed Delivery 1.4 Full
XEP-0106: JID Escaping 1.1 Partial
XEP-0115: Entity Capabilities 1.5 Full
XEP-0124: BOSH 1.9 Partial
XEP-0128: Service Discovery Extensions 1.0 Partial
XEP-0163: Personal Eventing Protocol 1.2r3 Partial
XEP-0202: Entity Time 2.0 Partial
XEP-0203: Delayed Delivery 2.0 Partial
XEP-0206: XMPP Over BOSH 1.2 Full
XEP-0249: Direct MUC Invitations 1.1 Full

XEP-0004: Data Forms

The Cisco AJAX XMPP Library provides model-level support for data forms of type "cancel", "form", "result" and "submit". Basic validation of <field/> values are supported, with the following limitations:

  • "3.3. Field Types": Values with embedded line endings (n r) are handled in the suggested manner in the xdata form view (XDataFormView). The model will validate values but treats line endings as white space.

XEP-0016: Privacy Lists

The Cisco AJAX XMPP Library fully supports all sections, including blocking by stanza type, except for the following:

Only items with a type of "jid" and an action of "deny" are supported. Blocking by subscription type, roster group or globally is not supported.

XEP-0030: Service Discovery

The Cisco AJAX XMPP Library only implements the following from XEP-0030:

  • "3. Discovering Basic Information about a Jabber Entity": The Cisco AJAX XMPP Library implements all MUSTs and SHOULDs regarding client-side requirements.
  • "4. Discovering the Items Associated with a Jabber Entity": The Cisco AJAX XMPP Library does not provide a public method or API for fetching disco#items. However, it does a "disco walk" (disco#info, disco#items) against the hosting domain upon each successful connect.

XEP-0045: Multi-User Chat

The Cisco AJAX XMPP Library does NOT implement any of the following top-level use cases:

  • "8. Moderator Use Cases"
  • "9. Admin Use Cases"

The Cisco AJAX XMPP Library implements all of the MUSTs and SHOULDs in "7. Occupant User Cases", except as noted below:

  • "7.1.1. Groupchat 1.0 Protocol": The Cisco AJAX XMPP Library always signals its support of MUC; it does not implement the groupchat 1.0 protocol form of entering a room.
  • "7.1.14. Room Logging": The Cisco AJAX XMPP Library does not warn users visually if they enter a logged room; the targeted service implementations have not supported this feature.
  • "7.1.16. Managing Discussion History": The Cisco AJAX XMPP Library does not implement any of the discussion history management features.
  • "7.6. Converting a One-to-One Chat Into a Multi-User Conference": This use case is not implemented.
  • "7.8. Sending a Private Message": This feature is implemented indirectly via traditional one-to-one chat session support; the user may specify the full JID of the remote party, and that the message is "permanently" pre-locked to the given resource.
  • "7.10. Registering with a Room": This feature is not implemented.
  • "7.11. Getting Member List": This feature is not implemented.
  • "7.12. Discovering Reserved Room Nickname": This feature is not implemented; The Cisco AJAX XMPP Library does not attempt to discover a reserved nickname because targeted server implementations have not supported this feature per the protocol.
  • "7.13. Requesting Voice": This feature is not implemented because the targeted service implementations have not implemented it to date.

The Cisco AJAX XMPP Library implements all of the MUSTs and SHOULDs in "10. Owner User Cases", except as noted below:

  • "10.1.4. Requesting a Unique Room Name": This feature is not implemented.
  • "10.3. Granting Ownership Privledges": This feature is not implemented.
  • "10.4. Revoking Ownership Privledges": This feature is not implemented.
  • "10.5. Modifying the Owner List": This feature is not implemented.
  • "10.6. Granting Administrative Privledges": This feature is not implemented.
  • "10.7. Revoking Administrative Privileges": This feature is not implemented.
  • "10.8. Modifying the Admin List": This feature is not implemented.
  • "10.9. Destroying a Room": This feature is not implemented.

The Cisco AJAX XMPP Library implements the following from "17.2.1. IRC Command Mapping" as part of its UI:

  • "/nick <newnick>" to change the user's nickname
  • "/topic <foo>" to change the room's subject

XEP-0060: Publish-Subscribe

The Cisco AJAX XMPP Library Implements the MUSTs and SHOULDs in "6. Subscriber Use Cases", except for the following:

  • "6.1.6. Configuration Required": This is not implemented. Instead, the API user is informed the subscription failed.
  • "6.3. Configure Subscription Options": This is not implemented.
  • "6.4. Request Default Subscription Configuration Options": This is not implemented.
  • "6.5.4. Returning Some Items": Support for XEP-0059: Result Set Management is not implemented, so a partial list is treated as the full list.
  • "6.5.6. Returning Notifications Only": The Cisco AJAX XMPP Library does not implement retrieving individual items by ItemID.
  • "6.5.7. Requesting the Most Recent Items": This is not implemented.
  • "6.5.8. Requesting a Particular Item": This is not implemented.

The Cisco AJAX XMPP Library implements the MUSTs and SHOULDs in "7. Publisher Use Cases", except for the following:

  • "7.1.5. Publishing Options": This is not implemented.
  • "7.2.1. Request": The Cisco AJAX XMPP Library does not include a "notify" attribute as part of the retract.

The Cisco AJAX XMPP Library implements the MUSTs and SHOULDs in "7. Owner Use Cases", except for the following:

  • "8.1.2. Create a Node With Default Configuration": The Cisco AJAX XMPP Library does not support configuration of nodes; creating with all default options is the only implemented behavior.
  • "8.1.3. Create and Configure a Node": This is not implemented.
  • "8.2. Configure a Node": This is not implemented.
  • "8.2. Request Default Node Configuration Options": This is not implemented.
  • "8.5. Purge all Note Items": This is not implemented.
  • "8.6. Manage Subscription Requests": This is not implemented.
  • "8.7. Process Pending Subscription Requests": This is not implemented.
  • "8.8. Manage Subscriptions": This is not implemented.
  • "8.9. Manage Affiliations": This is not implemented.

XEP-0071: XHTML-IM

The Cisco AJAX XMPP Library Implements all MUSTs, MUST NOTs, SHOULDs, SHOULD NOTs, and MAYs with the following exceptions:

  • Any element containing a "href" or "src" attribute that starts with "javascript:" is removed, and its children parented.
  • "6. XHTML-IM Integration Set": The Cisco AJAX XMPP Library implements the subset defined in section 7. Recommended Profile.
  • "8.3 All tags must be complete": The Cisco AJAX XMPP Library will implement this in outgoing xhtml-im.
  • "8.4 Multiple body tags with unique xml:lang": The Cisco AJAX XMPP Library does not implement mutliple body messages.
  • "8.9 Cleaning CDATA": The Cisco AJAX XMPP Library will implement this in outgoing xhtml-im

XEP-0077: In-Band Registration

The Cisco AJAX XMPP Library provides very limited support for In-band registration as follows:

  • "3.1 Entity Registers with a Host": IQ set ONLY is supported.
  • iq:register fields <username/> and <password/> ONLY are supported.
  • Account registration ONLY is supported.

The Cisco AJAX XMPP Library does NOT implement support for the following:

  • "3.1 Entity Registers with a Host": IQ get is NOT supported.
  • "3.2 Entity Cancels an Existing Registration": cancelling a registration is NOT supported.
  • "3.3 User Changes Password": password change is NOT supported.
  • "4. Extensibility": Data Forms for In-band registration are NOT supported.
  • "5. Redirection": is NOT supported.

XEP-0085: Chat State Notifications

The Cisco AJAX XMPP Library Implements all MUSTs, MUST NOTs, SHOULDs, SHOULD NOTs, and MAYs with the following exceptions:

  • "5.5. Use in Groupchat": The Cisco AJAX XMPP Library does not send or process XEP-0085 notifications groupchat/MUC rooms.

XEP-0090: Legacy Entity Time

The Cisco AJAX XMPP Library will respond to legacy entity time requests, but does not provide a method for the API user to query another entity.

XEP-0106: JID Escaping

The Cisco AJAX XMPP Library provides "escapeNode" and "unescapeNode" methods which support thisprotocol. However, the '' is only escaped from the input string if what follows it appears to be the remainder of an escaping sequence. For example:

  • escapeNode("serviceuser") would result in the string "serviceuser"
  • escapeNode("user40service") would result in the string "user5c40service"
  • escapeNode("user52service") would result in the string "user52service"

XEP-0124: BOSH

The Cisco AJAX XMPP Library only implements the following sections from XEP-0124:

  • "7. Initiating a BOSH Session": The "xml:lang" attribute is not provided in the initial body due to a general lack of localization and internationalization support. The Cisco AJAX XMPP Library always uses a "hold" value of "1", meaning that no more than two requests will be made (except as noted in the section regarding "11. Overactivity" below). Otherwise, all MUSTs and SHOULDs regarding client-side requirements are implemented.
  • "8. Sending and Receiving XML Payloads": All MUSTs and SHOULDs regarding client-side requirements are implemented.
  • "9.2. Request acknowledgements": The Cisco AJAX XMPP Library implements this optional section, retaining at most 2 requests back.
  • "10. Inactivity": All MUSTs and SHOULDs regarding client-side requirements are implemented.
  • "11. Overactivity": It is possible to make more than 2 requests in the Cisco AJAX XMPP Library when terminating the session (deviating from "the client SHOULD NOT make more simultaneous requests than specified by the 'requests' attribute..."); this is an exceptionally rare case that can occur if the API user is terminating the session at the exact moment that the Cisco AJAX XMPP Library makes a "long polling" request. Otherwise, all MUSTs and SHOULDs regarding client-side requirements are implemented.
  • "13. Terminating the HTTP Session": The Cisco AJAX XMPP Library implements the MUSTs and SHOULDs in this section, as well as the MAY regarding the sending of <body type='terminate'/>. However, the Cisco AJAX XMPP Library does not provide any stanzas in the request <body/>.
  • "14. Request IDs": The Cisco AJAX XMPP Library implements all MUSTs regarding client-side requirements.

XEP-0128: Service Discovery Extensions

The Cisco AJAX XMPP Library includes the data forms that might be present in a disco#info result to the API user. The sending of data forms as part of disco#info requests to a Cisco AJAX XMPP Library application is not implemented.

XEP-0163: Personal Eventing Protocol

Cisco AJAX XMPP Library implements the MUSTS and MUST NOTs for owners, pubishers, and subscribers, with the following caveats and conditions:

  • "3. Publishing Events": Cisco AJAX XMPP Library supports publishing of items, but does not support the "publish-options" feature of XEP-0060.
  • "4.2 Filtered Subscriptions": Cisco AJAX XMPP Library supports filtered subscriptions by modifying the Client's capabilities when the API user subscribes. Explicit subscriptions are NOT supported.
  • "4.3. Generating Notifications": Cisco AJAX XMPP Library supports the use of Extended Stanza Addressing for indicating the publisher of an item, if such an extension is present and would not override an explicit "publisher" indication in the publish-subscribe item data.
  • "6. Determining Support": Cisco AJAX XMPP Library does not attempt to determine support for PEP before attempting to publish information due to its event- and user-driven architecture. It is assumed that API users are aware of the capabilities of their deployment, or that such discovery is performed by the API user.

XEP-0202: Entity Time

The Cisco AJAX XMPP Library will respond to entity time requests, but does not provide a method for the API user to query another entity.

XEP-0203: Delayed Delivery

The Cisco AJAX XMPP Library does not support the "from" attribute, and therefore does not note the oringial sender of a stanza with this data attached.