XEP-0174: Link-Local Messaging

This document describes how to establish XMPP-like communications over local networks using zero-configuration networking.


NOTICE: This document is currently within Last Call or under consideration by the XMPP Council for advancement to the next stage in the XSF standards process.


Document Information

Series: XEP
Number: 0174
Publisher: XMPP Standards Foundation
Status: Proposed
Type: Standards Track
Version: 0.15
Last Updated: 2007-05-14
Approving Body: XMPP Council
Dependencies: XMPP Core, XMPP IM, RFC 3927, draft-cheshire-dnsext-dns-sd, draft-cheshire-dnsext-multicastdns
Supersedes: None
Superseded By: None
Short Name: N/A
Wiki Page: <http://wiki.jabber.org/index.php/Link-Local Messaging (XEP-0174)>

Author Information

Peter Saint-Andre

Email: stpeter@jabber.org
JabberID: stpeter@jabber.org

Legal Notice

This XMPP Extension Protocol is copyright 1999 - 2007 by the XMPP Standards Foundation (XSF) and is in full conformance with the XSF's Intellectual Property Rights Policy <http://www.xmpp.org/extensions/ipr-policy.shtml>. This material may be distributed only subject to the terms and conditions set forth in the Creative Commons Attribution License (<http://creativecommons.org/licenses/by/2.5/>).

Discussion Venue

The preferred venue for discussion of this document is the Standards discussion list: <http://mail.jabber.org/mailman/listinfo/standards>.

Given that this XMPP Extension Protocol normatively references IETF technologies, discussion on the XSF-IETF list may also be appropriate (see <http://mail.jabber.org/mailman/listinfo/jsf-ietf> for details).

Relation to XMPP

The Extensible Messaging and Presence Protocol (XMPP) is defined in the XMPP Core (RFC 3920) and XMPP IM (RFC 3921) specifications contributed by the XMPP Standards Foundation to the Internet Standards Process, which is managed by the Internet Engineering Task Force in accordance with RFC 2026. Any protocol defined in this document has been developed outside the Internet Standards Process and is to be understood as an extension to XMPP rather than as an evolution, development, or modification of XMPP itself.

Conformance Terms

The following 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".


Table of Contents


1. Introduction
2. Glossary
3. DNS Records
    3.1. TXT Records
4. Discovering Other Users
5. Exchanging Presence
6. Discovering Capabilities
7. Initiating a Messaging Session
8. Exchanging Messages
9. Ending a Messaging Session
10. Going Offline
11. Implementation Notes
    11.1. Multiple Network Interfaces
    11.2. Buddy Icons
12. Internationalization Considerations
13. Security Considerations
    13.1. Authentication and Encryption
    13.2. Stanza Injection
    13.3. TXT Record Data
    13.4. Private Information
14. IANA Considerations
15. XMPP Registrar Considerations
    15.1. Link-Local TXT Records Registry
       15.1.1. Registration Process
       15.1.2. Initial Registration
16. Acknowledgements
Notes
Revision History


1. Introduction

XMPP as defined in RFC 3920 [1] does not support direct client-to-client interactions, since it requires authentication with a server: an XMPP client is allowed access to the network only once it has authenticated with a server, and the server must not grant access if authentication fails for any reason. If an unauthenticated client attempts to communicate directly with another client, such communication will fail because all XMPP communications are sent through one or more servers and a client cannot inject messages onto the network without first authenticating with a server.

However, it is possible to establish an XMPP-like communications system on a local network using zero-configuration networking. In this situation, the clients obviate the XMPP requirement for authentication with a server by relying on zero-configuration networking to establish link-local communication using the _presence._tcp DNS SRV service type. Once discovery has been completed, the clients are then able to exchange messages and other structured data using the XMPP <message/> and <iq/> stanzas. Note well that such communications are restricted to the local network because of how zero-configuration networking works. It is impossible for clients that communicate via link-local addresses to insert messages into an XMPP network, which is why this kind of local "mesh" is most accurately referred to as an XMPP-like system that exists outside the context of existing XMPP networks (though see the Security Considerations regarding the ability to "forward" messages from a local mesh to an XMPP network or vice-versa).

Such a local "mesh" can be quite valuable in certain circumstances. For instance, participants in a trade show or conference, users of the same WiFi hotspot, or employees on the same local area network can communicate without the need for a pre-configured server. For this reason, support for link-local messaging has been a feature of Apple's iChat client when operating in Bonjour (formerly Rendezvous) mode. Because it is desirable for other Jabber clients to support such functionality, this document describes how to use zero-configuration networking as the basis for link-local communication.

2. Glossary

Table 1: Terminology

Term Description
Bonjour Apple Computer's implementation of zero-configuration networking, formerly known as Rendezvous. See <http://www.apple.com/macosx/features/bonjour/>.
DNS-SD A convention for naming and structuring DNS SRV records such that a client can dynamically discover a domain for a service using only standard DNS queries. See DNS-Based Service Discovery [2]. For a full list of registered DNS-SD records, see <http://www.dns-sd.org/ServiceTypes.html>.
Link-local address An IPv4 or IPv6 address that is valid for communication with other devices connected to the same physical or logical link. See RFC 3927 [3].
Multicast DNS (mDNS) A technology that provides the ability to perform DNS-like operations on a local link in the absence of any conventional unicast DNS server. See Multicast DNS [4].
Zero-configuration networking A set of technologies that enable the use of the Internet Protocol for local communications. See <http://www.zeroconf.org/>.

3. DNS Records

In order to advertise its availability for link-local messaging, a client MUST publish four different kinds of DNS records:

  1. An address ("A" or "AAAA") record of the following form: [5]

    machine-name.local. A ip-address
          
  2. An "SRV" record (see RFC 2782 [6]) of the following form:

    _presence._tcp <ttl> IN SRV <priority> <weight> port-number username@machine-name.local. 
          
  3. A "PTR" record (see RFC 2317 [7] and RFC 1886 [8]) of the following form:

    _presence._tcp.local. port-number IN PTR username@machine-name._presence._tcp.local.
          
  4. Optionally, various "TXT" records (see RFC 1464 [9]) of the following form, as further described in to the TXT Records section of this document:

    <owner> IN <ttl> TXT "1st=user-first-name"
    <owner> IN <ttl> TXT "email=user-email-address"
    <owner> IN <ttl> TXT "ext=optional-list-of-extensions"
    <owner> IN <ttl> TXT "jid=user-jabber-id"
    <owner> IN <ttl> TXT "last=user-last-name"
    <owner> IN <ttl> TXT "msg=freeform-availability-status"
    <owner> IN <ttl> TXT "nick=user-nickname"
    <owner> IN <ttl> TXT "node=application-identifier"
    <owner> IN <ttl> TXT "phsh=sha1-hash-of-avatar"
    <owner> IN <ttl> TXT "port.p2pj=5298"
    <owner> IN <ttl> TXT "status=avail-away-or-dnd"
    <owner> IN <ttl> TXT "txtvers=1"
    <owner> IN <ttl> TXT "vc=capabilities-string"
    <owner> IN <ttl> TXT "ver=application-version"
          

The "machine-name" is the name of the computer, the "username" is the system username of the principal currently logged into the computer, the "port" may be any unassigned port number, and the "ip-address" is the physical address of the computer on the local network.

So, for example, if the machine name is "roundabout", the username is "stpeter", the chosen port is "5526", the IP address is "10.2.1.187", and the personal information is that associated with the author of this document, the DNS records would be as follows:

roundabout.local. A 10.2.1.187

_presence._tcp IN SRV 5526 stpeter@roundabout.local. 

_presence._tcp.local. 5526 IN PTR stpeter@roundabout._presence._tcp.local.

psa IN TXT "1st=Peter"
psa IN TXT "email=stpeter@jabber.org"
psa IN TXT "ext=rcd sgc auxvideo sgs mvideo avavail avcap maudio"
psa IN TXT "jid=stpeter@jabber.org"
psa IN TXT "last=Saint-Andre"
psa IN TXT "msg=IETF 66 Montreal"
psa IN TXT "nick=stpeter"
psa IN TXT "node=http://www.apple.com/ichat/caps"
psa IN TXT "phsh=a3839614e1a382bcfebbcf20464f519e81770813"
psa IN TXT "port.p2pj=5298"
psa IN TXT "status=avail"
psa IN TXT "txtvers=1"
psa IN TXT "vc=CA!"
psa IN TXT "ver=524"

  

The IPv4 and IPv6 addresses associated with a machine may vary depending on the local network to which the machine is connected. For example, on an Ethernet connection the physical address might be "10.2.1.187" but when the machine is connected to a wireless network, its physical address might change to "10.10.1.179".

If the machine name asserted by a client is already taken by another machine on the network, the client MUST assert a different machine name, which SHOULD be formed by adding the character "-" and digit "1" to the end of the machine name string (e.g., "roundabout-1"), adding the character "-" and digit "2" if the resulting machine name is already taken (e.g., "roundabout-2"), and similarly incrementing the digit until a unique machine name is constructed.

If the username asserted by a client is already taken by another application on the machine, the client MUST assert a different username, which SHOULD be formed by adding the character "-" and digit "1" to the end of the username string (e.g., "stpeter-1"), adding the character "-" and digit "2" if the resulting username is already taken (e.g., "stpeter-2"), and similarly incrementing the digit until a unique username is constructed.

3.1 TXT Records

DNS-SD enables service definitions to include various TXT records that specify parameters to be used in the context of the relevant service type. The XMPP Registrar [10] shall maintain a registry of TXT records for use with the _presence._tcp service type, as specified in the XMPP Registrar Considerations section of this document.

It is OPTIONAL to include any of these TXT records, and an implementation MUST NOT fail (i.e., MUST enable link-local messaging) even if none of the TXT records are provided by another local entity.

Most of the registered TXT records relate to human users, in which context certain records are of greater interest than others, e.g. "msg", "nick", and "status"; however, link-local messaging can be used by non-human entities (e.g., devices).

Note: See the Security Considerations section of this document regarding the inclusion of information that may have an impact on personal privacy (e.g., the "1st", "last", "nick", "email", and "jid" records).

4. Discovering Other Users

In order to discover other users, a client sends an mDNS request for PTR records that match "_presence_tcp.local.". The client then receives replies from all machines that advertise support for link-local messaging. [11] The client MAY then find out detailed information about each machine by sending SRV and TXT queries to "username@machine-name._presence._tcp.local." for each machine (however, to preserve bandwidth, the client SHOULD NOT send these queries unless it is about to initiate communications with the other user, and it MUST cancel the queries after it has received a response). Note: The presence name to be used for display in a link-local "roster" SHOULD be obtained from the <Instance> portion of the received PTR record for each user; however, the client MAY instead display a name or nickname derived from the TXT records if available.

5. Exchanging Presence

When the _presence._tcp service is used, presence is exchanged via the format described in the TXT Records section of this document. In particular, presence information is not pushed as in XMPP (see RFC 3921 [12]). Instead, clients listen for presence announcements from other local entities. Recommended rates for sending updates can be found in Multicast DNS.

6. Discovering Capabilities

Because link-local communication does not involve the exchange of XMPP presence, it is not possible to use Entity Capabilities [13] for capabilities discovery. Therefore, it is RECOMMENDED to instead include the node and ver TXT records (and OPTIONAL to include the ext TXT record). The values of these records MUST be the same as the values for the 'node', 'ver', and 'ext' attributes that are advertised for the application in XMPP presence (if any) via the Entity Capabilities protocol as described in XEP-0115.

7. Initiating a Messaging Session

In order to exchange link-local messages, the initiator and recipient MUST first establish XML streams between themselves, as is familiar from RFC 3920.

First, the initiator opens a TCP connection at the IP address and port discovered via the DNS lookup for a local entity and opens an XML stream to the recipient, which SHOULD include 'to' and 'from' address:

Example 1. Opening a Stream

<stream:stream 
        xmlns='jabber:client' 
        xmlns:stream='http://etherx.jabber.org/streams'
        from='stpeter@roundabout'
        to='hildjj@wolfram'
        version='1.0'>
  

Note: If the initiator supports stream features and the other stream-related aspects of XMPP 1.0 as specified in RFC 3920, then it SHOULD include the version='1.0' flag as shown in the previous example.

The recipient then responds with a stream header as well:

Example 2. Stream Header Response

<stream:stream 
        xmlns='jabber:client' 
        xmlns:stream='http://etherx.jabber.org/streams'>
        from='hildjj@wolfram'
        to='stpeter@roundabout'
        version='1.0'>
  

If both the initiator and recipient included the version='1.0' flag, the recipient SHOULD also send stream features as specified in RFC 3920:

Example 3. Recipient Sends Stream Features

<stream:features>
  <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
</stream:features>
  

The exchange of stream headers results in an unencrypted and unauthenticated channel between the two entities. See the Security Considerations section of this document regarding methods for authenticating and encrypting the stream.

8. Exchanging Messages

Once the streams are established, either entity then can send XMPP message or IQ stanzas by specifying 'to' and 'from' addresses using the logical local addresses: [14]

Example 4. Sending a Message

<message to='hildjj@wolfram' from='stpeter@roundabout'>
  <body>Hey, I'm testing out link-local messaging!</body>
</message>
  

9. Ending a Messaging Session

To end the chat, either party closes the XML stream:

Example 5. Ending the Chat

</stream:stream>
  

The other party then closes the stream in the other direction as well:

Example 6. Closing the Stream

</stream:stream>
  

Both parties then MUST close the TCP connection between them.

10. Going Offline

In order to go offline, a client MUST send a Multicast DNS "Goodbye" packet for the user's PTR record. As a result, all other entities on the local network will receive a Multicast DNS "Remove" event, at which point they MUST cancel any outstanding TXT, SRV, or NULL record queries for the offline user.

11. Implementation Notes

11.1 Multiple Network Interfaces

Devices that use link-local messaging may have multiple network interfaces. As a result, it is possible to discover the same entity multiple times. Even if a client discovers the same presence name on multiple network interfaces, it MUST show only one entity in the local roster. In addition, because local IP addresses can be dynamically re-assigned, the client SHOULD NOT store the IP address to be used for communications when it discovers that address in the initial DNS lookup phase; instead, it SHOULD delay sending the Multicast DNS query until the client is ready to communicate with the other entity.

11.2 Buddy Icons

If an entity has an associated icon (e.g., a user avatar or photo), its client SHOULD publish the raw binary data for that image via a DNS NULL record of the following form:

_presence._tcp.local. IN NULL raw-binary-data-here
    

Note: In accordance with RFC 1035 [15], the data MUST be 65535 octets or less.

After retrieving the "phsh" value from a Buddy's TXT record, a client SHOULD search its local picture database to learn the last recorded picture hash value for an entity and then compare it to the "phsh" value in the TXT record. If the values are equal, the client SHOULD use the local copy of the icon. If the picture hash values are not equal, the client SHOULD issue a Multicast DNS NULL record query to retrieve the new icon. After retrieving the NULL record, the client SHOULD replace the old "phsh" value in the picture database with the new "phsh" value and save the icon to disk. If the client needs to send a Multicast DNS query in order to retrieve the icon, it MUST cancel the NULL record query immediately after receiving a response containing the new picture data.

If a user changes their picture, the user's client MUST update the NULL record with the contents of the new picture, calculate a new picture hash, and then update the "phsh" value in the TXT record with the new hash value. Since all users logged into local presence are monitoring for TXT record changes, they will see that the "phsh" value was changed; if they wish to view the new icon, their clients SHOULD issue a new Multicast DNS query to retrieve the updated picture.

12. Internationalization Considerations

RFC 1035 does not allow characters outside the US-ASCII [16] character range in DNS A records. Therefore the "machine-name" portion of an A record as used for link-local messaging MUST NOT contain characters outside the US-ASCII character range.

Although RFC 2317 and RFC 2782 do not allow characters outside the US-ASCII character range in PTR and SRV records respectively, Section 4.1 of DNS-Based Service Discovery recommends support for UTF-8-encoded Unicode characters in the <Instance> portion of Service Instance Names, which in link-local messaging is the "username@machine-name" portion of the PTR or SRV record. This document adheres to the recommendation in DNS-Based Service Discovery. However, as mentioned above, the "machine-name" portion of the <Instance> portion MUST NOT contain characters outside the US-ASCII range.

Although RFC 1464 does not allow characters outside the US-ASCII character range in TXT records, Section 6.5 of DNS-Based Service Discovery mentions support for UTF-8-encoded Unicode characters in text record values (e.g., values of the TXT "msg" name). This document adheres to the recommendation in DNS-Based Service Discovery.

13. Security Considerations

13.1 Authentication and Encryption

XMPP networks use TLS (RFC 2246 [17]) for channel encryption, SASL (RFC 4422 [18]) for authentication, and the Domain Name System (RFC 1034 [19]) for weak validation of server hostnames; these technologies help to ensure the identity of sending entities and to encrypt XML streams. By contrast, zero-configuration networking uses dynamic discovery and asserted machine names as the basis of sender identity. Therefore, link-local messaging does not result in authenticated identities in the same way that XMPP itself does, nor does it provide for an encrypted channel between local entities.

There are two potential solutions to this problem:

  1. Negotiate the use of TLS and SASL for the XML stream as described in RFC 3920.
  2. Negotiate encryption with identity checking for the message exchange using Encrypted Session Negotiation [20].

It is RECOMMENDED to use one of these methods to secure communications between local entities. However, subject to client configuration and local service policies, two entities MAY accept an unauthenticated and unencrypted channel; but a client SHOULD warn the human user that the channel is unauthenticated and unencrypted.

13.2 Stanza Injection

Because of fundamental differences between a true XMPP network and a localized XMPP client "mesh", local entities MUST NOT attempt to inject local traffic onto an XMPP network and an XMPP server MUST reject communications until an entity is properly authenticated in accordance with the rules defined in RFC 3920. However, a client on a local mesh MAY forward traffic to an XMPP network after having properly authenticated on such a network (e.g., to forward a message received on a local client mesh to a contact on an XMPP network).

13.3 TXT Record Data

Because there is no mechanism for validating the information that is published in DNS TXT records, it is possible for clients to "poison" this information (e.g., by publishing email addresses or Jabber IDs that are controlled by or associated with other users).

13.4 Private Information

The TXT records optionally advertised as part of this protocol MAY result in exposure of privacy-sensitive information about a human user (such as full name, email address, and Jabber ID). A client MUST allow a user to disable publication of this personal information (e.g., via client configuration).

14. IANA Considerations

DNS-SD service type names are not yet managed by the Internet Assigned Numbers Authority (IANA) [21]. Section 19 of DNS-Based Service Discovery proposes an IANA allocation policy for unique application protocol or service type names. Until the proposal is adopted and in force, Section 19 points to <http://www.dns-sd.org/ServiceTypes.html> regarding registration of service type names for DNS-SD. The current registration is as follows:

  1. Short name: presence
  2. Long name: iChat AV
  3. Responsible person: Jens Alfke <jens at apple.com>
  4. Defined TXT keys: txtvers, port.p2pj, phsh, vc, 1st, AIM, msg, status, last

The XMPP Registrar has proposed to the maintainer of <http://www.dns-sd.org/ServiceTypes.html> that the registration be changed as follows:

  1. Short name: presence
  2. Long name: Link-Local Messaging
  3. Responsible person: XMPP Registrar <registrar at xmpp.org>
  4. Protocol URL: http://www.xmpp.org/extensions/xep-0174.html
  5. Primary transport protocol: _tcp
  6. TXT keys URL: [REGISTRY URL TO BE ASSIGNED]

15. XMPP Registrar Considerations

15.1 Link-Local TXT Records Registry

The XMPP Registrar shall maintain a registry of TXT records advertised in the context of link-local messaging.

15.1.1 Registration Process

In order to submit new values to this registry, the registrant must define an XML fragment of the following form and either include it in the relevant XMPP Extension Protocol or send it to the email address <registrar@xmpp.org>:

<record>
  <name>The attribute name of the TXT record.</name>
  <desc>A natural-language description of the record.</desc>
  <status>
    The requirements status of the record. Should be one of: 
      - required
      - recommended 
      - optional
      - deprecated
      - obsolete
 </status>
</record>
      

The registrant may register more than one TXT record at a time, each contained in a separate <record/> element.

15.1.2 Initial Registration

The following submission registers TXT records in use as of April 2007. Refer to the registry itself for a complete and current list of TXT records.


<record>
  <name>1st</name>
  <desc>The given or first name of the user.</desc>
  <status>optional</status>
</record>

<record>
  <name>email</name>
  <desc>
    The email address of the user; may contain a space-separated list 
    of more than one email address.
  </desc>
  <status>optional</status>
</record>

<record>
  <name>ext</name>
  <desc>
    A space-separated list of extensions; the value of this record MUST 
    be the same as that provided via normal XMPP presence (if applicable) 
    in the 'ext' attribute specified in XEP-0115; for details, refer to 
    the Discovering Capabilities section of XEP-0174.
  </desc>
  <status>recommended</status>
</record>

<record>
  <name>jid</name>
  <desc>
    The Jabber ID of the user; may contain a space-separated list of 
    more than one JID.
  </desc>
  <status>recommended</status>
</record>

<record>
  <name>last</name>
  <desc>The family or last name of the user.</desc>
  <status>optional</status>
</record>

<record>
  <name>msg</name>
  <desc>
    Natural-language text describing the user's state. This is 
    equivalent to the XMPP &lt;status/&gt;; element.
  </desc>
  <status>optional</status>
</record>

<record>
  <name>nick</name>
  <desc>A friendly or informal name for the user.</desc>
  <status>recommended</status>
</record>

<record>
  <name>node</name>
  <desc>
    A unique identifier for the application; the value of this record MUST 
    be the same as that provided via normal XMPP presence (if applicable) 
    in the 'node' attribute specified in XEP-0115; for details, refer to 
    the Discovering Capabilities section of XEP-0174.
  </desc>
  <status>recommended</status>
</record>

<record>
  <name>phsh</name>
  <desc>
    The SHA-1 hash of the user's avatar icon or photo. This SHOULD be 
    requested using mDNS in unicast mode by sending a DNS query to the 
    mDNS multicast address (224.0.0.251 or its IPv6 equivalent FF02::FB).
    The client should keep a local cache of icons keyed by hash. If the 
    phsh value is not in the cache, the client should fetch the unknown 
    icon and then cache it. Implementations should also include logic for 
    expiring avatar icons.
  </desc>
  <status>optional</status>
</record>

<record>
  <name>port.p2pj</name>
  <desc>
    The (hardcoded) port for link-local communications. Clients MUST use the 
    port discovered via SRV lookups and MUST ignore the value of this TXT 
    record, which is included only for backwards-compatibility with some 
    older, existing implementations.
  </desc>
  <status>deprecated</status>
</record>

<record>
  <name>status</name>
  <desc>
    The presence availability of the user. Allowable values are "avail", "away", 
    and "dnd", which map to mere XMPP presence (the user is available) and the 
    XMPP &lt;show/&gt; values of "away" and "dnd", respectively; if the status
    record is not included, the status should be assumed to be "avail".
  </desc>
  <status>recommended</status>
</record>

<record>
  <name>txtvers</name>
  <desc>
    The version of the TXT records supported by the client. For backwards 
    compatibility this is hardcoded at "1".
  </desc>
  <status>deprecated</status>
</record>

<record>
  <name>vc</name>
  <desc>
    A flag advertising the user's ability to engage in audio or video 
    conferencing. If the user is able to engage in audio conferencing, 
    the string MUST include the "A" character. If the user is able to 
    engage in video conferencing, the string MUST include the "V" 
    character. If the user is able to engage in conferencing with more 
    than one participant, the string MUST include the "C" character. If 
    the user is not currently engaged in an audio or video conference, 
    the string MUST include the "!" character. The order of characters 
    in the string is immaterial. NOTE: This flag is included only for
    backwards-compatibility; implementations SHOULD use the node, ver, 
    and ext records for more robust capabilities discovery as described 
    in the Discovering Capabilities section of XEP-0174.
  </desc>
  <status>optional</status>
</record>

<record>
  <name>ver</name>
  <desc>
    The application version; the value of this record MUST be the same as that 
    provided via normal XMPP presence (if applicable) in the 'ver' attribute 
    specified in XEP-0115; for details, refer to the Discovering Capabilities 
    section of XEP-0174.
  </desc>
  <status>recommended</status>
</record>

      

16. Acknowledgements

Thanks to Jens Alfke, Justin Karneges, Marc Krochmal, Eric St. Onge, and Sjoerd Simons for their input.


Notes

1. RFC 3920: Extensible Messaging and Presence Protocol (XMPP): Core <http://tools.ietf.org/html/rfc3920>.

2. DNS-Based Service Discovery <http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt>. Work in progress.

3. RFC 3927: Dynamic Configuration of IPv4 Link-Local Addresses <http://tools.ietf.org/html/rfc3927>.

4. Multicast DNS <http://files.multicastdns.org/draft-cheshire-dnsext-multicastdns.txt>. Work in progress.

5. The IP address MAY be either an IPv4 address or an IPv6 address.

6. RFC 2782: A DNS RR for specifying the location of services (DNS SRV) <http://tools.ietf.org/html/rfc2782>.

7. RFC 2317: Classless IN-ADDR.ARPA delegation <http://tools.ietf.org/html/rfc2317>.

8. RFC 1886: DNS Extensions to support IP version 6 <http://tools.ietf.org/html/rfc1886>.

9. RFC 1464: Using the Domain Name System To Store Arbitrary String Attributes <http://tools.ietf.org/html/rfc1464>.

10. The XMPP Registrar maintains a list of reserved protocol namespaces as well as registries of parameters used in the context of XMPP extension protocols approved by the XMPP Standards Foundation. For further information, see <http://www.xmpp.org/registrar/>.

11. The replies will include a record corresponding the client itself; the client MUST filter out this result.

12. RFC 3921: Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence <http://tools.ietf.org/html/rfc3921>.

13. XEP-0115: Entity Capabilities <http://www.xmpp.org/extensions/xep-0115.html>.

14. The to and from addresses MUST be of the form "username@machine-name" as discovered via SRV (this is the <Instance> portion of the Service Instance Name).

15. RFC 1035: Domain Names - Implementation and Specification <http://tools.ietf.org/html/rfc1035>.

16. Coded Character Set - 7-bit American Standard Code for Information Interchange (American National Standards Institute X3.4, 1986).

17. RFC 2246: The TLS Protocol Version 1.0 <http://tools.ietf.org/html/rfc2246>.

18. RFC 4422: Simple Authentication and Security Layer (SASL) <http://tools.ietf.org/html/rfc4422>.

19. RFC 1034: Domain Names - Concepts and Facilities <http://tools.ietf.org/html/rfc1034>.

20. XEP-0116: Encrypted Session Negotiation <http://www.xmpp.org/extensions/xep-0116.html>.

21. The Internet Assigned Numbers Authority (IANA) is the central coordinator for the assignment of unique parameter values for Internet protocols, such as port numbers and URI schemes. For further information, see <http://www.iana.org/>.


Revision History

Version 0.15 (2007-05-14)

Updated IANA Considerations to reflect proposed modification to DNS-SD registration.

(psa)

Version 0.14 (2007-05-11)

Specified that email and jid TXT values may contain a space-separated list of addresses; clarified roster display rules; clarified rules for handling presence name collisions; added security consideration about lack of validation for TXT record data.

(psa)

Version 0.13 (2007-03-28)

Clarified handling of stream version.

(psa)

Version 0.12 (2007-03-26)

Specified creation of registry for TXT records and hardcoded txtvers record value at 1.

(psa)

Version 0.11 (2007-03-14)

Added section on capabilities discovery; added TXT records corresponding to the node, ver, and ext attributes from XEP-0115; changed textvers value to 2.

(psa)

Version 0.10 (2007-03-13)

Added nick TXT key; added note about use of AAAA records with IPv6; specified that from and to addresses are recommended for stream headers; specified that stream features should be sent.

(psa)

Version 0.9 (2006-12-22)

Updated the security considerations to recommend either TLS+SASL at the stream layer or encrypted sessions at the messaging layer.

(psa)

Version 0.8 (2006-07-31)

Recommended use of TLS and SASL for stream security.

(psa)

Version 0.7 (2006-06-06)

Further clarified internationalization considerations.

(psa)

Version 0.6 (2006-06-05)

Clarified internationalization considerations and use of mDNS in unicast mode for avatar retrieval.

(psa)

Version 0.5 (2006-04-14)

Specified presence name conflict resolution procedure, offline procedure, use of DNS NULL record for icons, and handling of multiple network interfaces.

(psa)

Version 0.4 (2006-03-16)

Corrected PTR format and client discovery process.

(psa)

Version 0.3 (2006-02-23)

Added more details about DNS setup and stream initiation; specified internationalization considerations.

(psa)

Version 0.2 (2006-02-22)

Corrected information about Service Instance Name format, p2pj port, and presence discovery process.

(psa)

Version 0.1 (2006-02-09)

Initial version; changed title to Link-Local Messaging.

(psa)

Version 0.0.1 (2006-02-07)

First draft.

(psa)

END