my $pkg = shift;
my $call = shift;
my @rout = $main::routeroot->add_user($call, Route::here(1));
- DXProt::route_pc16($main::me, $main::routeroot, @rout) if @rout;
+
+ # ALWAYS output the user
+ my $ref = Route::User::get($call);
+ DXProt::route_pc16($main::me, $main::routeroot, $ref) if $ref;
return $self;
}
$self->{priv} = $user->priv || 0;
$self->{lang} = $user->lang || $main::lang || 'en';
$self->{pagelth} = $user->pagelth || 20;
- ($self->{width}) = $line =~ /width=(\d+)/;
+ ($self->{width}) = $line =~ /width=(\d+)/; $line =~ s/\s*width=\d+\s*//;
$self->{width} = 80 unless $self->{width} && $self->{width} > 80;
$self->{consort} = $line; # save the connection type
$self->{here} = 1;
# sort out registration
- if ($main::reqreg) {
+ if ($main::reqreg == 1) {
$self->{registered} = $user->registered;
+ } elsif ($main::reqreg == 2) {
+ $self->{registered} = !$user->registered;
} else {
$self->{registered} = 1;
}
} else {
eval { @ans = &{$self->{func}}($self, $cmdline) };
}
- $self->send_ans("Syserr: on stored func $self->{func}", $@) if $@;
+ if ($@) {
+ $self->send_ans("Syserr: on stored func $self->{func}", $@);
+ delete $self->{func};
+ $self->state('prompt');
+ undef $@;
+ }
$self->send_ans(@ans);
} else {
$self->send_ans(run_cmd($self, $cmdline));
if ($uref) {
@rout = $main::routeroot->del_user($uref);
dbg("B/C PC17 on $main::mycall for: $call") if isdbg('route');
+
+ # issue a pc17 to everybody interested
+ DXProt::route_pc17($main::me, $main::routeroot, $uref);
} else {
confess "trying to disconnect a non existant user $call";
}
- # issue a pc17 to everybody interested
- DXProt::route_pc17($main::me, $main::routeroot, @rout) if @rout;
-
# I was the last node visited
$self->user->node($main::mycall);
my ($self, $from, $to, $via, $line) = @_;
$line =~ s/\\5E/\^/g;
$self->local_send('T', "$to de $from: $line") if $self->{talk};
- Log('talk', $to, $from, $main::mycall, $line);
+ Log('talk', $to, $from, $via?$via:$main::mycall, $line);
# send a 'not here' message if required
unless ($self->{here} && $from ne $to) {
my $key = "$to$from";
return unless $filter;
}
- my $buf = Spot::formatb($self->{user}->wantgrid, $_[0], $_[1], $_[2], $_[3], $_[4]);
+
+ my $t = ztime($_[2]);
+ my $ref = DXUser->get_current($_[4]);
+ my $loc = $ref->qra if $ref && $ref->qra && $self->{user}->wantgrid;
+ $loc = ' ' . substr($loc, 0, 4) if $loc;
+ $loc = "" unless $loc;
+ my $buf = sprintf "DX de %-7.7s%11.1f %-12.12s %-*s $t$loc", "$_[4]:", $_[0], $_[1], $self->{consort} eq 'local' ? 29 : 30, $_[3];
$buf .= "\a\a" if $self->{beep};
$buf =~ s/\%5E/^/g;
$self->local_send('X', $buf);