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

Reply via email to