use Fcntl;
use strict;
+
+use vars qw($VERSION $BRANCH);
+$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
+$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0;
+$main::build += $VERSION;
+$main::branch += $BRANCH;
+
use vars qw(%work @msg $msgdir %valid %busy $maxage $last_clean
@badmsg @swop $swopfn $badmsgfn $forwardfn @forward $timeout $waittime
$queueinterval $lastq $importfn $minchunk $maxchunk $bulltopriv);
# first look for any messages in the busy queue
# and cancel them this should both resolve timed out incoming messages
# and crossing of message between nodes, incoming messages have priority
+
if (exists $busy{$fromnode}) {
my $ref = $busy{$fromnode};
my $tonode = $ref->{tonode};
- dbg("Busy, stopping msgno: $ref->{msgno} -> $fromnode") if isdbg('msg');
+ dbg("Busy, stopping msgno: $ref->{msgno} $fromnode->$tonode") if isdbg('msg');
$ref->stop_msg($self->call);
}
$ref->swop_it($self->call);
# look for 'bad' to addresses
- if ($ref->dump_it) {
+ if ($ref->dump_it($self->call)) {
$ref->stop_msg($self->call);
dbg("'Bad' message $ref->{to}") if isdbg('msg');
Log('msg', "'Bad' message $ref->{to}");
$busy{$self->{tonode}} = $self;
$work{$self->{tonode}} = $self;
$self->{lastt} = $main::systime;
- $dxchan->send(DXProt::pc28($self->{tonode}, $self->{fromnode}, $self->{to}, $self->{from}, $self->{t}, $self->{private}, $self->{subject}, $self->{origin}, $self->{rrreq}));
+ my ($fromnode, $origin);
+ if ($dxchan->is_arcluster) {
+ $fromnode = $self->{origin};
+ $origin = $self->{fromnode};
+ } else {
+ $fromnode = $self->{fromnode};
+ $origin = $self->{origin};
+ }
+ $dxchan->send(DXProt::pc28($self->{tonode}, $fromnode, $self->{to}, $self->{from}, $self->{t}, $self->{private}, $self->{subject}, $origin, $self->{rrreq}));
}
# get the ref of a busy node
}
# delete any messages to 'badmsg.pl' places
- if ($ref->dump_it) {
+ if ($ref->dump_it('')) {
dbg("'Bad' TO address $ref->{to}") if isdbg('msg');
Log('msg', "'Bad' TO address $ref->{to}");
$ref->del_msg;
sub dump_it
{
my $ref = shift;
+ my $call = shift;
my $i;
for ($i = 0; $i < @badmsg; $i += 3) {
$tested = $ref->{from} if $field eq 'F';
$tested = $ref->{origin} if $field eq 'O';
$tested = $ref->{subject} if $field eq 'S';
+ $tested = $call if $field eq 'I';
if (!$pattern || $tested =~ m{$pattern}i) {
return 1;