Jingle File Transfer for Psi
The objective is to implement the File Transfer system as a media session for Jingle since the manner in which p2p connections are established (even with Firewalls and NAT devices involved) is one of the main reasons for its success and also makes it relatively easy to implement any kind of media session.
Expecting to achieve an efficient file transfer system, mainly for users behind Firewall/NAT that currently transfer files through a server which causes low transfer rates.
Project on Google Hosting:
Original Project Proposal
Summer of Code 2006 Project Proposal for Jabber Software Foundation
(Personal info removed)
The objective of this project is to help the Jabber team in finishing a JEP that defines a media description format for Jingle File Transfer sessions and, as soon as this JEP is released, write a module that implements this functionality for the Psi client.
As the manner of establishing p2p connections is one of the main reasons for Jingle's success, having a File Transfer system based in it would have a much better result in comparison with the methods used nowadays.
Benefits to Community:
- Define a good and modern standard for file transfer sessions will allow for all Jabber users to get use of this service from any IM Client they choose;
- Improvement of the file transfer system of Jabber protocol;
- Bitrate improvements on file transfers for users behind NAT/Firewall, because they will be able to transfer data through direct connections instead of connections intermediated by a server;
- The increased number of successful p2p connections will reduce server's overload.
- A JEP that defines a media description format for Jingle File Transfer sessions;
- A module implementing the Jingle File Transfer functionality for Psi;
- Documentation for future maintenance and improvement the code;
Currently, the defined methods for file transfers in the Jabber protocol weren't widely-adopted by Jabber/XMPP clients. Each one has either their own implementation or no implementation at all, which made file transfer very dependent on the client used on both sides.
With Jingle offering a standard for initiating and managing peer-to-peer sessions, in order to serve as a base for all bytestream-based services, nothing more logical than using it to define File Transfers in the same way that is being done with Audio and Video, making it easier to implement by other clients.
The JEP that defines this has already been started by the Jabber team, so I would be working with them to help finish it (with a prototype implementation to help with testing) and afterwards implement a reference module for Psi.
My motivation for this project is quite strong : I'm behind a NAT/Firewall and I can't make efficient file transfers on any IM clients, so I would be really glad to solve this problem.
In order to achieve this, the following milestones are set up:
- 0.0.0 - Preparation: - Get in contact with Peter-StPeter of Jabber Software Foundation; - Get in contact with the Psi responsible; - Gather all the available documentation; - Update all my knowledge about the current status of the work;
- 0.0.1 - Work in the protocol: - Start working at the protocol definition with the responsible group at Jabber; - Implement a prototype to help with the validation of the JEP;
- 0.0.2 - Implement the Protocol: (As soon as the JEP concerning to the Jingle File Transfer is released) - Start the definitive implementation using Psi;
- 0.1.0 - First Prototype: - Write the module that implements the Jingle File Transfer functionality for Psi; - Design Test Cases;
- 0.1.1 - Test Phase: - Test the module as much as possible; - Fix all bugs founded;
- 0.2.0 - Beta Release: - Module with a good maturity level and ready to be tested by the community; - Fix all remaining bugs;
- 1.0.0 - Finished: - Jingle File transfer module ready to be merged with the Psi main tree; - End of the summer of code project;