Psi JFT

= Jingle File Transfer for Psi =

Overview
Jingle File Transfer is a Google Summer of Code 2006 project for Jabber and Psi been developed by Murilo Belluzzo. You can access other students' projects here.

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.

Progress
I copied this from Kevin

(24th - 31st May)
This week was dificult because of google delays and a big exam that I had. I also had some problems with qca-beta2 but Kevin help me. I began to study the code of the libs involved and Psi between one exam and other. I still have to check somethings with more calm but isn't much.


 * Install Darcs - done;


 * Contact the other Jabber students - done;


 * Contact Psi project leader (Kevin) - done;


 * Checkout ejabberd and start a server - postponed;


 * Checkout Psi - done;


 * Install necessary libs (ortp, speex, qt-4.1.2 and qca) - done;


 * How to make a good use of darcs - done (but do not put in practice yet :;


 * Psi code conventions - done;


 * Contact my mentor - done;


 * Google Burocracy days;

(1st - 3th June)
At this point I have a real overview of the project in my mind. I hope to put this in a diagram or something like this if I to conclude its necessary just to help me through the project and start write the code (Yeah I'm late but isn't fair to compair us to Kevin! He know the hole project with closed eyes !! :P ).


 * 1sh - Google Last Burocracy day;


 * To study LibJingle - 40%;


 * To study Psi source - 50%;


 * To study JEP-0166 - 50%;


 * Design fase begin - 10%;


 * Start to do some code finally ! I was getting bored! - 0%;


 * To study JEP-0176, 0177 and 0179 just to clarify somethings - 0%;

Original Project Proposal
Summer of Code 2006 Project Proposal for Jabber Software Foundation

(Personal info removed)

Synopsis

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.

Deliverables:


 * 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;

Project Details:

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;