[249] in BarnOwl Developers
[D-O-H] r423 - trunk/conf.asedeno/owl/modules
daemon@ATHENA.MIT.EDU (asedeno@MIT.EDU)
Thu Oct 29 18:04:06 2009
Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
To: dirty-owl-hackers@mit.edu
From: asedeno@MIT.EDU
Reply-to: dirty-owl-hackers@MIT.EDU
Date: Sun, 29 Oct 2006 13:02:03 -0500 (EST)
Author: asedeno
Date: 2006-10-29 13:02:03 -0500 (Sun, 29 Oct 2006)
New Revision: 423
Modified:
trunk/conf.asedeno/owl/modules/jabber.pl
Log:
More updates to jabber.pl
Modified: trunk/conf.asedeno/owl/modules/jabber.pl
===================================================================
--- trunk/conf.asedeno/owl/modules/jabber.pl 2006-10-29 16:55:30 UTC (rev 422)
+++ trunk/conf.asedeno/owl/modules/jabber.pl 2006-10-29 18:02:03 UTC (rev 423)
@@ -32,18 +32,21 @@
return if ($client == undef);
my $status = $client->Process(0);
- if ($status == undef)
+ if ($status == 0 # No data received
+ || $status == 1) # Data received
{
- #Admin message about disconnect here.
- #Also consider getting out of @::onMainLoop.
+ }
+ else #Error
+ {
+ queue_admin_msg("Jabber disconnected.");
+ $client = undef;
return;
}
if ($::shutdown)
{
- #Admin message about disconnect here.
- #Also consider getting out of @::onMainLoop.
$client->Disconect();
+ $client = undef;
return;
}
}
@@ -61,29 +64,30 @@
jabberlogout => \&cmd_logout,
{ summary => "Log out of jabber" }
);
-
- # owl::new_command(jabberreply => \&cmd_reply);
owl::new_command(
jwrite => \&cmd_jwrite,
{
description => "Send a Jabber Message",
- usage => "jwrite JID"
+ usage => "jwrite JID [-t thread]"
}
);
-
}
sub cmd_login
{
if ($client != undef)
{
- # Admin message here.
+ queue_admin_msg("Already logged in.");
return;
}
# These strings should not be hard-coded here.
$client = Net::Jabber::Client->new();
- $client->SetMessageCallBacks(chat => \&process_incoming_chat_message);
+ $client->SetMessageCallBacks(chat => \&process_incoming_chat_message,
+ error => \&process_incoming_error_message,
+ groupchat => \&process_incoming_groupchat_message,
+ headline => \&process_incoming_headline_message,
+ normal => \&process_incoming_normal_message);
my $status = $client->Connect(hostname => 'jabber.mit.edu',
tls => 1,
port => 5222,
@@ -109,6 +113,7 @@
resource => 'owl');
$client->PresenceSend(priority => 1);
+ queue_admin_msg("Connected to jabber as ".$jid->GetJID('full'));
return "";
}
@@ -119,28 +124,13 @@
{
$client->Disconnect();
$client = undef;
- # Admin message here.
+ queue_admin_msg("Jabber disconnected.");
}
+ return "";
}
-#our $repl_msg = undef;
-sub cmd_reply
-{
- my $repl_msg = owl::getcurmsg();
- if (!$repl_msg->is_jabber)
- {
- # owl::getcurmsg() doesn't work from the callback.
- $repl_msg = undef;
- return;
- }
- my $to = ($repl_msg->is_incoming)
- ? $repl_msg->sender
- : $repl_msg->recipient;
-
- owl::start_edit_win("jwrite ".$to, \&process_owl_jabber_reply);
-}
-
our $jwrite_to;
+our $jwrite_thread;
sub cmd_jwrite
{
if (!$client)
@@ -148,9 +138,19 @@
# Error here
return;
}
- $jwrite_to = $_[1];
+
+ $jwrite_to = "";
+ $jwrite_thread = "";
+ my @args = @_;
+ my $argsLen = @args;
+ for (my $i = 1; $i < $argsLen; $i++)
+ {
+ $args[$i] =~ /^-t$/ && ($jwrite_thread = $args[$i++] and next $i);
+ $jwrite_to = $args[$i];
+ }
+
if(!$jwrite_to) {
- owl::error("Usage: jwrite JID");
+ owl::error("Usage: jwrite JID [-t thread]");
return;
}
owl::message("Type your message below. End with a dot on a line by itself. ^C will quit.");
@@ -162,8 +162,6 @@
sub process_owl_jwrite
{
my $body = shift;
-# my $repl_msg = shift;
- my $repl_msg = owl::getcurmsg();
my $j = new Net::XMPP::Message;
$j->SetMessage(to => $jwrite_to,
@@ -171,6 +169,7 @@
type => 'chat',
body => $body
);
+ $j->SetThread($jwrite_thread) if ($jwrite_thread);
my $m = j2o($j, 'out');
owl::queue_message($m);
@@ -178,35 +177,33 @@
# Errors?
}
-sub process_owl_jabber_reply
+### XMPP Callbacks
+
+sub process_incoming_chat_message
{
- my $reply = shift;
-# my $repl_msg = shift;
- my $repl_msg = owl::getcurmsg();
+ my ($session, $j) = @_;
+ owl::queue_message(j2o($j, 'in'));
+}
- my $j = new Net::XMPP::Message;
- $j->SetMessage(to => $repl_msg->is_incoming
- ? $repl_msg->{sender}
- : $repl_msg->{recipient},
- from => $repl_msg->is_incoming
- ? $repl_msg->{recipient}
- : $repl_msg->{sender},
- type => $repl_msg->{jtype},
- body => $reply
- );
+sub process_incoming_error_message
+{
+ my ($session, $j) = @_;
+ queue_admin_msg("Error ".$j->GetErrorCode()." sending to ".$j->GetFrom('jid')->GetJID('base'));
+}
- $j->SetSubject($repl_msg->{subject}) if ($repl_msg->{subject});
- $j->SetSubject($repl_msg->{thread}) if ($repl_msg->{thread});
-
- my $m = j2o($j, 'out');
- owl::queue_message($m);
- $client->Send($j);
- # Errors?
+sub process_incoming_groupchat_message
+{
+ my ($session, $j) = @_;
+ owl::queue_message(j2o($j, 'in'));
}
-### XMPP Callbacks
+sub process_incoming_headline_message
+{
+ my ($session, $j) = @_;
+ owl::queue_message(j2o($j, 'in'));
+}
-sub process_incoming_chat_message
+sub process_incoming_normal_message
{
my ($session, $j) = @_;
owl::queue_message(j2o($j, 'in'));
@@ -224,32 +221,46 @@
direction => $dir);
my $reply_to;
- if($dir eq 'out') {
- $reply_to = $j->GetTo;
- } else {
- $reply_to = $j->GetFrom;
- }
- $props{replycmd} = $props{replysendercmd} = "jwrite $reply_to";
-
if ($j->DefinedTo())
{
my $jid = $j->GetTo('jid');
$props{recipient} = $jid->GetJID('base');
$props{to_jid} = $jid->GetJID('full');
+ $reply_to = $props{recipient} if ($dir eq 'out');
}
if ($j->DefinedFrom())
{
my $jid = $j->GetFrom('jid');
$props{sender} = $jid->GetJID('base');
$props{from_jid} = $jid->GetJID('full');
+ $reply_to = $props{sender} if ($dir eq 'in');
}
- $props{jtype} = $j->GetType() if ($j->DefinedType());
+
+ $props{jtype} = $j->GetType();
+
+ $props{replycmd} = "jwrite";
+ $props{jtype} =~ /^(?:headline|error)/ && {$props{replycmd} = undef};
+
$props{subject} = $j->GetSubject() if ($j->DefinedSubject());
$props{body} = $j->GetBody() if ($j->DefinedBody());
- $props{thread} = $j->GetThread() if ($j->DefinedThread());
+ if ($j->DefinedThread())
+ {
+ $props{thread} = $j->GetThread() if ($j->DefinedThread());
+ $props{replycmd} .= " -t $props{thread}";
+ }
$props{error} = $j->GetError() if ($j->DefinedError());
$props{error_code} = $j->GetErrorCode() if ($j->DefinedErrorCode());
+ $props{replycmd} .= " $reply_to";
+ $props{replysendercmd} = $props{replycmd};
-
return owl::Message->new(%props);
}
+
+sub queue_admin_msg
+{
+ my $err = shift;
+ my $m = owl::Message->new(type => 'admin',
+ direction => 'none',
+ body => $err);
+ owl::queue_message($m);
+}