[jdev] Perl Net::XMPP::Roster functionality?

jdev at eriko.mobi jdev at eriko.mobi
Thu Sep 13 23:17:10 CDT 2007


Hi, all,

I'm trying to write a simple Perl script to log in, get a list of
subscribed JIDs that are online, and then log off.  The documentation
for Net::XMPP indiates that a Roster object will do this:

http://search.cpan.org/~reatmon/Net-XMPP-1.0/lib/Net/XMPP/Protocol.pm
    Roster() - returns a Net::XMPP::Roster object.  This will automatically
               intercept all of the roster and presence packets sent from
               the server and give you an accurate Roster.  For more
               information please read the man page for Net::XMPP::Roster.

And
http://search.cpan.org/~reatmon/Net-XMPP-1.0/lib/Net/XMPP/Roster.pm
  online(jid) - return 1 if the JID is online, undef otherwise.  The
                jid can either be a string, or a Net::XMPP::JID object.

Here's a simple test program that should do what I want, however the
online() method just doesn't seem to return anything.  Am I completely
wrong about what the Roster object does, or could this be a bug?

Thanks,
Erik

# Simple test code taken from
# http://www.pervasive-network.org/SPIP/Google-Talk-with-perl-bis and
# modified to try to grab Presence updates via the Roster.
use Net::XMPP;

my $username = 'tester1';
my $password = 'tester1pass';

my $user = 'tester2 at gmail.com';
my $resource = 'TestingPerl';
my $hostname = 'talk.google.com';
my $port = 5222;
my $componentname = 'gmail.com';
my $connectiontype = 'tcpip';
my $tls = 1;

# Connect to Google Talk
my $Connection = new Net::XMPP::Client();
$Connection->Connect(   hostname => $hostname,
                        port => $port,
                        componentname => $componentname,
                        connectiontype => $connectiontype,
                        tls => $tls );
my $sid = $Connection->{SESSION}{id};
$Connection->{STREAM}->{SIDS}->{$sid}->{hostname} = $componentname;
$Connection->AuthSend(  username => $username,
                        password => $password,
                        resource => $resource );

# Send empty presenece => I'm available!
$Connection->PresenceSend();
my $r = Net::XMPP::Roster->new(connection=>$Connection);
$Connection->RosterRequest();

my $isOnline = $r->online($user);
print "$user isOnline = $isOnline\n";

$Connection->Disconnect();
exit();




More information about the JDev mailing list