diff --git a/gosa-si/gosa-si-server b/gosa-si/gosa-si-server
index 5432c1a8e2525deb0a2dd508baefa87df72632d2..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
-# TODO implement reciever translation
- my @reciever_l = split(/,/, $message_to);
+ my @message_to_l = split(/,/, $message_to);
+ my %receiver_h;
+ foreach my $receiver (@message_to_l) {
+ if ($receiver =~ /^u_([\s\S]*)$/) {
+ $receiver_h{$1} = 0;
+ } elsif ($receiver =~ /^g_([\s\S]*)$/) {
+# TODO implement receiver translation
+ } else {
+ my $sbjct = &encode_base64(@{$hit}[1]);
+ my $msg = &encode_base64(@{$hit}[7]);
+ &daemon_log("M WARNING: unknown receiver '$receiver' for a user-message 'sbjct - msg'", 3);
+ }
+ }
+ my @receiver_l = keys(%receiver_h);
+
my $message_id = @{$hit}[0];
#add each outgoing msg to messaging_db
- my $reciever;
- foreach $reciever (@reciever_l) {
+ my $receiver;
+ foreach $receiver (@receiver_l) {
my $sql_statement = "INSERT INTO $messaging_tn (id, subject, message_from, message_to, flag, direction, delivery_time, message, timestamp) ".
"VALUES ('".
$message_id."', '". # id
@{$hit}[1]."', '". # subject
@{$hit}[2]."', '". # message_from
- $reciever."', '". # message_to
+ $receiver."', '". # message_to
"none"."', '". # flag
"out"."', '". # direction
@{$hit}[6]."', '". # delivery_time
")";
&daemon_log("M DEBUG: $sql_statement", 1);
my $res = $messaging_db->exec_statement($sql_statement);
- &daemon_log("M INFO: message '".@{$hit}[0]."' is prepared for delivery to reciever '$reciever'", 5);
+ &daemon_log("M INFO: message '".@{$hit}[0]."' is prepared for delivery to receiver '$receiver'", 5);
}
# set incoming message to flag d=deliverd
# 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;