# this is periodic processing
if (!$self || !$line) {
- if ($main::systime > $lastq + $queueinterval) {
+ if ($main::systime >= $lastq + $queueinterval) {
# wander down the work queue stopping any messages that have timed out
for (keys %busy) {
my $t = cltounix($f[5], $f[6]);
my $stream = next_transno($f[2]);
+ $f[13] = $self->call unless $f[13] && $f[13] gt ' ';
my $ref = DXMsg->alloc($stream, uc $f[3], $f[4], $t, $f[7], $f[8], $f[13], '0', $f[11]);
# fill in various forwarding state variables
$file = new IO::File "$fn";
if (!$file) {
dbg('err', "Error reading $fn $!");
+ Log('err', "Error reading $fn $!");
return undef;
}
$size = -s $fn;
$line = <$file>; # first line
+ if ($size == 0 || !$line) {
+ dbg('err', "Empty $fn $!");
+ Log('err', "Empty $fn $!");
+ return undef;
+ }
chomp $line;
$size -= length $line;
if (! $line =~ /^===/o) {
dbg('err', "corrupt first line in $fn ($line)");
+ Log('err', "corrupt first line in $fn ($line)");
return undef;
}
$line =~ s/^=== //o;
$size -= length $line;
if (! $line =~ /^===/o) {
dbg('err', "corrupt second line in $fn ($line)");
+ Log('err', "corrupt second line in $fn ($line)");
return undef;
}
$line =~ s/^=== //o;
$file = new IO::File;
if (!open($file, $fn)) {
dbg('err' ,"Error reading $fn $!");
+ Log('err' ,"Error reading $fn $!");
return undef;
}
@out = map {chomp; $_} <$file>;
my $call = shift;
my $ref;
my $clref;
- my @nodelist = DXChannel::get_all_ak1a();
# bat down the message list looking for one that needs to go off site and whose
# nearest node is not busy.
dbg('msg', "queue msg ($sort)\n");
+ my @nodelist = DXChannel::get_all_nodes;
foreach $ref (@msg) {
# firstly, is it private and unread? if so can I find the recipient
# in my cluster node list offsite?
next if $ref->{'read'}; # if it is read, it is stuck here
$clref = DXCluster->get_exact($ref->{to});
unless ($clref) { # otherwise look for a homenode
- my $uref = DXUser->get($ref->{to});
+ my $uref = DXUser->get_current($ref->{to});
my $hnode = $uref->homenode if $uref;
$clref = DXCluster->get_exact($hnode) if $hnode;
}
@msg = ();
for (sort @dir) {
- next unless /^m\d+$/o;
+ next unless /^m\d\d\d\d\d\d$/;
$ref = read_msg_header("$msgdir/$_");
- next unless $ref;
+ unless ($ref) {
+ dbg('err', "Deleting $_");
+ Log('err', "Deleting $_");
+ unlink "$msgdir/$_";
+ next;
+ }
# delete any messages to 'badmsg.pl' places
if (grep $ref->{to} eq $_, @badmsg) {
$name =~ s/.*:://o;
confess "Non-existant field '$AUTOLOAD'" if !$valid{$name};
+ # this clever line of code creates a subroutine which takes over from autoload
+ # from OO Perl - Conway
+ *{$AUTOLOAD} = sub {@_ > 1 ? $_[0]->{$name} = $_[1] : $_[0]->{$name}} ;
@_ ? $self->{$name} = shift : $self->{$name} ;
}