TITLE: Simple user-to-user file transfer without configuration in a LAN WHO === Name: Marco Barisione Email: marco@barisione.org XMPP: marco@barisione.org Website: http://www.barisione.org/ Blog: http://www.barisione.org/blog.html DESCRIPTION =========== Two users in the same local network who want to communicate and share files is a common scenario, even on a train it's easy to setup an ad-hoc wireless network but then one has to figure out a way of transmitting the desired information without too much hassle. While there are many solutions to share one or more files, from setting up a Samba share, to a personal directory in a HTTP or FTP server, they have one big common flaw: they do not "just work". As a consequence people often use services relying on an external server (such as email and chat), or removable devices. In some cases it is not even reasonable to do server-based communication, as is the case of meshed networks. An ideal system should automatically discover other users in the neighborhood, list them and let the user choose who to send files. The system should also work without any configuration, without the need to tell one's IP address, and without requiring any operation from the administrator, such as setting up a server or configuring a service. Apple iChat introduced a mechanism to do serverless XMPP (Jabber) connections on local network links, now formalized in the Experimental XEP-0174[1] soon to be promoted to the Draft status. This extension makes use of the ZeroConf mDNS protocol to discover other users with compatible clients in the neighborhood. Collabora Ltd.[2] has just started a project for the OLPC to implement this XEP as a connection manager for the Telepathy[3] framework under the name of telepathy-salut[4]. I propose to work on the addiction of secure authentication and file transfer capabilities to telepathy-salut to provide a simple and secure way to communicate over a LAN. First of all I plan to develop a solution based on a "push" model, where an user choose the recipient and the file to send, then the recipient decide whether to accept the file, similar to how email and chat work. While when using an intermediate server we can rely on it to do user authentication, on a serverless configuration this should be done on a distributed fashion. To implement the authentication mechanisms I plan to take advantage of the just added SASL over TLS support in telepathy-salut, using mDNS to distribute the user certificates needed to authenticate them. Currently telepathy and telepathy-salut lack any file transfer capability, so I plan to add support for XEP-0096[5] internally to telepathy-salut and then port it to use the tubes mechanism and file transfer interfaces[6] when available in the main telepathy branch. On top of that I'm going to write an easy-to-use GTK-based GUI to show available contacts and to initiate and accept file transfers. It should also manage authorizations in a user-friendly way, without bothering the user with technical details about the involved certificates. A further step could be the addition of a shared folders feature, allowing users to select a set of files downloadable by other authorized users. A possible approach is to follow a simple "independent folders" model, similar to personal Samba shares or HTTP folders, then exploring the possibility to implement synchronized folders which are automatically updated when both users are connected, similar to the Windows Live Messenger behavior. Given the modularity of the Telepathy framework it could be possible to support every connection manager with file transfer capabilities, so it could be useful to write connection managers for non-chat protocols, such as Bluetooth. [1] http://www.xmpp.org/extensions/xep-0174.html [2] http://collabora.co.uk/ [3] http://telepathy.freedesktop.org/ [4] http://projects.collabora.co.uk/darcs/telepathy/telepathy-salut/ [5] http://www.xmpp.org/extensions/xep-0096.html [6] http://www.cs.aau.dk/~mchro/telepathy-spec.tubes/ DETAILED BIO ============ My name is Marco Barisione, I am currently studying Computer Engineering at the Politecnico di Torino, Torino, Italy. For my third-year dissertation I wrote a new syntax highlighting engine for GtkSourceView, that will be included in GtkSourceView 2. As a spin-off project of the highlighting engine I resurrected EggRegex (a regular expression library based on PCRE) because it was buggy, incomplete and abandoned. EggRegex, now called GRegex, has been included in the development version of glib, so it will be available in glib 2.14. I’m currently working on GSpell, a GObject-based version of Enchant, to add spell checking support into the GTK+ stack. I maintain and host on my server Planet GNOME Italia at http://gnome.ocracy.org/. I also wrote some Windows programs, such as WinCalendarTime (http://wincalendartime.sf.net/), a replacement for the standard Windows XP clock, and HotKeyBind (http://hotkeybind.sf.net/), a program that lets you use shortcut key combinations to do common tasks. Some years ago I collaborated on the Italian translation of "Dive Into Python" by Mark Pilgrim.