Now I have to work on the Mozilla end of things. This turns out to be kind of interesting, because of two things that XML-RPC does not have.
1) Sessions. XML-RPC doesn't have sessions, which is fine since it's an application level protocol. XML-RPC typically runs over HTTP, which is a stateless transport protocol and therefore doesn't have sessions either. We can hack around this by mapping a session to a request from an IP address, and then invalidating the session on an XML-RPC logout command. I've heard that some people use cookies to do the same thing, but I would need to hack into the XML-RPC server code to do that. It's probably worth doing at some point.
2) Server side push. As far as I know, the model in HTTP is simple and straightforward. The client has GET or POST, it sends a request to the server, and the server replies back. If it's HTTP 1.1 then the TCP socket can be kept open until a particular page is downloaded, but otherwise it's strictly stimulus/response. If a session times out because the client took too long to send a request or has dropped, then the client will only find out about it when it tries a new request and the server says "I don't know you." There's no way for the server to proactively send a request to the client saying that the client is logged out. There's no such thing as an open channel.
The two features above are making XML-RPC in Mozilla very complicated, because all XML-RPC commands in Mozilla are based on callbacks. This works great when you only have one possible reply from the server. But if the server can reply back at any time saying that the client has timed out, then you need the option to send a login command from the callback. Which in turn will require another callback to handle the response from the server. And this all has to happen transparently to the user.
The above two reasons are why I look at things like BEEP and start drooling. From what I see, BEEP and XATP are designed explicitly for bi-directional client/server communication with open channels, but if I want it to work in Mozilla I'd have to write a BEEP module and, well, I get sucked into enough side projects as it is. Like this weblog.
This is before we get into some of the other interesting things to do, such as parse and integrate the RDF we receive from the server into the Mozilla RDF datasource. I understand RDF and the datasource API pretty well by now, but actually getting it in is problematic. Every time I've looked at Mozilla's IO functionality, it's changed on me. Part of the reason I started work on a Java client is because I just couldn't keep up; pre 1.0, it was a two day adventure doing a cvs update and seeing what had broken and if the libraries had been changed and if it actually ran at all.
So, in order of things needing doing:
1) Switch to SCSI, implement backups and make sure computer works.
2) Look at the XML-RPC code base again and make sure it hasn't rotted.
3) Profit!