I have a set of RVP modules I'd like to contribute to CPAN, which are described below; they can be downloaded from http://davidrobins.net/code/RVP.tar.gz (not in "CPAN distribution" format yet) for perusal. Note that the modules there are still named 'RVP' and 'RVP::*', I plan to add the 'Net::' prefix to each as outlined below so they fit better with CPAN's module hierarchy.
RVP is the Rendez-Vous Protocol, which is used by Microsoft's Exchange instant messenger; it is _not_ the same as the MSN IM protocol. It is officially documented at http://msdn.microsoft.com/library/en-us/dnmes2k/html/rvp.asp although that document is (perhaps not unexpectedly) incomplete in terms of the requirements to build a client or server. Searching the Internet will reveal related proposals and specifications, which are a good start and will be included with the module distribution, although to verify details some packet logging was required; fortunately the protocol is plain text (HTTP with some DAV (XML) payload elements, which in turn occasionally encapsulate a MIME message). I don't believe there is another perl module that "speaks" this protocol; in fact, I wasn't able to even find an open source client for it at all (information regarding one would be helpful). I do have a working client (although the user interface is extremely primitive and hardly worthy of the name), and the framework allows for the easy creation of "bots". I've broken the code up as follows: support: HTTP::Parser - this was recently submitted to CPAN after an earlier discussion on this list; it was suggested that it be incorporated into libwww-perl, but nothing further was heard about it. Used by Net::RVP::Server. Event::IO::Linear, Event::IO::Listener - see earlier post to module-authors; used by RVP::Server. main: Net::RVP - main module, handles login, querying users, session creation, communication with the server, internal parsing, etc.; there is also a notify method that processes incoming messages (see RVP::Server) Net::RVP::Session - session object; users can be added to it and messages sent Net::RVP::User - information about a user e.g. RVP URL, email, real name, online status, inactivity time Net::RVP::Server - the protocol requires an HTTP server to get notifications (e.g. messages), this implements one using the Event.pm framework; this module is not _required_ but is but one possible implementation. Its job is to listen for HTTP requests, translate them into HTTP::Request objects, and pass them to the main RVP object's notify method. It could be replaced by e.g. a POE-based listener if desired. It uses HTTP::Parser Net::RVP::Sink - this is meant to be derived from and has methods that may be overridden to hande of various events: joins, parts, messages, watched user status change, etc. test: client.pl - a very primitive client (I'm better at the protocol work than making a pretty interface... and this client fulfils my requirements, although if someone later wants to whip up a GUI or curses client with these modules, I'd be happy to include it in the distribution). -- Dave Isa. 40:31
