EMDIS-ECS

 view release on metacpan or  search on metacpan

script/ecstool  view on Meta::CPAN

    my ($fh, $tempfilename) = tempfile($template,
                                       DIR    => $targetdir,
                                       SUFFIX => '.fml');
    die "Unable to open tempfile in directory $targetdir: $!"
        unless $fh;
    # get exclusive lock
    # locking strategy is needed in order to avoid possibly of
    # ecs_scan_mail daemon reading file before we're finished writing it
    if(!flock($fh, LOCK_EX | LOCK_NB))
    {
        my $err = $!;
        close $fh;
        die "Unable to lock output file $tempfilename: $err";
    }
    my $err = '';
    print $fh $msg_text
        or $err = "Unable to write output file $tempfilename: $!";
    flock($fh, LOCK_UN);
    close $fh;
    chmod $EMDIS::ECS::FILEMODE, $tempfilename;

    print "Message copied to $targetdir directory.\n";
}

# meta
if($opt_meta) {
    die "Invalid number of parameters specified for --meta command.\n$usage"
        unless $#ARGV >= 1;
    my ($node_id, $msg_type, $seq1, $seq2) = @ARGV;
    $ECS_NODE_TBL->lock()     # lock node_tbl
        or die "Error: unable to lock node_tbl: " .
            $ECS_NODE_TBL->ERROR . "\n";
    my $node = $ECS_NODE_TBL->read($node_id);
    $ECS_NODE_TBL->unlock();  # unlock node_tbl
    die "Error: node '$node_id' not defined.\n"
        unless $node;
    for ($msg_type) {
        /^READY/i and do {
            $err = send_ecs_message($node_id, '',
                "msg_type=READY\n",
                ((exists $node->{in_seq}) &&
                    ((!exists $node->{ready_num_disabled}) ||
                     not is_yes($node->{ready_num_disabled}))
                    ? "last_recv_num=" . $node->{in_seq}
                    : "") . "\n",
                ((exists $node->{out_seq}) &&
                    ((!exists $node->{ready_num_disabled}) ||
                     not is_yes($node->{ready_num_disabled}))
                    ? "last_sent_num=" . $node->{out_seq}
                    : "") . "\n",
                ((exists $node->{doc_in_seq}) &&
                    ((!exists $node->{ready_num_disabled}) ||
                     not is_yes($node->{ready_num_disabled}))
                    ? "last_recv_doc=" . $node->{doc_in_seq}
                    : "") . "\n",
                ((exists $node->{doc_out_seq}) &&
                    ((!exists $node->{ready_num_disabled}) ||
                     not is_yes($node->{ready_num_disabled}))
                    ? "last_sent_doc=" . $node->{doc_out_seq}
                    : "") . "\n",
                "# Hello Partner, I am alive. " . rand() . "\n");
            last;
        };
        /^MSG_ACK/i and do {
            die "Error: seq_num not defined.\n"
                unless defined $seq1;
            die "Error: seq_num not numeric: '$seq1'\n"
                unless $seq1 =~ /^\d+$/;
            if(defined $seq2)
            {
                die "Error: seq2 not numeric: '$seq2'\n"
                    unless $seq2 =~ /^\d+$/;
                die "Error: seq2 ($seq2) cannot be less than seq_num ($seq1)\n"
                    if $seq2 < $seq1;
            }
            else
            {
                $seq2 = $seq1;
            }
            my $seq_num;
            for($seq_num = $seq1; $seq_num <= $seq2; $seq_num++)
            {
                $err = send_ecs_message($node_id, '',
                    "msg_type=MSG_ACK\n",
                    "seq_num=$seq_num\n",
                    "# 10-4 " . rand() . "\n");
                die "Error sending email message: $err\n"
                    if $err;
            }
            last;
        };
        /^RE_SEND/i and do {
            die "Error: seq_num not defined.\n"
                unless defined $seq1;
            my $part_num = '';
            if($seq1 =~ /^(\d+):(\d+)$/)
            {
                $seq1 = $1;
                $part_num = $2;
            }
            elsif($seq1 !~ /^\d+$/)
            {
                die "Error: unable to parse seq_num: '$seq1'\n";
            }
            if(defined $seq2)
            {
                die "Error: seq2 not numeric: '$seq2'\n"
                    unless $seq2 =~ /^\d+$/;
                die "Error: seq2 ($seq2) cannot be less than seq_num ($seq1)\n"
                    if $seq2 < $seq1;
                die "Error: seq2 ($seq2) not expected when part_num " .
                    "specified for seq_num ($seq1:$part_num)\n"
                    if $part_num;
            }
            else
            {
                $seq2 = $seq1;
            }
            my $seq_num;
            for($seq_num = $seq1; $seq_num <= $seq2; $seq_num++)
            {



( run in 1.153 second using v1.01-cache-2.11-cpan-39bf76dae61 )