Psi Link-local messaging

User:JasonMcC Blogging about SOC here


 * I have modified the deadlines I initially set quite radically. (The 3rd task should be done concurrently with the others and it has taken me longer to get into the project than I anticipated).

Todo right now
Fix the broken builds on my computer Really need to get dns_sd working as a plugin for netnames! This is taking way longer than i thoght... Concurrently start playing with ambrosia code as I need to ASAP.

very rough design sketch

Week 8 (12th - 19th July)
* Looking at ambrosia code, doesn't seem to hard to extend * Wrote some dns_sd.h code and got it to work using the avahi compat library. There were a few problems, but it was nice when it worked. I was able to publish and browse services. * There doesn't seem to be ANY documentation about libavahi-qt. Although it would break dns_sd.h compat, avahi complains to stdout if you use its dns_sd.h compat. * Looking at iris: some files seem to be named poorly, like netnames.cpp and netnames_jdns.cpp which have nothing really in common - in fact netnames.cpp uses netnames_jdns.cpp as a plugin if i'm not mistaken.

Week 7
* Looking at code still * As a side note, looking for a better editor on linux - cream is pretty good. (I'm a vim n00b) * Looking at big picture stuff. XEPs, XML etc. * A bit sick this week

Week 6
* Looking at code in iris a LOT. Lack of comments is bad! Especially when funky things are happening, and there's multiple layers of abstraction - you can only keep so many things in your head at once. * Used doxygen with everything turned on to produce some useful pages: http://www.netsoc.tcd.ie/~jason/docs/

Week 5 (21th - 28th June)

 * Disruption due to moving house this week...

Iâ€™ve still been looking at code, Qt networking is pretty nice. Still have been looking at Justinâ€™s code and thinking more about the design of the whole thing. I want to adapt his service browsing code to be able to use the Apple dns_sd.h as well as the current jdns backend it uses. Also looked a good bit at his Ambrosia jabber server, because thatâ€™s what my design (itâ€™s a proxy jabber server) will be working from. Also looked at the Jabber XMPP RFCs a bit.

On the administrative side, I sent my 'proof of enrollment' to Google.

http://developer.kde.org/documentation/library/cvs-api/kdelibs-apidocs/dnssd/html/servicebrowser_8cpp-source.html is a nice example of dns_sd.h and Qt for me

Week 4 (14th - 20th June)

 * Fixed problems I was having with QCA and others.
 * Read some more about Qt
 * Looking at the irisnet program for dns service announcement, testing it with trillian pro on another computer.
 * Looking at ambrosia jabber server

Week 3 (7th - 13th June)

 * Have been playing around with sources mostly... (Still can't compile QCA, I think it might be a qmake issue).


 * Have been reading "C++ GUI Programming with QT". Good book.


 * Learned a good bit on mDNS, dns-sd and the APIs from Zeroconf book and online doc. Played around with Avahi on linux discovering peers on my network etc. Very nice technology.

Week 2 (31st May - 6th June)
I was still doing exams up to the 2nd June.

Since then I set up my build environment, got and compiled the psi source and did some background reading. I got the Zeroconf book by Stuart Chesire and started reading it. Checked out iris from psi cvs. Tried to checkout development psi, however darcs is given me bother because i use a http proxy and libcurl needs to have that specified in the program, so i might need to recompile darcs or run a local squid proxy to provide the functionality. Setting DARCS_PROXYUSERPWD should work but it doesn't - will check source later. or not since it's written in Haskell ;) Solved that problem, tried connecting to a authenticationless proxy over ssh, then realised I had an environment variable problem (http_proxy not set correctly or something i think), so that problem dissappeared. D'oh!

Sorted out tax matters with Google during this time too.

Week 1 (24th - 30th May)
I was doing exams during this period and only looked around the wiki and read a little during this time.

= My original proposal =

Relevant URLS
http://wiki.jabber.org/index.php/Summer_of_Code_2006 http://xmpp.org/extensions/xep-0174.html http://www.porchdogsoft.com/products/howl/ http://www.zeroconf.org/

Motivation
Link local messaging has been getting more popular ever since Apple released their iChat instant messenger with rendezvous support. It is now supported in the Gaim, Adium, Fire, the Gizmo, and Trillian Pro instant messengers. The Psi Jabber client could also benefit from this feature as it would enable users to message each other without the need of a jabber server. Home and Small Office users will find such a feature particularly appealing. I have been impressed by the zeroconf networking technology since watching a Google tech-talk given by Dr. Stuart Cheshire from Apple. I am inspired to work on Psi/Jabber since I am a big user of instant messaging and like the open nature of Jabber. I have been using Jabber for a few years now. The networking society in my college (which I am an officer of) runs an external Jabber server (tcdnetsoc.org) which we connect to. I have also been using Google Talk which obviously uses the XMPP protocol.

Architecture
I will not be commencing work on the project until my exams finish (1st June).


 * Initially, I plan to integrate zeroconf with Psi by focusing on the discovery part. This will add a new dependency for mDNS/DNS-SD in the Psi codebase. Two excellent open-source libraries are howl/avahi, which offer similar API's to Apple's Bonjour, however Howl is no longer actively developed by Porchdog software and Avahi is not multiplatform. I need to decide what implementation to go with....


 * I will then implement the Link-local messaging protocol as specified in XEP-0174.


 * The last part of the project will be to integrate the link local messaging changes into the Psi GUI using the Qt4 toolkit.


 * Integration testing will commence after this date.

I will be delivering documentation and source tarballs at these dates.

Methodology

 * I will use unit tests where possible.


 * I will spend time discussing my implementation with the Psi developers and will be looking for feedback on people's feelings about the experimental XEP-0174.


 * I will obviously follow the relevant code and documentation guidelines.