diff --git a/gosa-si/gosa-si-server b/gosa-si/gosa-si-server
index 45d0b2c1e49ef601d1469f8880ea5cd7f48a7712..c5488c3201612f26c58b4b9d31b1a463dc331c56 100755 (executable)
--- a/gosa-si/gosa-si-server
+++ b/gosa-si/gosa-si-server
# create outgoing messages
my $message_to = @{$hit}[3];
-
# translate message_to to plain login name
my @message_to_l = split(/,/, $message_to);
my %receiver_h;
# reciver is logged in nowhere
if (not ref(@$res[0]) eq "ARRAY") { next; }
- # receiver is logged in at host
- my $receiver_host = @{@{$res}[0]}[0];
-
- # fetch key to encrypt msg propperly for usr/host
- $sql = "SELECT * FROM $known_clients_tn WHERE (hostname='$receiver_host')";
- &daemon_log("0 DEBUG: $sql", 7);
- $res = $known_clients_db->exec_statement($sql);
- my $receiver_key = @{@{$res}[0]}[2];
-
- my %data = ('subject' => $subject, 'message' => $message, 'usr' => $receiver);
- my $out_msg = &build_msg("usr_msg", $server_address, $receiver_host, \%data );
- my $error_state = &send_msg_to_target($out_msg, $receiver_host, $receiver_key, "usr_msg", 0);
+ my $send_succeed = 0;
+ foreach my $hit (@$res) {
+ my $receiver_host = @$hit[0];
+ &daemon_log("M DEBUG: user '$receiver' is logged in at host '$receiver_host'", 7);
+
+ # fetch key to encrypt msg propperly for usr/host
+ my $sql = "SELECT * FROM $known_clients_tn WHERE (hostname='$receiver_host')";
+ &daemon_log("0 DEBUG: $sql", 7);
+ my $res = $known_clients_db->exec_statement($sql);
+
+ # host is already down
+ if (not ref(@$res[0]) eq "ARRAY") { next; }
+
+ # host is on
+ my $receiver_key = @{@{$res}[0]}[2];
+ my %data = ('subject' => $subject, 'message' => $message, 'usr' => $receiver);
+ my $out_msg = &build_msg("usr_msg", $server_address, $receiver_host, \%data );
+ my $error = &send_msg_to_target($out_msg, $receiver_host, $receiver_key, "usr_msg", 0);
+ if ($error != 0 ) {
+ $send_succeed++ ;
+ }
+ }
- if ($error_state == 0) {
- # set outgoing msg at db to deliverd
- my $sql = "UPDATE $messaging_tn SET flag='d' WHERE (id='$msg_id' AND direction='out' AND message_to='$receiver')";
- &daemon_log("0 DEBUG: $sql", 7);
- my $res = $messaging_db->exec_statement($sql);
- }
- }
+ if ($send_succeed) {
+ # set outgoing msg at db to deliverd
+ my $sql = "UPDATE $messaging_tn SET flag='d' WHERE (id='$msg_id' AND direction='out' AND message_to='$receiver')";
+ &daemon_log("0 DEBUG: $sql", 7);
+ my $res = $messaging_db->exec_statement($sql);
+ }
+ }
$kernel->delay_set('watch_for_delivery_messages', $messaging_db_loop_delay);
return;