rfc4622.txt   rfc5122.txt 
Network Working Group P. Saint-Andre Network Working Group P. Saint-Andre
Request for Comments: 4622 JSF Request for Comments: 5122 XSF
Category: Standards Track July 2006 Obsoletes: 4622 February 2008
Category: Standards Track
Internationalized Resource Identifiers (IRIs) Internationalized Resource Identifiers (IRIs) and
and Uniform Resource Identifiers (URIs) for Uniform Resource Identifiers (URIs) for
the Extensible Messaging and Presence Protocol (XMPP) the Extensible Messaging and Presence Protocol (XMPP)
Status of This Memo Status of This Memo
This document specifies an Internet standards track protocol for the This document specifies an Internet standards track protocol for the
Internet community, and requests discussion and suggestions for Internet community, and requests discussion and suggestions for
improvements. Please refer to the current edition of the "Internet improvements. Please refer to the current edition of the "Internet
Official Protocol Standards" (STD 1) for the standardization state Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited. and status of this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2006).
Abstract Abstract
This document defines the use of Internationalized Resource This document defines the use of Internationalized Resource
Identifiers (IRIs) and Uniform Resource Identifiers (URIs) in Identifiers (IRIs) and Uniform Resource Identifiers (URIs) in
identifying or interacting with entities that can communicate via the identifying or interacting with entities that can communicate via the
Extensible Messaging and Presence Protocol (XMPP). Extensible Messaging and Presence Protocol (XMPP).
This document obsoletes RFC 4622.
Table of Contents Table of Contents
1. Introduction ....................................................3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Terminology ................................................3 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3
2. Use of XMPP IRIs and URIs .......................................4 2. Use of XMPP IRIs and URIs . . . . . . . . . . . . . . . . . . 4
2.1. Rationale ..................................................4 2.1. Rationale . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Form .......................................................4 2.2. Form . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. Authority Component ........................................6 2.3. Authority Component . . . . . . . . . . . . . . . . . . . 6
2.4. Path Component .............................................7 2.4. Path Component . . . . . . . . . . . . . . . . . . . . . . 7
2.5. Query Component ............................................7 2.5. Query Component . . . . . . . . . . . . . . . . . . . . . 8
2.6. Fragment Identifier Component ..............................9 2.6. Fragment Identifier Component . . . . . . . . . . . . . . 9
2.7. Generation of XMPP IRIs/URIs ...............................9 2.7. Generation of XMPP IRIs/URIs . . . . . . . . . . . . . . . 10
2.7.1. Generation Method ...................................9 2.8. Processing of XMPP IRIs/URIs . . . . . . . . . . . . . . . 13
2.7.2. Generation Notes ...................................10 2.9. Internationalization . . . . . . . . . . . . . . . . . . . 16
2.7.3. Generation Example .................................11 3. IANA Registration of xmpp URI Scheme . . . . . . . . . . . . . 16
2.8. Processing of XMPP IRIs/URIs ..............................12 3.1. URI Scheme Name . . . . . . . . . . . . . . . . . . . . . 16
2.8.1. Processing Method ..................................12 3.2. Status . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.8.2. Processing Notes ...................................13 3.3. URI Scheme Syntax . . . . . . . . . . . . . . . . . . . . 17
2.8.3. Processing Example .................................14 3.4. URI Scheme Semantics . . . . . . . . . . . . . . . . . . . 17
2.9. Internationalization ......................................14 3.5. Encoding Considerations . . . . . . . . . . . . . . . . . 17
3. IANA Registration of xmpp URI Scheme ...........................15 3.6. Applications/Protocols That Use This URI Scheme Name . . . 18
3.1. URI Scheme Name ...........................................15 3.7. Interoperability Considerations . . . . . . . . . . . . . 18
3.2. Status ....................................................15 3.8. Security Considerations . . . . . . . . . . . . . . . . . 18
3.3. URI Scheme Syntax .........................................15 3.9. Contact . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.4. URI Scheme Semantics ......................................16 3.10. Author/Change Controller . . . . . . . . . . . . . . . . . 18
3.5. Encoding Considerations ...................................16 3.11. References . . . . . . . . . . . . . . . . . . . . . . . . 18
3.6. Applications/protocols That Use This URI Scheme Name ......16 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18
3.7. Interoperability Considerations ...........................16 5. Security Considerations . . . . . . . . . . . . . . . . . . . 19
3.8. Security Considerations ...................................16 5.1. Reliability and Consistency . . . . . . . . . . . . . . . 19
3.9. Contact ...................................................17 5.2. Malicious Construction . . . . . . . . . . . . . . . . . . 20
3.10. Author/Change Controller .................................17 5.3. Back-End Transcoding . . . . . . . . . . . . . . . . . . . 20
3.11. References ...............................................17 5.4. Sensitive Information . . . . . . . . . . . . . . . . . . 20
4. IANA Considerations ............................................17 5.5. Semantic Attacks . . . . . . . . . . . . . . . . . . . . . 21
5. Security Considerations ........................................17 5.6. Spoofing . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.1. Reliability and Consistency ...............................17 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 21
5.2. Malicious Construction ....................................18 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.3. Back-End Transcoding ......................................18 7.1. Normative References . . . . . . . . . . . . . . . . . . . 21
5.4. Sensitive Information .....................................18 7.2. Informative References . . . . . . . . . . . . . . . . . . 22
5.5. Semantic Attacks ..........................................19 Appendix A. Differences from RFC 4622 . . . . . . . . . . . . . . 25
5.6. Spoofing ..................................................19 Appendix B. Copying Conditions . . . . . . . . . . . . . . . . . 25
6. References .....................................................20
6.1. Normative References ......................................20
6.2. Informative References ....................................20
1. Introduction 1. Introduction
The Extensible Messaging and Presence Protocol (XMPP) is a streaming The Extensible Messaging and Presence Protocol (XMPP) is a streaming
XML technology that enables any two entities on a network to exchange XML technology that enables any two entities on a network to exchange
well-defined but extensible XML elements (called "XML stanzas") at a well-defined but extensible XML elements (called "XML stanzas") at a
rate close to real time. rate close to real time.
As specified in [XMPP-CORE], entity addresses as used in As specified in [XMPP-CORE], entity addresses as used in
communications over an XMPP network must not be prepended with a communications over an XMPP network must not be prepended with a
Uniform Resource Identifier (URI) scheme (as specified in [URI]). Uniform Resource Identifier (URI) scheme (as specified in [URI]).
However, applications external to an XMPP network may need to However, applications external to an XMPP network may need to
identify XMPP entities either as URIs or, in a more modern fashion, identify XMPP entities either as URIs or, in a more modern fashion,
as Internationalized Resource Identifiers (IRIs; see [IRI]). as Internationalized Resource Identifiers (IRIs; see [IRI]).
Examples of such external applications include databases that need to Examples of such external applications include databases that need to
store XMPP addresses and non-native user agents such as web browsers store XMPP addresses and non-native user agents such as web browsers
and calendaring applications that provide interfaces to XMPP and calendaring applications that provide interfaces to XMPP
services. services.
The format for an XMPP address is defined in [XMPP-CORE]. Such an The format for an XMPP address is defined in [XMPP-CORE]. Such an
address may contain nearly any [UNICODE] character and must adhere to address may contain nearly any Unicode character [UNICODE] and must
various profiles of [STRINGPREP]. The result is that an XMPP address adhere to various profiles of stringprep [STRINGPREP]. The result is
is fully internationalizable and is very close to being an IRI that an XMPP address is fully internationalizable and is very close
without a scheme. However, given that there is no freestanding to being an IRI without a scheme. However, given that there is no
registry of IRI schemes, it is necessary to define XMPP identifiers freestanding registry of IRI schemes, it is necessary to define XMPP
primarily as URIs rather than as IRIs, and to register an XMPP URI identifiers primarily as URIs rather than as IRIs, and to register an
scheme instead of an IRI scheme. Therefore, this document does the XMPP URI scheme instead of an IRI scheme. Therefore, this document
following: does the following:
o Specifies how to identify XMPP entities as IRIs or URIs. o Specifies how to identify XMPP entities as IRIs or URIs.
o Specifies how to interact with XMPP entities as IRIs or URIs. o Specifies how to interact with XMPP entities as IRIs or URIs.
o Formally defines the syntax for XMPP IRIs and URIs. o Formally defines the syntax for XMPP IRIs and URIs.
o Specifies how to transform XMPP IRIs into URIs and vice-versa. o Specifies how to transform XMPP IRIs into URIs and vice versa.
o Registers the xmpp URI scheme. o Registers the xmpp URI scheme.
1.1. Terminology 1.1. Terminology
This document inherits terminology from [IRI], [URI], and This document inherits terminology from [IRI], [URI], and
[XMPP-CORE]. [XMPP-CORE].
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
skipping to change at page 4, line 15 skipping to change at page 4, line 15
2. Use of XMPP IRIs and URIs 2. Use of XMPP IRIs and URIs
2.1. Rationale 2.1. Rationale
As described in [XMPP-IM], instant messaging and presence As described in [XMPP-IM], instant messaging and presence
applications of XMPP must handle im: and pres: URIs (as specified by applications of XMPP must handle im: and pres: URIs (as specified by
[CPIM] and [CPP]). However, there are many other applications of [CPIM] and [CPP]). However, there are many other applications of
XMPP (including network management, workflow systems, generic XMPP (including network management, workflow systems, generic
publish-subscribe, remote procedure calls, content syndication, publish-subscribe, remote procedure calls, content syndication,
gaming, and middleware), and these applications do not implement gaming, and middleware), and these applications do not implement
instant messaging and presence semantics. Neither does a generic instant messaging and presence semantics. Furthermore, a generic
XMPP entity implement the semantics of any existing URI scheme, such XMPP entity does not implement the semantics of any existing URI
as the http:, ftp:, or mailto: scheme. Therefore, it is appropriate scheme, such as the http:, ftp:, or mailto: scheme. Therefore, it is
to define a new URI scheme that makes it possible to identify or appropriate to define a new URI scheme that makes it possible to
interact with any XMPP entity (not just instant messaging and identify or interact with any XMPP entity (not just instant messaging
presence entities) as an IRI or URI. and presence entities) as an IRI or URI.
XMPP IRIs and URIs are defined for use by non-native interfaces and XMPP IRIs and URIs are defined for use by non-native interfaces and
applications, and primarily for the purpose of identification rather applications. In order to ensure interoperability on XMPP networks,
than of interaction (on the latter distinction, see Section 1.2.2 of when data is routed to an XMPP entity (e.g., when an XMPP address is
[URI]). In order to ensure interoperability on XMPP networks, when
data is routed to an XMPP entity (e.g., when an XMPP address is
contained in the 'to' or 'from' attribute of an XML stanza) or an contained in the 'to' or 'from' attribute of an XML stanza) or an
XMPP entity is otherwise identified in standard XMPP protocol XMPP entity is otherwise identified in standard XMPP protocol
elements, the entity MUST be addressed as <[node@]domain[/resource]> elements, the entity MUST be addressed as <[node@]domain[/resource]>
(i.e., without a prepended scheme), where the "node identifier", (i.e., without a prepended scheme), where the "node identifier",
"domain identifier", and "resource identifier" portions of an XMPP "domain identifier", and "resource identifier" portions of an XMPP
address conform to the definitions provided in Section 3 of address conform to the definitions provided in Section 3 of
[XMPP-CORE]. [XMPP-CORE].
(Note: For historical reasons, the term "resource identifier" is used Note: For historical reasons, the term "resource identifier" is used
in XMPP to refer to the optional portion of an XMPP address that in XMPP to refer to the optional portion of an XMPP address that
follows the domain identifier and the "/" separator character (for follows the domain identifier and the "/" separator character (for
details, refer to Section 3.4 of [XMPP-CORE]; this use of the term details, refer to Section 3.4 of [XMPP-CORE]); this use of the term
"resource identifier" is not to be confused with the meanings of "resource identifier" is not to be confused with the meanings of
"resource" and "identifier" provided in Section 1.1 of [URI]). "resource" and "identifier" provided in Section 1.1 of [URI].
XMPP IRIs and URIs are defined primarily for the purpose of
identification rather than of interaction (regarding this
distinction, see Section 1.2.2 of [URI]). The "Internet resource"
identified by an XMPP IRI or URI is an entity that can communicate
via XMPP over a network. An XMPP IRI or URI can contain additional
information above and beyond the identified resource; in particular,
as described under Section 2.5 a query component can be included to
specify suggested semantics for an interaction with the identified
resource. It is envisioned that when an XMPP application resolves an
XMPP IRI or URI containing suggested interaction semantics, the
application will generate an XMPP stanza and send it to the
identified resource, where the generated stanza may include user or
application inputs that are consistent with the suggested interaction
semantics (for details, see Section 2.8.1).
2.2. Form 2.2. Form
As described in [XMPP-CORE], an XMPP address used natively on an XMPP As described in [XMPP-CORE], an XMPP address used natively on an XMPP
network is a string of Unicode characters that (1) conforms to a network is a string of Unicode characters that (1) conforms to a
certain set of [STRINGPREP] profiles and [IDNA] restrictions, (2) certain set of stringprep [STRINGPREP] profiles and IDNA restrictions
follows a certain set of syntax rules, and (3) is encoded as [UTF-8]. [IDNA], (2) follows a certain set of syntax rules, and (3) is encoded
The form of such an address can be represented using Augmented as UTF-8 [UTF-8]. The form of such an address can be represented
Backus-Naur Form ([ABNF]) as: using Augmented Backus-Naur Form [ABNF] as:
[ node "@" ] domain [ "/" resource ] [ node "@" ] domain [ "/" resource ]
In this context, the "node" and "resource" rules rely on distinct In this context, the "node" and "resource" rules rely on distinct
profiles of [STRINGPREP], and the "domain" rule relies on the concept profiles of stringprep [STRINGPREP], and the "domain" rule relies on
of an internationalized domain name as described in [IDNA]. (Note: the concept of an internationalized domain name as described in
There is no need to refer to punycode in the IRI syntax itself, since [IDNA]. (Note: There is no need to refer to punycode in the IRI
any punycode representation would occur only inside an XMPP syntax itself, since any punycode representation would occur only
application in order to represent internationalized domain names. inside an XMPP application in order to represent internationalized
However, it is the responsibility of the processing application to domain names. However, it is the responsibility of the processing
convert [IRI] syntax into [IDNA] syntax before addressing XML stanzas application to convert IRI syntax [IRI] into IDNA syntax [IDNA]
to the specified entity on an XMPP network.) before addressing XML stanzas to the specified entity on an XMPP
network.)
Certain characters are allowed in XMPP node identifiers and XMPP
resource identifiers but not in the relevant portion of an IRI or
URI. The characters are as follows:
In node identifiers: [ \ ] ^ ` { | }
In resource identifiers: " < > [ \ ] ^ ` { | }
The node identifier characters are not allowed in userinfo by the
sub-delims rule and the resource identifier characters are not
allowed in segment by the pchar rule. These characters MUST be
percent-encoded when transforming an XMPP address into an XMPP IRI or
URI.
Naturally, in order to be converted into an IRI or URI, an XMPP Naturally, in order to be converted into an IRI or URI, an XMPP
address must be prepended with a scheme (specifically, the xmpp address must be prepended with a scheme (specifically, the xmpp
scheme) and may also need to undergo transformations that adhere to scheme) and may also need to undergo transformations that adhere to
the rules defined in [IRI] and [URI]. Furthermore, in order to the rules defined in [IRI] and [URI]. Furthermore, in order to
enable more advanced interaction with an XMPP entity rather than enable more advanced interaction with an XMPP entity rather than
simple identification, it is desirable to take advantage of simple identification, it is desirable to take advantage of
additional aspects of URI syntax and semantics, such as authority additional aspects of URI syntax and semantics, such as authority
components, query components, and fragment identifier components. components, query components, and fragment identifier components.
Therefore, the ABNF syntax for an XMPP IRI is defined as shown below Therefore, the ABNF syntax for an XMPP IRI is defined as shown below
using Augmented Backus-Naur Form specified by [ABNF], where the using Augmented Backus-Naur Form specified by [ABNF], where the
"ifragment", "ihost", and "iunreserved" rules are defined in [IRI], "ifragment", "ihost", and "iunreserved" rules are defined in [IRI]
the "pct-encoded" rule is defined in [URI], and DQUOTE is defined in and the "pct-encoded" rule is defined in [URI]:
[ABNF]:
xmppiri = "xmpp" ":" ihierxmpp xmppiri = "xmpp" ":" ihierxmpp
[ "?" iquerycomp ] [ "?" iquerycomp ]
[ "#" ifragment ] [ "#" ifragment ]
ihierxmpp = iauthpath / ipathxmpp ihierxmpp = iauthpath / ipathxmpp
iauthpath = "//" iauthxmpp [ "/" ipathxmpp ] iauthpath = "//" iauthxmpp [ "/" ipathxmpp ]
iauthxmpp = inodeid "@" ihost iauthxmpp = inodeid "@" ihost
ipathxmpp = [ inodeid "@" ] ihost [ "/" iresid ] ipathxmpp = [ inodeid "@" ] ihost [ "/" iresid ]
inodeid = *( iunreserved / pct-encoded / nodeallow ) inodeid = *( iunreserved / pct-encoded / nodeallow )
nodeallow = "!" / "$" / "(" / ")" / "*" / "+" / "," / ";" / nodeallow = "!" / "$" / "(" / ")" / "*" / "+" / "," / ";" / "="
"=" / "[" / "\" / "]" / "^" / "`" / "{" / "|" /
"}"
iresid = *( iunreserved / pct-encoded / resallow ) iresid = *( iunreserved / pct-encoded / resallow )
resallow = "!" / DQUOTE / "$" / "&" / "'" / "(" / ")" / resallow = "!" / "$" / "&" / "'" / "(" / ")" /
"*" / "+" / "," / ":" / ";" / "<" / "=" / ">" / "*" / "+" / "," / ":" / ";" / "="
"[" / "\" / "]" / "^" / "`" / "{" / "|" / "}"
iquerycomp = iquerytype [ *ipair ] iquerycomp = iquerytype [ *ipair ]
iquerytype = *iunreserved iquerytype = *iunreserved
ipair = ";" ikey "=" ivalue ipair = ";" ikey "=" ivalue
ikey = *iunreserved ikey = *iunreserved
ivalue = *( iunreserved / pct-encoded ) ivalue = *( iunreserved / pct-encoded )
However, the foregoing syntax is not appropriate for inclusion in the However, the foregoing syntax is not appropriate for inclusion in the
registration of the xmpp URI scheme, since the IANA recognizes only registration of the xmpp URI scheme, since the IANA recognizes only
URI schemes and not IRI schemes. Therefore, the ABNF syntax for an URI schemes and not IRI schemes. Therefore, the ABNF syntax for an
XMPP URI rather than for IRI is defined as shown in Section 3.3 of XMPP URI rather than for IRI is defined as shown in Section 3.3 of
this document (see below under "IANA Registration"). If it is this document. If it is necessary to convert the IRI syntax into URI
necessary to convert the IRI syntax into URI syntax, an application syntax, an application MUST adhere to the mapping procedure specified
MUST adhere to the mapping procedure specified in Section 3.1 of in Section 3.1 of [IRI].
[IRI].
The following is an example of a basic XMPP IRI/URI used for purposes The following is an example of a basic XMPP IRI/URI used for purposes
of identifying a node associated with an XMPP server: of identifying a node associated with an XMPP server:
xmpp:node@example.com xmpp:node@example.com
Descriptions of the various components of an XMPP IRI/URI are Descriptions of the various components of an XMPP IRI/URI are
provided in the following sections. provided in the following sections.
2.3. Authority Component 2.3. Authority Component
As explained in Section 2.8 of this document, in the absence of an As explained in Section 2.8 of this document, in the absence of an
authority component, the processing application would authenticate as authority component, the processing application would authenticate as
a configured user at a configured XMPP server. That is, the a configured user at a configured XMPP server. That is, the
authority component section is unnecessary and should be ignored if authority component section is unnecessary and should be ignored if
the processing application has been configured with a set of default the processing application has been configured with a set of default
credentials. credentials.
In accordance with Section 3.2 of RFC 3986, the authority component In accordance with Section 3.2 of RFC 3986 [URI], the authority
is preceded by a double slash ("//") and is terminated by the next component is preceded by a double slash ("//") and is terminated by
slash ("/"), question mark ("?"), or number sign ("#") character, or the next slash ("/"), question mark ("?"), or number sign ("#")
by the end of the IRI/URI. As explained more fully in Section 2.8.1 character, or by the end of the IRI/URI. As explained more fully in
of this document, the presence of an authority component signals the Section 2.8.1 of this document, the presence of an authority
processing application to authenticate as the node@domain specified component signals the processing application to authenticate as the
in the authority component rather than as a configured node@domain node@domain specified in the authority component rather than as a
(see the Security Considerations section of this document regarding configured node@domain (see the Security Considerations section of
authentication). (While it is unlikely that the authority component this document regarding authentication). (While it is unlikely that
will be included in most XMPP IRIs or URIs, the scheme allows for its the authority component will be included in most XMPP IRIs or URIs,
inclusion, if appropriate.) Thus, the following XMPP IRI/URI the scheme allows for its inclusion, if appropriate.) Thus, the
indicates to authenticate as "guest@example.com": following XMPP IRI/URI indicates to authenticate as
"guest@example.com":
xmpp://guest@example.com xmpp://guest@example.com
Note well that this is quite different from the following XMPP Note well that this is quite different from the following XMPP IRI/
IRI/URI, which identifies a node "guest@example.com" but does not URI, which identifies a node "guest@example.com" but does not signal
signal the processing application to authenticate as that node: the processing application to authenticate as that node:
xmpp:guest@example.com xmpp:guest@example.com
Similarly, using a possible query component of "?message" to trigger Similarly, using a possible query component of "?message" to trigger
an interface for sending a message, the following XMPP IRI/URI an interface for sending a message, the following XMPP IRI/URI
signals the processing application to authenticate as signals the processing application to authenticate as
"guest@example.com" and to send a message to "support@example.com": "guest@example.com" and to send a message to "support@example.com":
xmpp://guest@example.com/support@example.com?message xmpp://guest@example.com/support@example.com?message
skipping to change at page 7, line 43 skipping to change at page 8, line 19
xmpp:example-node@example.com/some-resource xmpp:example-node@example.com/some-resource
Inclusion of a node is optional in XMPP addresses, so the following Inclusion of a node is optional in XMPP addresses, so the following
XMPP IRI/URI simply identifies an XMPP server: XMPP IRI/URI simply identifies an XMPP server:
xmpp:example.com xmpp:example.com
2.5. Query Component 2.5. Query Component
There are many potential use cases for encapsulating information in There are many potential use cases for encapsulating information in
the query component of an XMPP IRI/URI; examples include but are not the query component of an XMPP IRI/URI for the purpose of specifying
limited to: suggested interaction semantics (see Section 2.1); examples include,
but are not limited to:
o sending an XMPP message stanza (see [XMPP-IM]), o sending an XMPP message stanza (see [XMPP-IM]),
o adding a roster item (see [XMPP-IM]), o adding a roster item (see [XMPP-IM]),
o sending a presence subscription (see [XMPP-IM]), o sending a presence subscription (see [XMPP-IM]),
o probing for current presence information (see [XMPP-IM]), o probing for current presence information (see [XMPP-IM]),
o triggering a remote procedure call (see [JEP-0009]),
o triggering a remote procedure call (see [XEP-0009]),
o discovering the identity or capabilities of another entity (see o discovering the identity or capabilities of another entity (see
[JEP-0030]), [XEP-0030]),
o joining an XMPP-based text chat room (see [JEP-0045]), o joining an XMPP-based text chat room (see [XEP-0045]),
o interacting with publish-subscribe channels (see [JEP-0060]), o interacting with publish-subscribe channels (see [XEP-0060]),
o providing a SOAP interface (see [JEP-0072]), and o providing a SOAP interface (see [XEP-0072]), and
o registering with another entity (see [JEP-0077]). o registering with another entity (see [XEP-0077]).
Many of these potential use cases are application specific, and the Many of these potential use cases are application specific, and the
full range of such applications cannot be foreseen in advance given full range of such applications cannot be foreseen in advance given
the continued expansion in XMPP development; however, there is the continued expansion in XMPP development. However, there is
agreement within the Jabber/XMPP developer community that all the agreement within the Jabber/XMPP developer community that all the
uses envisioned to date can be encapsulated via a "query type", uses envisioned to date can be encapsulated via a "query type",
optionally supplemented by one or more "key-value" pairs (this is optionally supplemented by one or more "key-value" pairs (this is
similar to the "application/x-www-form-urlencoded" MIME type similar to the "application/x-www-form-urlencoded" MIME type
described in [HTML]). described in [HTML]).
As an example, an XMPP IRI/URI intended to launch an interface for As an example, an XMPP IRI/URI intended to launch an interface for
sending a message to the XMPP entity "example-node@example.com" might sending a message to the XMPP entity "example-node@example.com" might
be represented as follows: be represented as follows:
skipping to change at page 8, line 48 skipping to change at page 9, line 27
If the processing application does not understand query components or If the processing application does not understand query components or
the specified query type, it MUST ignore the query component and the specified query type, it MUST ignore the query component and
treat the IRI/URI as consisting of, for example, treat the IRI/URI as consisting of, for example,
<xmpp:example-node@example.com> rather than <xmpp:example-node@example.com> rather than
<xmpp:example-node@example.com?query>. If the processing application <xmpp:example-node@example.com?query>. If the processing application
does not understand a particular key within the query component, it does not understand a particular key within the query component, it
MUST ignore that key and its associated value. MUST ignore that key and its associated value.
As noted, there exist many kinds of XMPP applications (both actual As noted, there exist many kinds of XMPP applications (both actual
and potential), and such applications may define query types and keys and potential), and such applications may define query types and keys
for use in the query component portion of XMPP URIs. The Jabber for use in the query component portion of XMPP URIs. The XMPP
Registrar function (see [JEP-0053]) of the Jabber Software Foundation Registrar function (see [XEP-0053]) of the XMPP Standards Foundation
maintains a registry of such query types and keys at maintains a registry of such query types and keys at
<http://www.jabber.org/registrar/querytypes.html>. To help ensure <http://www.xmpp.org/registrar/querytypes.html>. To help ensure
interoperability, any application using the formats defined in this interoperability, any application using the formats defined in this
document SHOULD submit any associated query types and keys to that document SHOULD submit any associated query types and keys to that
registry in accordance with the procedures specified in [JEP-0147]. registry in accordance with the procedures specified in [XEP-0147].
Note: The delimiter between key-value pairs is the ";" character
instead of the "&" character used in many other URI schemes. This
delimiter was chosen in order to avoid problems with escaping of the
& character in HTML and XML applications.
2.6. Fragment Identifier Component 2.6. Fragment Identifier Component
As stated in Section 3.5 of [URI], "The fragment identifier component As stated in Section 3.5 of [URI], "The fragment identifier component
of a URI allows indirect identification of a secondary resource by of a URI allows indirect identification of a secondary resource by
reference to a primary resource and additional identifying reference to a primary resource and additional identifying
information." Because the resource identified by an XMPP IRI/URI information." Because the resource identified by an XMPP IRI/URI
does not make available any media type (see [MIME]) and therefore (in does not make available any media type (see [MIME]) and therefore (in
the terminology of [URI]) no representation exists at an XMPP the terminology of [URI]) no representation exists at an XMPP
resource, the semantics of the fragment identifier component in XMPP resource, the semantics of the fragment identifier component in XMPP
skipping to change at page 9, line 32 skipping to change at page 10, line 15
component included in an XMPP IRI/URI, it MUST ignore the fragment component included in an XMPP IRI/URI, it MUST ignore the fragment
identifier component. identifier component.
2.7. Generation of XMPP IRIs/URIs 2.7. Generation of XMPP IRIs/URIs
2.7.1. Generation Method 2.7.1. Generation Method
In order to form an XMPP IRI from an XMPP node identifier, domain In order to form an XMPP IRI from an XMPP node identifier, domain
identifier, and resource identifier, the generating application MUST identifier, and resource identifier, the generating application MUST
first ensure that the XMPP address conforms to the rules specified in first ensure that the XMPP address conforms to the rules specified in
[XMPP-CORE], including application of the relevant [STRINGPREP]; it [XMPP-CORE], including encoding as a UTF-8 [UTF-8] string and
MUST then concatenate the following: application of the relevant stringprep profiles [STRINGPREP].
Because IRI syntax [IRI] specifies that the characters in an IRI are
the original Unicode characters themselves [UNICODE], when generating
an XMPP IRI the generating application MUST then decode the UTF-8
[UTF-8] characters of a native XMPP address to their original Unicode
form. The generating application then MUST concatenate the
following:
1. The "xmpp" scheme and the ":" character 1. The "xmpp" scheme and the ":" character.
2. Optionally (if an authority component is to be included before 2. Optionally (if an authority component is to be included before
the node identifier), the characters "//", an authority component the node identifier), the characters "//", an authority component
of the form node@domain, and the character "/". of the form node@domain, and the character "/".
3. Optionally (if the XMPP address contained an XMPP "node 3. Optionally (if the XMPP address contained an XMPP "node
identifier"), a string of Unicode characters that conforms to the identifier"), a string of Unicode characters that conforms to the
"inodeid" rule, followed by the "@" character. "inodeid" rule, followed by the "@" character.
4. A string of Unicode characters that conforms to the "ihost" rule. 4. A string of Unicode characters that conforms to the "ihost" rule.
skipping to change at page 10, line 32 skipping to change at page 11, line 22
allowed in resource identifiers, but these characters are used as allowed in resource identifiers, but these characters are used as
delimiters in XMPP IRIs. In addition, the " " ([US-ASCII] space) delimiters in XMPP IRIs. In addition, the " " ([US-ASCII] space)
character is allowed in resource identifiers but prohibited in IRIs. character is allowed in resource identifiers but prohibited in IRIs.
Therefore, all the foregoing characters MUST be percent-encoded when Therefore, all the foregoing characters MUST be percent-encoded when
transforming an XMPP address into an XMPP IRI. transforming an XMPP address into an XMPP IRI.
Consider the following nasty node in an XMPP address: Consider the following nasty node in an XMPP address:
nasty!#$%()*+,-.;=?[\]^_`{|}~node@example.com nasty!#$%()*+,-.;=?[\]^_`{|}~node@example.com
That address would be transformed into the following XMPP IRI: That address would be transformed into the following XMPP IRI (split
into two lines for layout purposes):
xmpp:nasty!%23$%25()*+,-.;=%3F[\]^_`{|}~node@example.com xmpp:nasty!%23$%25()*+,-.;=%3F%5B%5C%5D%5E_%60%7B%7C%7D~node
@example.com
Consider the following repulsive resource in an XMPP address (split Consider the following repulsive resource in an XMPP address (split
into two lines for layout purposes): into two lines for layout purposes):
node@example.com node@example.com
/repulsive !#"$%&'()*+,-./:;<=>?@[\]^_`{|}~resource /repulsive !#"$%&'()*+,-./:;<=>?@[\]^_`{|}~resource
That address would be transformed into the following XMPP IRI (split That address would be transformed into the following XMPP IRI (split
into two lines for layout purposes): into three lines for layout purposes):
xmpp:node@example.com xmpp:node@example.com
/repulsive%20!%23"$%25&'()*+,-.%2F:;<=>%3F%40[\]^_`{|}~resource /repulsive%20!%23%22$%25&'()*+,-.%2F:;%3C=
%3E%3F%40%5B%5C%5D%5E_%60%7B%7C%7D~resource
Furthermore, virtually any character outside the [US-ASCII] range is Furthermore, virtually any character outside the US-ASCII range
allowed in an XMPP address and therefore also in an XMPP IRI, but URI [US-ASCII] is allowed in an XMPP address and therefore also in an
syntax forbids such characters directly and specifies that such XMPP IRI, but URI syntax forbids such characters directly and
characters MUST be percent-encoded. In order to determine the URI specifies that such characters MUST be percent-encoded. In order to
associated determine the URI associated with an XMPP IRI, an application MUST
with an XMPP IRI, an application MUST adhere to the mapping procedure adhere to the mapping procedure specified in Section 3.1 of [IRI].
specified in Section 3.1 of [IRI].
The following table may assist implementors in understanding the
respective encodings and "carrier units" of the identifiers discussed
in this document, namely: (1) native XMPP addresses, (2) IRIs, and
(3) URIs. For details, refer to Section 3.5 of this document as well
as Section 3 of [XMPP-CORE], Section 6.4 of [IRI], and Section 2 of
[URI].
+--------------+-----------+-----------+
| Identifier | Encoding | Units |
+--------------+-----------+-----------+
| XMPP address | UTF-8 | Octets |
+--------------+-----------+-----------+
| IRI | Unicode | 16/32-bit |
| | | values |
+--------------+-----------+-----------+
| URI | Percent- | US-ASCII |
| | encoded | |
| | UTF-8 | |
+--------------+-----------+-----------+
2.7.3. Generation Example 2.7.3. Generation Example
Consider the following XMPP address: Consider the following XMPP address:
<ji&#x159;i@&#x10D;echy.example/v Praze> <ji&#x159;i@&#x10D;echy.example/v Praze>
Note: The string "&#x159;" stands for the Unicode character LATIN Note: The string "&#x159;" stands for the Unicode character LATIN
SMALL LETTER R WITH CARON, and the string "&#x10D;" stands for the SMALL LETTER R WITH CARON, and the string "&#x10D;" stands for the
Unicode character LATIN SMALL LETTER C WITH CARON, following the "XML Unicode character LATIN SMALL LETTER C WITH CARON. The "&#x..." form
Notation" used in [IRI] to represent characters that cannot be is used in this document as a notational device to represent Unicode
rendered in ASCII-only documents (note also that these characters are characters, following the "XML Notation" used in [IRI] to represent
represented in their stringprep canonical form). The '<' and '>' characters that cannot be rendered in ASCII-only documents. An XMPP
IRI MUST contain the Unicode characters themselves, not the
representation in XML Notation (in particular, note that the "#"
character is forbidden in IRI syntax). An XMPP URI MUST properly
escape such characters, as described below. The '<' and '>'
characters are not part of the address itself but are provided to set characters are not part of the address itself but are provided to set
off the address for legibility. For those who do not read Czech, off the address for legibility. (For those who do not understand the
this example could be Anglicized as "george@czech-lands.example/In Czech language, this example could be Anglicized as
Prague". "george@czech-lands.example/In Prague".)
In accordance with the process specified above, the generating In accordance with the process specified above, the generating
application would do the following to generate a valid XMPP IRI from application would do the following to generate a valid XMPP IRI from
this address: this address:
1. Ensure that the XMPP address conforms to the rules specified in 1. Ensure that the XMPP address conforms to the rules specified in
[XMPP-CORE], including application of the relevant [STRINGPREP] [XMPP-CORE], including application of the relevant stringprep
profiles and encoding as a [UTF-8] string. profiles [STRINGPREP] and encoding as a UTF-8 string [UTF-8].
2. Concatenate the following: 2. Concatenate the following:
1. The "xmpp" scheme and the ":" character. 1. The "xmpp" scheme and the ":" character.
2. An "authority component" if included (not shown in this 2. An "authority component" if included (not shown in this
example). example).
3. A string of Unicode characters that represents the XMPP 3. A string of Unicode characters that represents the XMPP
address, transformed in accordance with the "inodeid", address, transformed in accordance with the "inodeid",
"ihost", and "iresid" rules. "ihost", and "iresid" rules.
4. The "?" character followed by a "query component", if 4. The "?" character followed by a "query component" if
appropriate to the application (not shown in this example). appropriate to the application (not shown in this example).
5. The "#" character followed by a "fragment identifier 5. The "#" character followed by a "fragment identifier
component", if appropriate to the application (not shown in component" if appropriate to the application (not shown in
this example). this example).
The result is this XMPP IRI: The result is the following XMPP IRI (note again that, in accordance
with the "XML Notation" used in [IRI], the string "&#x159;" stands
for the Unicode character LATIN SMALL LETTER R WITH CARON and the
string "&#x10D;" stands for the Unicode character LATIN SMALL LETTER
C WITH CARON; an XMPP IRI would contain the Unicode characters
themselves).
<xmpp:ji&#x159;i@&#x10D;echy.example/v%20Praze> <xmpp:ji&#x159;i@&#x10D;echy.example/v%20Praze>
In order to generate a valid XMPP URI from the foregoing IRI, the In order to generate a valid XMPP URI from the foregoing IRI, the
application MUST adhere to the procedure specified in Section 3.1 of application MUST adhere to the procedure specified in Section 3.1 of
[IRI], resulting in the following URI: [IRI], resulting in the following URI:
<xmpp:ji%C5%99i@%C4%8Dechy.example/v%20Praze> <xmpp:ji%C5%99i@%C4%8Dechy.example/v%20Praze>
2.8. Processing of XMPP IRIs/URIs 2.8. Processing of XMPP IRIs/URIs
skipping to change at page 12, line 45 skipping to change at page 14, line 22
"iresid" rules. "iresid" rules.
4. Optionally the query component, if included, using the "?" 4. Optionally the query component, if included, using the "?"
character as a separator. character as a separator.
5. Optionally the fragment identifier component, if included, using 5. Optionally the fragment identifier component, if included, using
the "#" character as a separator. the "#" character as a separator.
At this point, the processing application MUST ensure that the At this point, the processing application MUST ensure that the
resulting XMPP address conforms to the rules specified in resulting XMPP address conforms to the rules specified in
[XMPP-CORE], including application of the relevant [STRINGPREP]. The [XMPP-CORE], including application of the relevant stringprep
processing application then would either (1) complete further XMPP profiles [STRINGPREP]. The processing application then would either
handling itself or (2) invoke a helper application to complete XMPP (1) complete further XMPP handling itself or (2) invoke a helper
handling; such XMPP handling would most likely consist of the application to complete XMPP handling; such XMPP handling would most
following steps: likely consist of the following steps:
1. If not already connected to an XMPP server, connect either as the 1. If not already connected to an XMPP server, connect either as the
user specified in the authority component or as the configured user specified in the authority component or as the configured
user at the configured XMPP server, normally by adhering to the user at the configured XMPP server, normally by adhering to the
XMPP connection procedures defined in [XMPP-CORE]. (Note: The XMPP connection procedures defined in [XMPP-CORE]. (Note: The
processing application SHOULD ignore the authority component if processing application SHOULD ignore the authority component if
it has been configured with a set of default credentials.) it has been configured with a set of default credentials.)
2. Optionally, determine the nature of the intended recipient (e.g., 2. Optionally, determine the nature of the intended recipient (e.g.,
via [JEP-0030]). via [XEP-0030]).
3. Optionally, present an appropriate interface to a user based on 3. Optionally, present an appropriate interface to a user based on
the nature of the intended recipient and/or the contents of the the nature of the intended recipient and/or the contents of the
query component. query component.
4. Generate an XMPP stanza that translates any user or application 4. Generate an XMPP stanza that translates any user or application
inputs into their corresponding XMPP equivalents. inputs into their corresponding XMPP equivalents.
5. Send the XMPP stanza via the authenticated server connection for 5. Send the XMPP stanza via the authenticated server connection for
delivery to the intended recipient. delivery to the intended recipient.
2.8.2. Processing Notes 2.8.2. Processing Notes
It may help implementors to note that the first two steps of "further It may help implementors to note that the first two steps of "further
XMPP handling", as described at the end of Section 2.8.1, are similar XMPP handling", as described at the end of Section 2.8.1, are similar
to HTTP authentication ([HTTP-AUTH]), while the next three steps are to HTTP authentication [HTTP-AUTH], while the next three steps are
similar to the handling of mailto: URIs ([MAILTO]). similar to the handling of mailto: URIs [MAILTO].
As noted in Section 2.7.2 of this document, certain characters are As noted in Section 2.7.2 of this document, certain characters are
allowed in the node identifier, domain identifier, and resource allowed in the node identifier, domain identifier, and resource
identifier portions of a native XMPP address but prohibited by the identifier portions of a native XMPP address but prohibited by the
"inodeid", "ihost", and "iresid" rules of an XMPP IRI. The "inodeid", "ihost", and "iresid" rules of an XMPP IRI. The percent-
percent-encoded octets corresponding to these characters in XMPP IRIs encoded octets corresponding to these characters in XMPP IRIs MUST be
MUST be transformed into the characters allowed in XMPP addresses transformed into the characters allowed in XMPP addresses when
when processing an XMPP IRI for interaction with the represented XMPP processing an XMPP IRI for interaction with the represented XMPP
entity. entity.
Consider the following nasty node in an XMPP IRI: Consider the following nasty node in an XMPP IRI (split into two
lines for layout purposes):
xmpp:nasty!%23$%()*+,-.;=%3F[\]^_`{|}~node@example.com xmpp:nasty!%23$%25()*+,-.;=%3F%5B%5C%5D%5E_%60%7B%7C%7D~node
@example.com
That IRI would be transformed into the following XMPP address: That IRI would be transformed into the following XMPP address:
nasty!#$%()*+,-.;=?[\]^_`{|}~node@example.com nasty!#$%()*+,-.;=?[\]^_`{|}~node@example.com
Consider the following repulsive resource in an XMPP IRI (split into Consider the following repulsive resource in an XMPP IRI (split into
two lines for layout purposes): three lines for layout purposes):
xmpp:node@example.com xmpp:node@example.com
/repulsive%20!%23"$%25&'()*+,-.%2F:;<=>%3F%40[\]^_`{|}~resource /repulsive%20!%23%22$%25&'()*+,-.%2F:;%3C
=%3E%3F%40%5B%5C%5D%5E_%60%7B%7C%7D~resource
That IRI would be transformed into the following XMPP address (split That IRI would be transformed into the following XMPP address (split
into two lines for layout purposes): into two lines for layout purposes):
node@example.com node@example.com
/repulsive !#"$%&'()*+,-./:;<=>?@[\]^_`{|}~resource /repulsive !#"$%&'()*+,-./:;<=>?@[\]^_`{|}~resource
2.8.3. Processing Example 2.8.3. Processing Example
Consider the XMPP URI that resulted from the previous example: Consider the XMPP URI that resulted from the previous example (see
Section 2.7.3):
<xmpp:ji%C5%99i@%C4%8Dechy.example/v%20Praze> <xmpp:ji%C5%99i@%C4%8Dechy.example/v%20Praze>
In order to generate a valid XMPP IRI from that URI, the application In order to generate a valid XMPP IRI from that URI, the application
MUST adhere to the procedure specified in Section 3.2 of [IRI], MUST adhere to the procedure specified in Section 3.2 of [IRI],
resulting in the following IRI: resulting in the following IRI:
<xmpp:ji&#x159;i@&#x10D;echy.example/v%20Praze> <xmpp:ji&#x159;i@&#x10D;echy.example/v%20Praze>
In accordance with the process specified above, the processing In accordance with the process specified above, the processing
application would remove the "xmpp" scheme and ":" character to application would remove the "xmpp" scheme and ":" character to
extract the XMPP address from this XMPP IRI, converting any extract the XMPP address from this XMPP IRI, converting any percent-
percent-encoded octets from the "inodeid", "ihost", and "iresid" encoded octets from the "inodeid", "ihost", and "iresid" rules into
rules into their character equivalents (e.g., "%20" into the space their character equivalents (e.g., "%20" into the space character).
character).
The result is this XMPP address: The result is this XMPP address:
<ji&#x159;i@&#x10D;echy.example/v Praze> <ji&#x159;i@&#x10D;echy.example/v Praze>
2.9. Internationalization 2.9. Internationalization
Because XMPP addresses are [UTF-8] strings and because octets outside Because XMPP addresses are UTF-8 strings [UTF-8] and because octets
the [US-ASCII] range within XMPP addresses can be easily converted to outside the US-ASCII range [US-ASCII] within XMPP addresses can be
percent-encoded octets, XMPP addresses are designed to work well with easily converted to percent-encoded octets, XMPP addresses are
Internationalized Resource Identifiers ([IRI]). In particular, with designed to work well with Internationalized Resource Identifiers
the exceptions of stringprep verification, the conversion of [IRI]. In particular, with the exceptions of stringprep
syntax-relevant [US-ASCII] characters (e.g., "?"), and the conversion verification, the conversion of syntax-relevant US-ASCII characters
of percent-encoded octets from the "inodeid", "ihost", and "iresid" (e.g., "?"), and the conversion of percent-encoded octets from the
rules into their character equivalents (e.g., "%20" into the "inodeid", "ihost", and "iresid" rules into their character
[US-ASCII] space character), an XMPP IRI can be constructed directly equivalents (e.g., "%20" into the US-ASCII space character), an XMPP
by prepending the "xmpp" scheme and ":" character to an XMPP address. IRI can be constructed directly by prepending the "xmpp" scheme and
Furthermore, an XMPP IRI can be converted into URI syntax by adhering ":" character to an XMPP address. Furthermore, an XMPP IRI can be
to the procedure specified in Section 3.1 of [IRI], and an XMPP URI converted into URI syntax by adhering to the procedure specified in
can be converted into IRI syntax by adhering to the procedure Section 3.1 of [IRI], and an XMPP URI can be converted into IRI
specified in Section 3.2 of [IRI], thus ensuring interoperability syntax by adhering to the procedure specified in Section 3.2 of
with applications that are able to process URIs but unable to process [IRI], thus ensuring interoperability with applications that are able
IRIs. to process URIs but unable to process IRIs.
3. IANA Registration of xmpp URI Scheme 3. IANA Registration of xmpp URI Scheme
In accordance with [URI-SCHEMES], this section provides the In accordance with [URI-SCHEMES], this section provides the
information required to register the xmpp URI scheme. information required to register the xmpp URI scheme.
3.1. URI Scheme Name 3.1. URI Scheme Name
xmpp xmpp
3.2. Status 3.2. Status
permanent permanent
3.3. URI Scheme Syntax 3.3. URI Scheme Syntax
The syntax for an xmpp URI is defined below using Augmented The syntax for an xmpp URI is defined below using Augmented Backus-
Backus-Naur Form as specified by [ABNF], where the "fragment", Naur Form as specified by [ABNF], where the "fragment", "host", "pct-
"host", "pct-encoded", and "unreserved" rules are defined in [URI] encoded", and "unreserved" rules are defined in [URI]:
and DQUOTE is defined in [ABNF]:
xmppuri = "xmpp" ":" hierxmpp [ "?" querycomp ] [ "#" fragment ] xmppuri = "xmpp" ":" hierxmpp [ "?" querycomp ] [ "#" fragment ]
hierxmpp = authpath / pathxmpp hierxmpp = authpath / pathxmpp
authpath = "//" authxmpp [ "/" pathxmpp ] authpath = "//" authxmpp [ "/" pathxmpp ]
authxmpp = nodeid "@" host authxmpp = nodeid "@" host
pathxmpp = [ nodeid "@" ] host [ "/" resid ] pathxmpp = [ nodeid "@" ] host [ "/" resid ]
nodeid = *( unreserved / pct-encoded / nodeallow ) nodeid = *( unreserved / pct-encoded / nodeallow )
nodeallow = "!" / "$" / "(" / ")" / "*" / "+" / "," / ";" / nodeallow = "!" / "$" / "(" / ")" / "*" / "+" / "," / ";" / "="
"=" / "[" / "\" / "]" / "^" / "`" / "{" / "|" /
"}"
resid = *( unreserved / pct-encoded / resallow ) resid = *( unreserved / pct-encoded / resallow )
resallow = "!" / DQUOTE / "$" / "&" / "'" / "(" / ")" / resallow = "!" / "$" / "&" / "'" / "(" / ")" /
"*" / "+" / "," / ":" / ";" / "<" / "=" / ">" / "*" / "+" / "," / ":" / ";" / "="
"[" / "\" / "]" / "^" / "`" / "{" / "|" / "}"
querycomp = querytype [ *pair ] querycomp = querytype [ *pair ]
querytype = *( unreserved / pct-encoded ) querytype = *( unreserved / pct-encoded )
pair = ";" key "=" value pair = ";" key "=" value
key = *( unreserved / pct-encoded ) key = *( unreserved / pct-encoded )
value = *( unreserved / pct-encoded ) value = *( unreserved / pct-encoded )
3.4. URI Scheme Semantics 3.4. URI Scheme Semantics
The xmpp URI scheme identifies entities that natively communicate The xmpp URI scheme identifies entities that natively communicate
using the Extensible Messaging and Presence Protocol (XMPP), and is using the Extensible Messaging and Presence Protocol (XMPP), and is
mainly used for identification rather than for resource location. mainly used for identification rather than for resource location.
However, if an application that processes an xmpp URI enables However, if an application that processes an xmpp URI enables
interaction with the XMPP address identified by the URI, it MUST interaction with the XMPP address identified by the URI, it MUST
follow the methodology defined in Section 2 of RFC 4622, Use of XMPP follow the methodology defined in Section 2 of this document, Use of
IRIs and URIs, to reconstruct the encapsulated XMPP address, connect XMPP IRIs and URIs, to reconstruct the encapsulated XMPP address,
to an appropriate XMPP server, and send an appropriate XMPP "stanza" connect to an appropriate XMPP server, and send an appropriate XMPP
(XML fragment) to the XMPP address. (Note: There is no MIME type "stanza" (XML fragment) to the XMPP address. (Note: There is no MIME
associated with the xmpp URI scheme.) type associated with the xmpp URI scheme.)
3.5. Encoding Considerations 3.5. Encoding Considerations
In addition to XMPP URIs, there will also be XMPP Internationalized In addition to XMPP URIs, there will also be XMPP Internationalized
Resource Identifiers (IRIs). Prior to converting an Extensible Resource Identifiers (IRIs). Prior to converting an Extensible
Messaging and Presence Protocol (XMPP) address into an IRI (and in Messaging and Presence Protocol (XMPP) address into an IRI (and in
accordance with [XMPP-CORE]), the XMPP address must be represented as accordance with [XMPP-CORE]), the XMPP address must be represented as
[UTF-8] by the generating application (e.g., by transforming an a string of UTF-8 characters [UTF-8] by the generating application
application's internal representation of the address as a UTF-16 (e.g., by transforming an application's internal representation of
string into a UTF-8 string), and the UTF-8 string must then be the address as a UTF-16 string into a UTF-8 string). Because IRI
prepended with the "xmpp" scheme and ":" character. However, because syntax [IRI] specifies that the characters in an IRI are the original
an XMPP URI must contain only [US-ASCII] characters, the UTF-8 string Unicode characters themselves [UNICODE], when generating an XMPP IRI
of an XMPP IRI must be transformed into URI syntax by adhering to the the generating application MUST decode the UTF-8 characters of a
procedure specified in RFC 3987. native XMPP address to their original Unicode form. Because URI
syntax [URI] specifices that the characters in a URI are US-ASCII
characters [US-ASCII] only, when generating an XMPP URI the
generating application MUST escape the Unicode characters of an XMPP
IRI to US-ASCII characters by adhering to the procedure specified in
RFC 3987.
3.6. Applications/protocols That Use This URI Scheme Name 3.6. Applications/Protocols That Use This URI Scheme Name
The xmpp URI scheme is intended to be used by interfaces to an XMPP The xmpp URI scheme is intended to be used by interfaces to an XMPP
network from non-native user agents, such as web browsers, as well as network from non-native user agents, such as web browsers, as well as
by non-native applications that need to identify XMPP entities as by non-native applications that need to identify XMPP entities as
full URIs or IRIs. full URIs or IRIs.
3.7. Interoperability Considerations 3.7. Interoperability Considerations
There are no known interoperability concerns related to use of the There are no known interoperability concerns related to use of the
xmpp URI scheme. In order to help ensure interoperability, the xmpp URI scheme. In order to help ensure interoperability, the XMPP
Jabber Registrar function of the Jabber Software Foundation maintains Registrar function of the XMPP Standards Foundation maintains a
a registry of query types and keys that can be used in the query registry of query types and keys that can be used in the query
components of XMPP URIs and IRIs, located at components of XMPP URIs and IRIs, located at
<http://www.jabber.org/registrar/querytypes.html>. <http://www.xmpp.org/registrar/querytypes.html>.
3.8. Security Considerations 3.8. Security Considerations
See Section 5 of RFC 4622, Security Considerations. See Section 5 of this document, Security Considerations.
3.9. Contact 3.9. Contact
Peter Saint-Andre [mailto:stpeter@jabber.org, Peter Saint-Andre [mailto:stpeter@jabber.org,
xmpp:stpeter@jabber.org] xmpp:stpeter@jabber.org]
3.10. Author/Change Controller 3.10. Author/Change Controller
This scheme is registered under the IETF tree. As such, the IETF This scheme is registered under the IETF tree. As such, the IETF
maintains change control. maintains change control.
3.11. References 3.11. References
[XMPP-CORE] [XMPP-CORE]
4. IANA Considerations 4. IANA Considerations
This document registers a URI scheme. The registration template can This document obsoletes the URI scheme registration created by RFC
be found in Section 3 of this document. In order to help ensure 4622. The registration template can be found in Section 3 of this
interoperability, the Jabber Registrar function of the Jabber document. In order to help ensure interoperability, the XMPP
Software Foundation maintains a registry of query types and keys that Registrar function of the XMPP Standards Foundation maintains a
can be used in the query components of XMPP URIs and IRIs, located at registry of query types and keys that can be used in the query
<http://www.jabber.org/registrar/querytypes.html>. components of XMPP URIs and IRIs, located at
<http://www.xmpp.org/registrar/querytypes.html>.
5. Security Considerations 5. Security Considerations
Providing an interface to XMPP services from non-native applications Providing an interface to XMPP services from non-native applications
introduces new security concerns. The security considerations introduces new security concerns. The security considerations
discussed in [IRI], [URI], and [XMPP-CORE] apply to XMPP IRIs, and discussed in [IRI], [URI], and [XMPP-CORE] apply to XMPP IRIs, and
the security considerations discussed in [URI] and [XMPP-CORE] apply the security considerations discussed in [URI] and [XMPP-CORE] apply
to XMPP URIs. In accordance with Section 2.7 of [URI-SCHEMES] and to XMPP URIs. In accordance with Section 2.7 of [URI-SCHEMES] and
Section 7 of [URI], particular security considerations are specified Section 7 of [URI], particular security considerations are specified
in the following sections. in the following sections.
5.1. Reliability and Consistency 5.1. Reliability and Consistency
Given that XMPP addresses of the form node@domain.tld are typically Given that XMPP addresses of the form node@domain.tld are typically
created via registration at an XMPP server or provisioned by an created via registration at an XMPP server or provisioned by an
administrator of such a server, it is possible that such addresses administrator of such a server, it is possible that such addresses
may also be unregistered or deprovisioned. Therefore, the XMPP may also be unregistered or deprovisioned. Therefore, the XMPP IRI/
IRI/URI that identifies such an XMPP address may not be reliably and URI that identifies such an XMPP address may not reliably and
consistently associated with the same principal, account owner, consistently be associated with the same principal, account owner,
application, or device. application, or device.
XMPP addresses of the form node@domain.tld/resource are typically XMPP addresses of the form node@domain.tld/resource are typically
even more ephemeral (since a given XMPP resource identifier is even more ephemeral (since a given XMPP resource identifier is
typically associated with a particular, temporary session of an XMPP typically associated with a particular, temporary session of an XMPP
client at an XMPP server); therefore the XMPP IRI/URI that identifies client at an XMPP server). Therefore, the XMPP IRI/URI that
such an XMPP address probably will not reliably and consistently be identifies such an XMPP address probably will not reliably and
associated with the same session. However, the procedures specified consistently be associated with the same session. However, the
in Section 10 of [XMPP-CORE] effectively eliminate any potential procedures specified in Section 10 of [XMPP-CORE] effectively
confusion that might be introduced by the lack of reliability and eliminate any potential confusion that might be introduced by the
consistency for the XMPP IRI/URI that identifies such an XMPP lack of reliability and consistency for the XMPP IRI/URI that
address. identifies such an XMPP address.
XMPP addresses of the form domain.tld are typically long-lived XMPP XMPP addresses of the form domain.tld are typically long-lived XMPP
servers or associated services; although naturally it is possible for servers or associated services. Although naturally it is possible
server or service administrators to de-commission the server or for server or service administrators to decommission the server or
service at any time, typically the IRIs/URIs that identify such service at any time, typically the IRIs/URIs that identify such
servers or services are the most reliable and consistent of XMPP servers or services are the most reliable and consistent of XMPP
IRIs/URIs. IRIs/URIs.
XMPP addresses of the form domain.tld/resource are not yet common on XMPP addresses of the form domain.tld/resource are not yet common on
XMPP networks; however, the reliability and consistency of XMPP XMPP networks; however, the reliability and consistency of XMPP IRIs/
IRIs/URIs that identify such XMPP addresses would likely fall URIs that identify such XMPP addresses would likely fall somewhere
somewhere between those that identify XMPP addresses of the form between those that identify XMPP addresses of the form domain.tld and
domain.tld and those that identify XMPP addresses of the form those that identify XMPP addresses of the form node@domain.tld.
node@domain.tld.
5.2. Malicious Construction 5.2. Malicious Construction
Malicious construction of XMPP IRIs/URIs is made less likely by the Malicious construction of XMPP IRIs/URIs is made less likely by the
prohibition on port numbers in XMPP IRIs/URIs (since port numbers are prohibition on port numbers in XMPP IRIs/URIs (since port numbers are
to be discovered using [DNS-SRV] records, as specified in to be discovered using DNS SRV records [DNS-SRV], as specified in
[XMPP-CORE]). [XMPP-CORE]).
5.3. Back-End Transcoding 5.3. Back-End Transcoding
Because the base XMPP protocol is designed to implement the exchange Because the base XMPP protocol is designed to implement the exchange
of messages and presence information and not the retrieval of files of messages and presence information and not the retrieval of files
or invocation of similar system functions, it is deemed unlikely that or invocation of similar system functions, it is deemed unlikely that
the use of XMPP IRIs/URIs would result in harmful dereferencing. the use of XMPP IRIs/URIs would result in harmful dereferencing.
However, if an XMPP protocol extension defines methods for However, if an XMPP protocol extension defines methods for
information retrieval, it MUST define appropriate controls over information retrieval, it MUST define appropriate controls over
skipping to change at page 19, line 18 skipping to change at page 20, line 46
locations (e.g., on websites) may make it easier for malicious users locations (e.g., on websites) may make it easier for malicious users
to harvest XMPP addresses from the authority and path components of to harvest XMPP addresses from the authority and path components of
XMPP IRIs/URIs and therefore to send unsolicited bulk communications XMPP IRIs/URIs and therefore to send unsolicited bulk communications
to the users or applications represented by those addresses. Due to the users or applications represented by those addresses. Due
care should be taken in balancing the benefits of open information care should be taken in balancing the benefits of open information
exchange against the potential costs of unwanted communications. exchange against the potential costs of unwanted communications.
To help prevent leaking of sensitive information, passwords and other To help prevent leaking of sensitive information, passwords and other
user credentials are forbidden in the authority component of XMPP user credentials are forbidden in the authority component of XMPP
IRIs/URIs; in fact they are not needed, since the fact that IRIs/URIs; in fact they are not needed, since the fact that
authentication in XMPP occurs via [SASL] makes it possible to use the authentication in XMPP occurs via the Simple Authentication and
SASL ANONYMOUS mechanism, if desired. Security Layer [SASL] makes it possible to use the SASL ANONYMOUS
mechanism, if desired.
5.5. Semantic Attacks 5.5. Semantic Attacks
Despite the existence of non-hierarchical URI schemes such as Despite the existence of non-hierarchical URI schemes such as
[MAILTO], by association human users may expect all URIs to include [MAILTO], by association human users may expect all URIs to include
the "//" characters after the scheme name and ":" character. the "//" characters after the scheme name and ":" character.
However, in XMPP IRIs/URIs, the "//" characters precede the authority However, in XMPP IRIs/URIs, the "//" characters precede the authority
component rather than the path component. Thus, component rather than the path component. Thus,
xmpp://guest@example.com indicates to authenticate as xmpp://guest@example.com indicates to authenticate as
"guest@example.com", whereas xmpp:guest@example.com identifies the "guest@example.com", whereas xmpp:guest@example.com identifies the
skipping to change at page 20, line 5 skipping to change at page 21, line 32
The ability to include effectively the full range of Unicode The ability to include effectively the full range of Unicode
characters in an XMPP IRI may make it easier to execute certain forms characters in an XMPP IRI may make it easier to execute certain forms
of address mimicking (also called "spoofing"). However, XMPP IRIs of address mimicking (also called "spoofing"). However, XMPP IRIs
are no different from other IRIs in this regard, and applications are no different from other IRIs in this regard, and applications
that will present XMPP IRIs to human users must adhere to best that will present XMPP IRIs to human users must adhere to best
practices regarding address mimicking in order to help prevent practices regarding address mimicking in order to help prevent
attacks that result from spoofed addresses (e.g., the phenomenon attacks that result from spoofed addresses (e.g., the phenomenon
known as "phishing"). For details, refer to the Security known as "phishing"). For details, refer to the Security
Considerations of [IRI]. Considerations of [IRI].
6. References 6. Acknowledgements
6.1. Normative References Thanks to Martin Duerst, Lisa Dusseault, Frank Ellerman, Roy
Fielding, Joe Hildebrand, and Ralph Meijer for their comments.
7. References
7.1. Normative References
[ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax [ABNF] Crocker, D. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 4234, October 2005. Specifications: ABNF", STD 68, RFC 5234, January 2007.
[IRI] Duerst, M. and M. Suignard, "Internationalized [IRI] Duerst, M. and M. Suignard, "Internationalized
Resource Identifiers (IRIs)", RFC 3987, January 2005. Resource Identifiers (IRIs)", RFC 3987, January 2005.
[TERMS] Bradner, S., "Key words for use in RFCs to Indicate [TERMS] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[URI] Berners-Lee, T., Fielding, R., and L. Masinter, [URI] Berners-Lee, T., Fielding, R., and L. Masinter,
"Uniform Resource Identifier (URI): Generic Syntax", "Uniform Resource Identifier (URI): Generic Syntax",
STD 66, RFC 3986, January 2005. STD 66, RFC 3986, January 2005.
[XMPP-CORE] Saint-Andre, P., "Extensible Messaging and Presence [XMPP-CORE] Saint-Andre, P., "Extensible Messaging and Presence
Protocol (XMPP): Core", RFC 3920, October 2004. Protocol (XMPP): Core", RFC 3920, October 2004.
6.2. Informative References 7.2. Informative References
[CPIM] Peterson, J., "Common Profile for Instant Messaging [CPIM] Peterson, J., "Common Profile for Instant Messaging
(CPIM)", RFC 3860, August 2004. (CPIM)", RFC 3860, August 2004.
[CPP] Peterson, J., "Common Profile for Presence (CPP)", [CPP] Peterson, J., "Common Profile for Presence (CPP)",
RFC 3859, August 2004. RFC 3859, August 2004.
[DNS-SRV] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR [DNS-SRV] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR
for specifying the location of services (DNS SRV)", for specifying the location of services (DNS SRV)",
RFC 2782, February 2000. RFC 2782, February 2000.
[HTML] Raggett, D., "HTML 4.0 Specification", W3C [HTML] Raggett, D., "HTML 4.0 Specification", W3C REC REC-
REC REC-html40-19980424, April 1998. html40-19980424, April 1998.
[HTTP-AUTH] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, [HTTP-AUTH] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence,
S., Leach, P., Luotonen, A., and L. Stewart, "HTTP S., Leach, P., Luotonen, A., and L. Stewart, "HTTP
Authentication: Basic and Digest Access Authentication: Basic and Digest Access
Authentication", RFC 2617, June 1999. Authentication", RFC 2617, June 1999.
[IDNA] Faltstrom, P., Hoffman, P., and A. Costello, [IDNA] Faltstrom, P., Hoffman, P., and A. Costello,
"Internationalizing Domain Names in Applications "Internationalizing Domain Names in Applications
(IDNA)", RFC 3490, March 2003. (IDNA)", RFC 3490, March 2003.
[JEP-0009] Adams, D., "Jabber-RPC", JSF JEP 0009, February 2006.
[JEP-0030] Hildebrand, J., Millard, P., Eatmon, R., and P.
Saint-Andre, "Service Discovery", JSF JEP 0030,
January 2006.
[JEP-0045] Saint-Andre, P., "Multi-User Chat", JSF JEP 0045,
September 2005.
[JEP-0053] Saint-Andre, P., "Jabber Registrar", JSF JEP 0053,
May 2004.
[JEP-0060] Millard, P., Saint-Andre, P., and R. Meijer,
"Publish-Subscribe", JSF JEP 0060, June 2005.
[JEP-0072] Forno, F. and P. Saint-Andre, "SOAP Over XMPP", JSF
JEP 0072, December 2005.
[JEP-0077] Saint-Andre, P., "In-Band Registration", JSF JEP 0077,
January 2006.
[JEP-0147] Saint-Andre, P., "XMPP IRI/URI Query Components", JSF
JEP 0147, March 2006.
[MAILTO] Hoffman, P., Masinter, L., and J. Zawinski, "The [MAILTO] Hoffman, P., Masinter, L., and J. Zawinski, "The
mailto URL scheme", RFC 2368, July 1998. mailto URL scheme", RFC 2368, July 1998.
[MIME] Freed, N. and N. Borenstein, "Multipurpose Internet [MIME] Freed, N. and N. Borenstein, "Multipurpose Internet
Mail Extensions (MIME) Part Two: Media Types", Mail Extensions (MIME) Part Two: Media Types",
RFC 2046, November 1996. RFC 2046, November 1996.
[SASL] Melnikov, A. and K. Zeilenga, "Simple Authentication [SASL] Melnikov, A. and K. Zeilenga, "Simple Authentication
and Security Layer (SASL)", RFC 4422, June 2006. and Security Layer (SASL)", RFC 4422, June 2006.
skipping to change at page 22, line 16 skipping to change at page 23, line 27
and Registration Procedures for New URI Schemes", and Registration Procedures for New URI Schemes",
RFC 4395, February 2006. RFC 4395, February 2006.
[US-ASCII] American National Standards Institute, "Coded [US-ASCII] American National Standards Institute, "Coded
Character Set - 7-bit American Standard Code for Character Set - 7-bit American Standard Code for
Information Interchange", ANSI X3.4, 1986. Information Interchange", ANSI X3.4, 1986.
[UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO [UTF-8] Yergeau, F., "UTF-8, a transformation format of ISO
10646", STD 63, RFC 3629, November 2003. 10646", STD 63, RFC 3629, November 2003.
[XEP-0009] Adams, D., "Jabber-RPC", XSF XEP 0009, February 2006.
[XEP-0030] Hildebrand, J., Millard, P., Eatmon, R., and P. Saint-
Andre, "Service Discovery", XSF XEP 0030,
February 2007.
[XEP-0045] Saint-Andre, P., "Multi-User Chat", XSF XEP 0045,
April 2007.
[XEP-0053] Saint-Andre, P., "XMPP Registrar Function", XSF
XEP 0053, December 2006.
[XEP-0060] Millard, P., Saint-Andre, P., and R. Meijer, "Publish-
Subscribe", XSF XEP 0060, September 2006.
[XEP-0072] Forno, F. and P. Saint-Andre, "SOAP Over XMPP", XSF
XEP 0072, December 2005.
[XEP-0077] Saint-Andre, P., "In-Band Registration", XSF XEP 0077,
January 2006.
[XEP-0147] Saint-Andre, P., "XMPP URI Scheme Query Components",
XSF XEP 0147, September 2006.
[XMPP-IM] Saint-Andre, P., "Extensible Messaging and Presence [XMPP-IM] Saint-Andre, P., "Extensible Messaging and Presence
Protocol (XMPP): Instant Messaging and Presence", Protocol (XMPP): Instant Messaging and Presence",
RFC 3921, October 2004. RFC 3921, October 2004.
Appendix A. Differences from RFC 4622
Several errors were found in RFC 4622. This document corrects those
errors. The resulting differences from RFC 4622 are as follows:
o Specified that the characters "[", "\", "]", "^", "`", "{", "|",
and "}" are allowed in XMPP node identifiers but not allowed in
IRIs or URIs according to the sub-delims rule.
o Specified that the characters '"', "<", ">", "[", "\", "]", "^",
"`", "{", "|", and "}" are allowed in XMPP resource identifiers
but not allowed in IRIs or URIs according to the pchar rule.
o Specified that the foregoing characters must be percent-encoded
when constructing an XMPP URI.
o Corrected the ABNF accordingly.
o Updated the examples accordingly.
Appendix B. Copying Conditions
Regarding this entire document or any portion of it, the author makes
no guarantees and is not responsible for any damage resulting from
its use. The author grants irrevocable permission to anyone to use,
modify, and distribute it in any way that does not diminish the
rights of anyone else to use, modify, and distribute it, provided
that redistributed derivative works do not contain misleading author
or version information. Derivative works need not be licensed under
similar terms.
Author's Address Author's Address
Peter Saint-Andre Peter Saint-Andre
Jabber Software Foundation XMPP Standards Foundation
EMail: stpeter@jabber.org EMail: stpeter@jabber.org
URI: xmpp:stpeter@jabber.org URI: xmpp:stpeter@jabber.org
Full Copyright Statement Full Copyright Statement
Copyright (C) The Internet Society (2006). Copyright (C) The IETF Trust (2008).
This document is subject to the rights, licenses and restrictions This document is subject to the rights, licenses and restrictions
contained in BCP 78, and except as set forth therein, the authors contained in BCP 78, and except as set forth therein, the authors
retain all their rights. retain all their rights.
This document and the information contained herein are provided on an This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Intellectual Property Intellectual Property
The IETF takes no position regarding the validity or scope of any The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information made any independent effort to identify any such rights. Information
skipping to change at page 23, line 44 skipping to change at line 1127
attempt made to obtain a general license or permission for the use of attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr. http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at this standard. Please address the information to the IETF at
ietf-ipr@ietf.org. ietf-ipr@ietf.org.
Acknowledgement
Funding for the RFC Editor function is provided by the IETF
Administrative Support Activity (IASA).
 End of changes. 83 change blocks. 
277 lines changed or deleted 382 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/