[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jabber-jdev
Subject:    [jdev] Net::Jabber Process() blocking
From:       Jeremy Lunn <jeremy () austux ! net>
Date:       2005-05-29 10:01:55
Message-ID: 20050529100155.GC31507 () austux ! net
[Download RAW message or body]

Here's a quick and nasty script I wrote to quickly return a list of
users logged in, using service discovery (using it with jabberd 2.0s8).
It works fine 80% of the time, but sometimes it blocks at the Process 
line, even though there's a timeout specified.  Any reason as to why it
might be doing this?  Any way I could debug it?



#!/usr/bin/perl -w

binmode STDOUT, ':utf8';

use Net::Jabber qw(Client);
my $con = new Net::Jabber::Client();

$con->SetCallBacks("iq" => \&InIQ, "message" => \&InMessage);

$con->Connect(hostname=>'jabber.org.au') or die "Server connect
failed!\n";
$con->AuthSend(username=>'jeremy',
                 password=>'secret',
                 resource=>'sessions') and die "Login failed!\n";

my $req = new Net::Jabber::IQ();
$req->SetIQ(type=>"get",
            to=>"jabber.org.au");
my $query = $req->NewQuery('http://jabber.org/protocol/disco#items');
$query->SetNode('sessions');
$con->Send($req);
$con->Process(10);
$con->Disconnect();

sub InIQ {
  my ($sid,$IQ) = @_;
  if (($IQ->GetType() eq "result") and ($IQ->GetQueryXMLNS() eq
"http://jabber.org/protocol/disco#items") and
($IQ->GetQuery()->GetNode() eq 'sessions')) {
    foreach $item ($IQ->GetQuery()->GetItems()) {
      my $jid = $item->GetJID();
      if ($jid eq 'jeremy@jabber.org.au/sessions') {
        next;
      }
      print $item->GetJID() . "\n";
    }
  }
}


Any ideas?

Thanks,

Jeremy
-- 
Jeremy Lunn
Melbourne, Australia
Homepage: http://www.austux.net/
_______________________________________________
jdev mailing list
jdev@jabber.org
http://mail.jabber.org/mailman/listinfo/jdev
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic