Application data channels
Some notes on the protocols needed for file transfers and generic app data streams.
Uses
The Telepathy spec ought to be able to describe all these.
XEP-0096 File Transfer - Draft
Sender offers a single file with size, name, and optional description, date and md5sum. Sender may offer ranged transfers. Data streaming occurs over either XEP-0065 SOCKS5 Bytestreams, XEP-0047 In-Band Bytestreams or other implementation-dependent mechanisms.
Sender offers a single file ("invitation") with size and name, and if they are unable to serve incoming connections, says so.
Receiver accepts or cancels. If the invitation said the sender couldn't serve incoming connections, the receiver offers to be the server.
The official client will only work if the switchboard session contains exactly the two people involved.
You can also offer arbitrary streams:
Application-Name: human-readable name Application-GUID: some unique identifier for the type of stream Application-URL: optional "more info" URL Session-Protocol: official client only supports SM1 Context-Data: application-specific
File transfer through the switchboard. Analogous to IBB in XMPP?
IRC DCC
Basically, "connect to this IP:port and I'll send you this filename".
Jingle for session management, HTTP over pseudotcp over UDP for transfer, apparently lets you offer multiple files at once
Mechanisms
XEP-0047 In-Band Bytestreams - Draft
Binary blocks are sent over the XMPP stream as Base64 blobs.
Direct connection: Initiator offers Target a network address and SID. Target connects to that network address and requests a SOCKS5 connection to hostname=SHA1(SID + initiator full JID + target full JID) port=0.
Mediated connection: Initiator offers Target the full JID and network address of the proxy, and a SID. Target connects to that network address and requests a SOCKS5 connection to hostname=SHA1(SID + initiator full JID + target full JID) port=0; so does the initiator. Now they can talk.
UDP support is also possible.
Used to implement XEP-0096. Various modes can be selected.

