You are on page 1of 17

XEP-0234: Jingle File Transfer

Peter Saint-Andre
mailto:peter@andyet.net
xmpp:stpeter@stpeter.im
https://stpeter.im/
2014-08-11
Version 0.16
Status
Experimental

Type
Standards Track

Short Name
NOT_YET_ASSIGNED

This specification defines a Jingle application type for transferring a file from one entity to another.
The protocol provides a modular framework that enables the exchange of information about the file to
be transferred as well as the negotiation of parameters such as the transport to be used.

or publisher of the Specification. deployment. incidental. special. title. deploy the Specification in a network service. MERCHANTABILITY. express or implied. even if the XMPP Standards Foundation or such author has been advised of the possibility of such damages. to make use of the Specification without restriction. sublicense. 1899 Wynkoop Street. . including without limitation the rights to implement the Specification in a software program. free of charge. unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing. shall the XMPP Standards Foundation or any author of this Specification be liable for damages. without limitation. and copy. and to permit persons to whom the Specification is furnished to do so. ## Liability In no event and under no legal theory. subject to the condition that the foregoing copyright notice and this permission notice shall be included in all copies or substantial portions of the Specification. publish. out of. computer failure or malfunction. or FITNESS FOR A PARTICULAR PURPOSE. whether in tort (including negligence). or otherwise. or in connection with the Specification or the implementation. including any direct.Legal Copyright This XMPP Extension Protocol is copyright © 1999 . any warranties or conditions of TITLE. and shall not claim endorsement of the modified works by the authors. work stoppage. or other use of the Specification (including but not limited to damages for loss of goodwill. Denver.2014 by the XMPP Standards Foundation (XSF). or sell copies of the Specification.org/about-xmpp/xsf/xsf-i pr-policy/> or obtained by writing to XMPP Standards Foundation. or the XMPP Standards Foundation. CO 80202 USA). distribute. modified works that are redistributed shall not contain misleading information regarding the authors. any organization or project to which the authors belong. NON-INFRINGEMENT. contract. indirect. Conformance This XMPP Extension Protocol has been contributed in full conformance with the XSF’s Intellectual Property Rights Policy (a copy of which can be found at <http://xmpp. Permissions Permission is hereby granted. Suite 600. including. translate. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND. merge. modify. Unless separate permission is granted. or consequential damages of any character arising from. number. to any person obtaining a copy of this specification (the ”Specification”). Warranty ## NOTE WELL: This Specification is provided on an ”AS IS” BASIS. or any and all other commercial damages or losses).

. . . . . . 10. . . . . . . . . . . . . . . . .4 Jingle Application Formats . . . 10. . . . . . . . . . . . . .2 Preference Order of Transport Methods . . . . 12 12 12 13 13 11 XML Schema 13 12 Acknowledgements 14 . . . . . . . . . . . . . . . . . . . . 10 7 Determining Support 11 8 Security Considerations 11 9 IANA Considerations 12 10 XMPP Registrar Considerations 10. .1 Protocol Namespaces . . . . . . . .Contents 1 Introduction 1 2 How It Works 2 3 Communicating the Checksum or Hashing Algorithm 7 4 Ranged Transfers 8 5 Use of Jingle Actions 9 6 Implementation Notes 10 6. . . . . . . . . . . . . . . . . . . 10 6. . . . . . . . .2 Namespace Versioning . . . . . . . 10. . . . . . . . . . . . . . . . . . .3 Migration from XEP-0096 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Service Discovery Features . . . . . . . . . . . . . . . . . . .1 Mandatory to Implement Technologies . . . . . . . . . . . . . . . 10 6. . . . . . . . . . . .

org/extensions/xep-0095. 3 XEP-0166: Jingle <http://xmpp. It does not enable a true.org/extensions/xep-0096. 1 XEP-0096: SI File Transfer <http://xmpp. It is the only technology in the Jabber/XMPP protocol ”stack” that uses XEP-095: Stream Initiation. bidirectional negotiation. • Define a file description format that. 5 XEP-0261: Jingle In-Band Bytestreams Transport Method <http://xmpp.org/extensions/xep-0261. 2 1 .org/extensions/xep-0166. as specified in TCP Candidates with Interactive Connectivity Establishment (ICE) 7 . that protocol has several drawbacks.1 INTRODUCTION 1 Introduction SI File Transfer (XEP-0096) 1 was the original XMPP protocol extension for file transfer negotiation. this specification requires all implementations to support as a fallback mechanism In-Band Bytestreams (”IBB”).org/extensions/xep-0300. this specification defines a file transfer negotiation method that meets the following requirements: • Use the session negotiation semantics from XEP-0166.org/extensions/xep-0260. which usually results in a successful (if slow) file transfer.html>.org/html/rfc6544>.html>. enables hash agility (via Use of Cryptographic Hash Functions in XMPP (XEP-0300) 6 ). SOCKS5 Bytestreams (”S5B”) does not always result in NAT or firewall traversal.html>. • Define a clear upgrade path from SI File Transfer to Jingle File Transfer. XEP-0095: Stream Initiation <http://xmpp. To overcome these drawbacks.html>.ietf. However. 4 XEP-0260: Jingle SOCKS5 Bytestreams Transport Method <http://xmpp. the initiator sets the terms for the file transfer and the responder either accepts the terms or cancels the negotiation.html>. 2. • Use Jingle SOCKS5 Bytestreams Transport Method (XEP-0260) 4 and Jingle In-Band Bytestreams Transport Method (XEP-0261) 5 as transport methods. unlike XEP-0096.html>. instead. In particular. most related to the Stream Initiation (XEP-0095) 2 protocol on which it depends: 1. Work in progress. 7 TCP Candidates with Interactive Connectivity Establishment (ICE) <http://tools. More modern technologies such as voice and video session negotiation use Jingle (XEP-0166) 3 . To work around that problem. 6 XEP-0300: Use of Cryptographic Hash Functions in XMPP <http://xmpp. Jingle file transfer is only as reliable as the transports on which it depends. Note: It is likely that a future version of this specification will also recommend implementation of a Jingle transport method that emulates the IETF’s ICE-TCP technology. and it would be helpful if implementors could re-use the same code for all negotiation use cases.

-.-. In this example...--| | ack | 8 9 XEP-0030: Service Discovery <http://xmpp.org/extensions/xep-0030. the application type is a file offer. the responder is <juliet@capulet.-.. the party that wishes to initiate the file transfer determines the responder’s capabilities (via Service Discovery (XEP-0030) 8 or Entity Capabilities (XEP-0115) 9 ).-.. the initiator is <romeo@montague... and the transport method is jingle-s5b.. Initiator Responder | | | session .-.. the <description/> element contains a <file/> elements describing the file to be sent.-.-... The flow is as follows.html>..lit>.org/extensions/xep-0115. • urn:xmpp:jingle:transports:s5b:1 as defined in XEP-0260 • urn:xmpp:jingle:transports:ibb:1 as defined in XEP-0261 The initiator then sends a Jingle session-initiation request to a potential responder..-. So far the suggested methods are jingle-s5b (XEP0260) and....-.. 2 ..-. Here we assume that the responder supports the following service discovery features: • urn:xmpp:jingle:1 as described in XEP-0166 • urn:xmpp:jingle:apps:file-transfer:4 as defined in this document If the protocol defined in this specification undergoes a revision that is not fully backwards-compatible with an older version. the XMPP Registrar shall increment the protocol version number found at the end of the XML namespaces defined herein.-.-.-.initiate | | ( with < file / > and S5B ) | | .-. 2. The content-type of the request specifies two things: 1...lit>.. as described in Section 4 of XEP-0053. In particular.-.html>.-.accept | |< -...-.-.-..2 HOW IT WORKS 2 How It Works This section provides a friendly introduction to Jingle file transfer.>| | ack | | < -.-.-... XEP-0115: Entity Capabilities <http://xmpp. First.. jingle-ibb (XEP-0261). An application type of ”urn:xmpp:jingle:apps:file-transfer:4”.-..-.--| | session . as a fallback. An appropriate transport method.-.

.--| | ack | | -.-.-.-.type > < name > test .4.-.-.-.-.-. If this were a real file .-.-.offer ’ > < description xmlns = ’ urn:xmpp:jingle:apps:file .-.24. lit / balcony ’ type = ’ set ’ > < jingle xmlns = ’ urn:xmpp:jingle:1 ’ action = ’ session . lit / orchard ’ port = ’ 5087 ’ priority = ’ 8258636 ’ type = ’ direct ’/ > 3 .24.-.-.-.transfer:4 ’ > < file > < date > 1969 -07 -21 T02:56:15Z </ date > < desc > This is a test .-.-.file . lit / orchard ’ port = ’ 5086 ’ priority = ’ 8257636 ’ type = ’ direct ’/ > < candidate cid = ’ hutr46fe ’ host = ’ 24.initiate ’ initiator = ’ romeo@montague .-.-.>| | [ file transfer ] | |============================ >| | session .2 HOW IT WORKS | -.-.>| | | First the initiator sends a Jingle session-initiate.-. </ desc > < media .type > text / plain </ media .-.-.-.-.-.-.168.-.-. Listing 1: Initiator sends session-initiate < iq from = ’ romeo@montague .-.-. lit / orchard ’ sid = ’ 851 ba2 ’ > < content creator = ’ initiator ’ name = ’a .-.-.-.-.-. txt </ name > < range / > < size > 1022 </ size > < hash xmlns = ’ urn:xmpp:hashes:1 ’ algo = ’sha -1 ’ > 552 da749930852c69ae5d2141d3766b1 </ hash > </ file > </ description > < transport xmlns = ’ urn:xmpp:jingle:transports:s5b:1 ’ mode = ’ tcp ’ sid = ’ vj3hs98y ’ > < candidate cid = ’ hft54dqy ’ host = ’ 192.terminate | | < -.1 ’ jid = ’ romeo@montague .-.-.-.1 ’ jid = ’ romeo@montague . lit / orchard ’ id = ’ nzu25s8 ’ to = ’ juliet@capulet ..

file . Note: Computing the hash of the file before sending it can slow down the process of file transfer.type > < name > test . lit / orchard ’ sid = ’ 851 ba2 ’ > < content creator = ’ initiator ’ name = ’a .. In the session-accept message. </ desc > < media .2 HOW IT WORKS </ transport > </ content > </ jingle > </ iq > Note: As in XEP-0096. Listing 3: Responder sends session-accept < iq from = ’ juliet@capulet . The sender might prefer to send the hash after the file transfer has begun. lit / balcony ’ id = ’ nzu25s8 ’ to = ’ romeo@montague . lit / orchard ’ type = ’ result ’/ > The initiator then attempts to initiate a SOCKS5 Bytestream with the responder as described in XEP-0260 and XEP-0065. since the sending application needs to process the file twice. Listing 2: Responder acknowledges session-initiate < iq from = ’ juliet@capulet . In the meantime. the responder returns a Jingle session-accept..transfer:4 ’ > < file > < date > 1969 -07 -21 T02:56:15Z </ date > < desc > This is a test . using a transport-info message as described under Communicating the Hash. the <file/> element MAY contain a <range/> element to indicate that the receiver also supports ranged transfers as described below under Ranged Transfers. The responder immediately acknowledges receipt of the Jingle session-initiate. txt </ name > < range / > < size > 1022 </ size > < hash xmlns = ’ urn:xmpp:hashes:1 ’ algo = ’sha -1 ’ > 552 da749930852c69ae5d2141d3766b1 </ hash > </ file > </ description > 4 .type > text / plain </ media .offer ’ > < description xmlns = ’ urn:xmpp:jingle:apps:file . inclusion of the <range/> child of the <file/> element indicates that the initiatior supports ranged transfers as described below under Ranged Transfers.accept ’ initiator = ’ romeo@montague . lit / orchard ’ type = ’ set ’ > < jingle xmlns = ’ urn:xmpp:jingle:1 ’ action = ’ session . If this were a real file . lit / balcony ’ id = ’ jn2vs71g ’ to = ’ romeo@montague .

lit / balcony ’ port = ’ 16453 ’ priority = ’ 7929856 ’ type = ’ assisted ’/ > < candidate cid = ’ grt654q2 ’ host = ’ 2001 :638:708:30c9:219:d1ff:fea4:a17d ’ jid = ’ juliet@capulet .10 ’ jid = ’ juliet@capulet . lit / balcony ’ port = ’ 6539 ’ priority = ’ 8257636 ’ type = ’ direct ’/ > < candidate cid = ’ hr65dqyd ’ host = ’ 134. lit / balcony ’ type = ’ result ’/ > Once one client has successfully created a connection.info ’ initiator = ’ romeo@montague .2 HOW IT WORKS < transport xmlns = ’ urn:xmpp:jingle:transports:s5b:1 ’ mode = ’ tcp ’ sid = ’ vj3hs98y ’ > < candidate cid = ’ ht567dq ’ host = ’ 192.169. Listing 5: Initiator sends remote-candidate in Jingle transport-info < iq from = ’ romeo@montague .1.180 ’ jid = ’ juliet@capulet . lit / orchard ’ id = ’ hjdi8 ’ to = ’ juliet@capulet . lit / balcony ’ port = ’ 6539 ’ priority = ’ 8257606 ’ type = ’ direct ’/ > </ transport > </ content > </ jingle > </ iq > The initiator acknowledges the Jingle session-accept. lit / orchard ’ id = ’ jn2vs71g ’ to = ’ juliet@capulet . If a client receives a remotecandidate notification it SHOULD continue trying to connect to candidates sent by its peer if it has not tried all candidates with a higher priority than the one successfully used by the peer. lit / balcony ’ type = ’ set ’ > < jingle xmlns = ’ urn:xmpp:jingle:1 ’ action = ’ transport . Listing 4: Initiator acknowledges session-accept < iq from = ’ romeo@montague . lit / orchard ’ 5 .201. it sends a <remote-candidate/> element to the peer inside a Jingle transport-info message.102.

lit / orchard ’ type = ’ set ’ > < jingle xmlns = ’ urn:xmpp:jingle:1 ’ action = ’ session .2 HOW IT WORKS sid = ’ a73sjjvkla37jfea ’ > < content creator = ’ initiator ’ name = ’ ex ’ > < transport xmlns = ’ urn:xmpp:jingle:transports:s5b:1 ’ sid = ’ vj3hs98y ’ > < remote . Once the transfer is completed. XEP-0260 or XEP-0261).candidate cid = ’ hr65dqyd ’/ > </ transport > </ content > </ jingle > </ iq > The peer immediately acknowledges receipt. either party can acknowledge completion or terminate the Jingle session.. Listing 7: Receiver sends session-terminate < iq from = ’ juliet@capulet . For a description of the transport fallback scenario (from SOCKS5 Bytestreams to In-Band Bytestreams). SOCKS5 Bytestreams). lit / orchard ’ type = ’ result ’/ > (See XEP-0260 for further details. lit / balcony ’ id = ’ og61bvs98 ’ to = ’ romeo@montague .) Now the parties exchange the file using the negotiated transport (here.terminate ’ sid = ’ a73sjjvkla37jfea ’ > < reason > < success / > </ reason > </ jingle > </ iq > After terminating the session. refer to XEP-0260. lit / balcony ’ id = ’ hjdi8 ’ to = ’ romeo@montague . Listing 6: Responder acknowledges remote-candidate message < iq from = ’ juliet@capulet . 6 . the parties would close the data transport as described in the relevant specification (e. preferably this is done by the entity that receives the file to ensure that the complete file (up to the advertised size) has been received.g.

lit / orchard ’ id = ’ nzu25s8 ’ 10 IANA registry of Hash Function Textual Names <http://www. lit / orchard ’ sid = ’ a73sjjvkla37jfea ’ > < checksum xmlns = ’ urn:xmpp:jingle:apps:file . lit / orchard ’ id = ’ kqh401b5 ’ to = ’ juliet@capulet . 7 .org/assignments/hash-function-text-n ames>.iana. it can send an empty <hash/> element (without a checksum in the XML character data as shown in the previous examples) in the session-initiate message. because it has not yet calculated the checksum). which MUST be one of the functions listed in the IANA Hash Function Textual Names Registry 10 . this enables the recipient to check the file during the transfer session (which can be helpful in the case of transfers that are truncated or fail mid-stream).info ’ initiator = ’ romeo@montague . the entity where the file resides) can communicate the checksum of the file to the receiving entity. this can also be done by sending a session-info message containing a <checksum/> element qualified by the ’urn:xmpp:jingle:apps:file-transfer:4’ namespace. This can be done in the session-initiate message if the sender already knows the checksum. which in turn contains a <file/> element that MUST at least contain a child element of <hash/> qualified by the ’urn:xmpp:hashes:1’ namespace and MAY contain other elements qualified by the ’urn:xmpp:jingle:apps:file-transfer:4’ namespace (e. as shown above in Example 1.transfer:4 ’ > < file > < hash xmlns = ’ urn:xmpp:hashes:1 ’ algo = ’sha -1 ’ > 552 da749930852c69ae5d2141d3766b1 </ hash > </ file > </ checksum > </ jingle > </ iq > If the initiator wishes to communicate only the hashing algorithm as the beginning of the session (e..g. Listing 9: Initiator communicates hashing algorithm in session-initiate < iq from = ’ romeo@montague . Each <hash/> element contains a checksum of the file contents produced in accordance with the hashing function specified by the ’algo’ attribute. lit / balcony ’ type = ’ set ’ > < jingle xmlns = ’ urn:xmpp:jingle:1 ’ action = ’ session . the hosting entity (i.. Listing 8: Initiator sends checksum in session-info < iq from = ’ romeo@montague . After the session-initiate message. <name/> and <date/>).g.e.3 COMMUNICATING THE CHECKSUM OR HASHING ALGORITHM 3 Communicating the Checksum or Hashing Algorithm At any time during the lifetime of the file transfer session.

type > text / plain </ media . say.offer ’ > < description xmlns = ’ urn:xmpp:jingle:apps:file .1 ’ jid = ’ romeo@montague .. a transfer can include only part of a file (e.g.. lit / balcony ’ type = ’ set ’ > < jingle xmlns = ’ urn:xmpp:jingle:1 ’ action = ’ session . lit / orchard ’ port = ’ 5087 ’ priority = ’ 8258636 ’ type = ’ direct ’/ > </ transport > </ content > </ jingle > </ iq > 4 Ranged Transfers As in XEP-0096. This is done using the <range/> element from XEP-0096. The usage is illustrated in the following examples.168.1 ’ jid = ’ romeo@montague .transfer:4 ’ > < file > < date > 1969 -07 -21 T02:56:15Z </ date > < desc > This is a test . Let us imagine that the parties negotiate a file transfer session using. txt </ name > < range / > < size > 1022 </ size > < hash xmlns = ’ urn:xmpp:hashes:1 ’ algo = ’sha -1 ’/ > </ file > </ description > < transport xmlns = ’ urn:xmpp:jingle:transports:s5b:1 ’ mode = ’ tcp ’ sid = ’ vj3hs98y ’ > < candidate cid = ’ hft54dqy ’ host = ’ 192. the sender could initiate a new Jingle session and specify that it wants to send all chunks after byte 270336 8 .24. In-Band Bytestreams.4.type > < name > test . lit / orchard ’ sid = ’ 851 ba2 ’ > < content creator = ’ initiator ’ name = ’a .initiate ’ initiator = ’ romeo@montague .4 RANGED TRANSFERS to = ’ juliet@capulet . If this were a real file . to restart delivery of a truncated transfer session at a point other than the start of the file). lit / orchard ’ port = ’ 5086 ’ priority = ’ 8257636 ’ type = ’ direct ’/ > < candidate cid = ’ hutr46fe ’ host = ’ 24.. When the recipient comes back online. the recipient goes offline unexpectedly and IBB stanzas from the sender to the recipient begin to bounce. During the transfer.file . </ desc > < media .24.

24. lit / orchard ’ port = ’ 5086 ’ priority = ’ 8257636 ’ type = ’ direct ’/ > < candidate cid = ’ hutr46fe ’ host = ’ 24. Listing 10: Sender requests session to send file.5 USE OF JINGLE ACTIONS (which might be the 66th chunk of size 4096).168.1 ’ jid = ’ romeo@montague . with range < iq from = ’ romeo@montague . 9 . lit / balcony ’ type = ’ set ’ > < jingle xmlns = ’ urn:xmpp:jingle:1 ’ action = ’ session .1 ’ jid = ’ romeo@montague . Jingle usage is summarized in the following table.24.initiate ’ initiator = ’ romeo@montague . lit / orchard ’ sid = ’ uj3b2 ’> < content creator = ’ initiator ’ name = ’ restart ’ > < description xmlns = ’ urn:xmpp:jingle:apps:file . lit / orchard ’ port = ’ 5087 ’ priority = ’ 8258636 ’ type = ’ direct ’/ > </ transport > </ content > </ jingle > </ iq > 5 Use of Jingle Actions Jingle file transfer uses only a few of the actions defined in XEP-0166.4.transfer:4 ’ > < file > < range offset = ’ 270336 ’/ > < hash xmlns = ’ urn:xmpp:hashes:1 ’ algo = ’sha -1 ’ > 552 da749930852c69ae5d2141d3766b1 </ hash > </ file > </ description > < transport xmlns = ’ urn:xmpp:jingle:transports:s5b:1 ’ mode = ’ tcp ’ sid = ’ vj3hs98y ’ > < candidate cid = ’ hft54dqy ’ host = ’ 192. lit / orchard ’ id = ’ wsn361c3 ’ to = ’ juliet@capulet .

An implementation SHOULD support other transport methods as well. 6. 10 . especially the Jingle SOCKS5 Bytestreams Transport Method (XEP-0260). it SHOULD first attempt negotiation using Jingle rather than Stream Initiation.6 IMPLEMENTATION NOTES Action content-accept content-add content-modify content-reject content-remove description-info security-info session-accept session-info session-initiate session-terminate transport-accept transport-info transport-reject transport-replace Use Unused Unused Unused Unused Unused Unused Unused Accepting a file offer or request Communicating the file hash Initiating a file offer or request Ending a file transfer session Accepting fallback from S5B to IBB Used in SOCKS5 Bytestreams Rejecting fallback from S5B to IBB Fallback from S5B to IBB 6 Implementation Notes 6. via either service discovery (XEP-0030) or entity capabilities (XEP-0115). 6.3 Migration from XEP-0096 Support for Jingle file transfer can be determined through discovery of the ’urn:xmpp:jingle:apps:file-transfer:4’ namespace (see Namespace Versioning regarding the possibility of incrementing the version number).1 Mandatory to Implement Technologies All implementations MUST support the Jingle In-Band Bytestreams Transport Method (XEP0261) as a reliable method of last resort.2 Preference Order of Transport Methods An application MAY present transport methods in any order. except that the Jingle In-Band Bytestreams Transport Method MUST be the lowest preference. If the initiator knows that the responder supports Jingle file transfer.

presence-based profile of service discovery defined in Entity Capabilities (XEP-0115) 11 . lit / orchard ’ type = ’ result ’ > < query xmlns = ’ http: // jabber . However. it SHOULD use explicit service discovery instead. For example. lit / balcony ’ id = ’ uw72g176 ’ to = ’ romeo@montague . See XEP-0300 for further discussion. 11 . org / protocol / disco # info ’/ > </ iq > Listing 12: Service discovery information response < iq from = ’ juliet@capulet . if an application has not received entity capabilities information from an entity. org / protocol / disco # info ’ > < feature var = ’ urn:xmpp:jingle:1 ’/ > < feature var = ’ urn:xmpp:jingle:apps:file . if an application supports exchange of multiple files. In order to secure the data stream.8 SECURITY CONSIDERATIONS 7 Determining Support To advertise its support for the Jingle File Transfer. lit / balcony ’ type = ’ get ’ > < query xmlns = ’ http: // jabber . end-to-end encryption can be negotiated over either SOCKS5 Bytestreams or In-Band Bytestreams as described in XEP-0260 11 XEP-0115: Entity Capabilities <http://xmpp. In order for an application to determine whether an entity supports this protocol. 8 Security Considerations It is RECOMMENDED for implementations to use the strongest hashing algorithm available to both parties. implementations SHOULD use encryption methods appropriate to the transport method being used.g.html>. when replying to service discovery information (”disco#info”) requests an entity MUST return URNs for any version of this protocol that the entity supports -. ”urn:xmpp:jingle:apps:file-transfer:4” for this version (see Namespace Versioning regarding the possibility of incrementing the version number).org/extensions/xep-0115.transfer:4 ’/ > < feature var = ’ urn:xmpp:jingle:transports:s5b:1 ’/ > < feature var = ’ urn:xmpp:jingle:transports:ibb:1 ’/ > </ query > </ iq > As noted.e.. Listing 11: Service discovery information request < iq from = ’ romeo@montague . it MUST advertise a service discovery feature of ”urn:xmpp:jingle:apps:file-transfer:multi”. lit / orchard ’ id = ’ uw72g176 ’ to = ’ juliet@capulet . where possible it SHOULD use the dynamic.

9 IANA Considerations No interaction with the Internet Assigned Numbers Authority (IANA) 12 is required as a result of this document. as described in Section 4 of XEP-0053. XEP-0065. as described in Section 4 of XMPP Registrar Function (XEP-0053) 15 . For further information. 15 XEP-0053: XMPP Registrar Function <http://xmpp. the XMPP Registrar 14 shall add the foregoing namespace to the registry located at <http://xmpp. 10.1 Protocol Namespaces This specification defines the following XML namespace: • urn:xmpp:jingle:apps:file-transfer:4 Upon advancement of this specification from a status of Experimental to a status of Draft. 13 IANA registry of MIME media types <http://www. 12 The Internet Assigned Numbers Authority (IANA) is the central coordinator for the assignment of unique parameter values for Internet protocols. XEP-0260.iana.org/registrar/>. XEP-0096. see <http://xmpp. the XMPP Registrar shall increment the protocol version number found at the end of the XML namespaces defined herein. Refer to XEP-0047.html>.org/assignments/media-types>. such as port numbers and URI schemes. 14 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.org/extensions/xep-0053. and XEP-0261 for related security considerations.iana. 10 XMPP Registrar Considerations 10.html>.org/>.org/registrar/namespaces. see <http://www.2 Namespace Versioning If the protocol defined in this specification undergoes a revision that is not fully backwardscompatible with an older version. 12 .10 XMPP REGISTRAR CONSIDERATIONS and XEP-0261. The XML character data of the <media-type/> element SHOULD be a value registered with the IANA in the IANA MIME Media Types Registry 13 .

transfer </ name > < desc > Jingle sessions for the transfer of a file </ desc > < transport > streaming </ transport > < doc >XEP -0234 </ doc > </ application > 11 XML Schema <? xml version = ’ 1.transfer:4 ’ xmlns = ’ urn:xmpp:jingle:apps:file . </ desc > < doc >XEP -0234 </ doc > </ var > 10. org /2001/ XMLSchema ’ targetNamespace = ’ urn:xmpp:jingle:apps:file .4 Jingle Application Formats The XMPP Registrar shall include ”file-transfer” in its registry of Jingle application formats.transfer:4 ’ elementFormDefault = ’ qualified ’ > < xs:import namespace = ’ urn:xmpp:hashes:1 ’/ > < xs:element name = ’ description ’ > < xs:complexType > < xs:choice > < xs:element name = ’ file ’ type = ’ fileTransferElementType ’/ > </ xs:choice > </ xs:complexType > </ xs:element > < xs:element name = ’ checksum ’ type = ’ fileTransferElementType ’/ > 13 .transfer:multi </ name > < desc > Signals support for exchange of multiple files . w3 .11 XML SCHEMA 10. < var > < name > urn:xmpp:jingle:apps:file .0 ’ encoding = ’UTF -8 ’? > < xs:schema xmlns:xs = ’ http: // www . The registry submission is as follows. The registry submission is as follows: < application > < name > file .3 Service Discovery Features The service discovery feature for advertising support for exchange of multiple files is ”urn:xmpp:jingle:apps:file-transfer:multi”.

and Jiří Zárevúcky for their feedback. Steffen Larsen. Lance Stout. Philipp Hancke. Justin Karneges. Robert McQueen. Viktor Fast.type ’ type = ’ xs:string ’/ > < xs:element name = ’ name ’ type = ’ xs:string ’/ > < xs:element name = ’ size ’ type = ’ xs:positiveInteger ’/ > < xs:element ref = ’ h:hash ’ minOccurs = ’0 ’ maxOccurs = ’ unbounded ’/ > </ xs:sequence > </ xs:complexType > </ xs:element > </ xs:schema > 12 Acknowledgements Thanks to Diana Cionoiu. Ali Sabil. Glenn Maynard. Waqas Hussain. Matthew Wild. Joe Maissel. Yann Leboulanger. Marcus Lundblad. 14 . Olivier Crête. Sjoerd Simons.12 ACKNOWLEDGEMENTS < xs:complexType name = ’ fileTransferElementType ’ > < xs:sequence > < xs:element name = ’ file ’/ > </ xs:sequence > </ xs:complexType > < xs:element name = ’ file ’ > < xs:complexType > < xs:sequence xmlns:h = ’ urn:xmpp:hashes:1 ’ > < xs:element name = ’ date ’ type = ’ xs:date ’/ > < xs:element name = ’ media . Will Thompson.