#!/opt/perl/bin/perl use strict; use AnyEvent; use AnyEvent::XMPP::IM::Connection; my $DEBUG = 0; # set to 1 if you want to see a protocol dump my $TIMEOUT = 30; # timeout the whole program after $TIMEOUT seconds binmode STDOUT, ":utf8"; my ($jid, $pass) = @ARGV; my $j = AnyEvent->condvar; my $con = AnyEvent::XMPP::IM::Connection->new ( jid => $jid, password => $pass, initial_presence => -5, ); $con->reg_cb ( debug_recv => sub { print "< $_[1]\n" }, debug_send => sub { print "> $_[1]\n" }, ) if $DEBUG; my $timer = AnyEvent->timer ( after => 10, cb => sub { warn "got timeout, exiting..."; $j->broadcast } ); $con->reg_cb ( session_ready => sub { my ($con) = @_; }, error => sub { my ($con, $error) = @_; warn "error: " . $error->string . "\n"; }, disconnect => sub { my ($con, $host, $port, $message) = @_; warn "disconnected from $host:$port: $message\n"; $j->broadcast; }, roster_update => sub { my ($con, $roster, $contacts) = @_; for my $contact ($roster->get_contacts) { print "contact: " . $contact->jid . ", name: " . $contact->name . ", groups: " . (join ",", $contact->groups) . ", subscription: " . $contact->subscription . ", ask: " . $contact->ask . "\n"; } $j->broadcast; } ); $con->connect; $j->wait;