#!/opt/perl/bin/perl use strict; use utf8; use AnyEvent; use XML::Twig; use Net::XMPP2 qw/xep-86/; use Net::XMPP2::IM::Connection; use Net::XMPP2::Namespaces qw/xmpp_ns/; use Net::XMPP2::Util; use Net::LibIDN qw/idn_prep_resource/; use Encode; sub dumpxml { my $data = shift; my $t = XML::Twig->new; if ($t->safe_parse ("$data")) { $t->set_pretty_print ('indented'); $t->print; print "\n"; } else { print "[$data]\n"; } } binmode STDOUT, ":utf8"; my $j = AnyEvent->condvar; my $res = "Net::XどなPP2"; #my $res = "Net::XMPP2"; my $con = Net::XMPP2::IM::Connection->new ( username => 'admin', password => 'xxxxxx', domain => 'localhost', resource => $res, disable_ssl => 0, ); $con->connect or die "Couldn't connect: $!"; $con->init; $con->reg_cb ( session_ready => sub { my ($con) = @_; print "stream ready!\n" ; # $con->{foo} = AnyEvent->timer (after => 1, cb => sub { return; for (qw/fippo@goodadvice.pages.de elmex@jabber.org ve.symlynx.com jabber.org/) { $con->send_iq (get => sub { my ($w) = @_; $w->addPrefix (xmpp_ns ('disco_info'), ''); $w->emptyTag ([xmpp_ns ('disco_info'), 'query']); }, sub { }, to => $_); # }); $con->send_iq ( get => sub { my ($w) = @_; $w->addPrefix (xmpp_ns ('version'), ''); $w->emptyTag ([xmpp_ns ('version'), 'query']); }, sub { my ($node, $errnode, $err) = @_; unless (defined $node) { print "ERROR: ".($errnode->attr ('from')).": $err->[0]/$err->[3]:" .($err->[1]->name)."\n"; return; } my (@name) = $node->find_all ([qw/version query/], [qw/version name/]); my (@ver) = $node->find_all ([qw/version query/], [qw/version version/]); print "REPL: ".($node->attr ('from')).": ".($name[0]->text). " " .($ver[0]->text)."!\n" if @name and @ver; print "NO VERSION FOUND!\n" unless @name and @ver; }, to => $_, #$con->{domain},#'localhost', #from => $con->jid ); } }, presence_update => sub { my ($con, $roster) = @_; $roster->debug_dump; 1 }, roster_update => sub { my ($con, $roster) = @_; $roster->debug_dump; 1 }, message => sub { my ($con, $msg) = @_; print "Message from: ".$msg->from." to: ".$msg->to.":\n$msg\n"; if ($msg =~ /arsch/si) { $msg->reply ("FOTZE!"); } 1 }, debug_recv => sub { print "RRRRRRRRECVVVVVV:\n"; dumpxml ($_[1]); 1}, debug_send => sub { print "SSSSSSSSENDDDDDD:\n"; dumpxml ($_[1]); 1 }, stream_error => sub { die "ERROR[$_[1]]{$_[2]}\n" }, ); $j->wait;