use DXXml;
use strict;
-use vars qw(%Cache %cmd_cache $errstr %aliases $scriptbase $maxerrors %nothereslug
+use vars qw(%Cache %cmd_cache $errstr %aliases $scriptbase %nothereslug
$maxbadcount $msgpolltime $default_pagelth $cmdimportdir);
%Cache = (); # cache of dynamically loaded routine's mod times
$errstr = (); # error string from eval
%aliases = (); # aliases for (parts of) commands
$scriptbase = "$main::root/scripts"; # the place where all users start scripts go
-$maxerrors = 20; # the maximum number of concurrent errors allowed before disconnection
$maxbadcount = 3; # no of bad words allowed before disconnection
$msgpolltime = 3600; # the time between polls for new messages
$cmdimportdir = "$main::root/cmd_import"; # the base directory for importing command scripts
my $pkg = shift;
my $call = shift;
# my @rout = $main::routeroot->add_user($call, Route::here(1));
- DXProt::_add_thingy($main::routeroot, [$call, 0, 0, 1]);
+ DXProt::_add_thingy($main::routeroot, [$call, 0, 0, 1, undef, undef, $self->{conn}->peerhost], );
# ALWAYS output the user
my $ref = Route::User::get($call);
my $name = $user->{name};
# log it
- my $host = $self->{conn}->{peerhost};
+ my $host = $self->{conn}->peerhost;
$host ||= "AGW Port #$self->{conn}->{agwport}" if exists $self->{conn}->{agwport};
$host ||= "unknown";
LogDbg('DXCommand', "$call connected from $host");
$self->{registered} = 1;
}
-
- # decide which motd to send
- my $motd;
- unless ($self->{registered}) {
- $motd = "${main::motd}_nor_$self->{lang}";
- $motd = "${main::motd}_nor" unless -e $motd;
- }
- $motd = "${main::motd}_$self->{lang}" unless $motd && -e $motd;
- $motd = $main::motd unless $motd && -e $motd;
- if ($self->conn->{csort} eq 'ax25') {
- if ($motd) {
- $motd = "${motd}_ax25" if -e "${motd}_ax25";
- } else {
- $motd = "${main::motd}_ax25" if -e "${main::motd}_ax25";
- }
- }
- $self->send_file($motd) if -e $motd;
+ # send the relevant MOTD
+ $self->send_motd;
# sort out privilege reduction
$self->{priv} = 0 if $line =~ /^(ax|te)/ && !$self->conn->{usedpasswd};
foreach my $call (@{$user->buddies}) {
my $ref = Route::User::get($call);
if ($ref) {
- foreach my $node (@{$ref->parent}) {
+ foreach my $node ($ref->parents) {
$self->send($self->msg($node eq $main::mycall ? 'loginb' : 'loginbn', $call, $node));
}
}
}
}
-sub _error_out
-{
- my $self = shift;
- my $e = shift;
- if (++$self->{errors} > $maxerrors) {
- $self->send($self->msg('e26'));
- $self->disconnect;
- return ();
- } else {
- return ($self->msg($e));
- }
-}
-
#
# this is the thing that runs the command, it is done like this for the
# benefit of remote command execution
if ($ok) {
delete $self->{errors};
} else {
- if (++$self->{errors} > $maxerrors) {
+ if (++$self->{errors} > $DXChannel::maxerrors) {
$self->send($self->msg('e26'));
$self->disconnect;
return ();
my $comment = substr (($_[3] || ''), 0, $clth);
$comment .= ' ' x ($clth - length($comment));
if ($self->{user}->wantgrid) {
- my $ref = DXUser->get_current($_[4]);
+ my $ref = DXUser::get_current($_[4]);
if ($ref) {
$loc = $ref->qra || '';
$loc = ' ' . substr($loc, 0, 4) if $loc;
} elsif ($self->{gtk}) {
my ($dxloc, $byloc);
- my $ref = DXUser->get_current($_[4]);
+ my $ref = DXUser::get_current($_[4]);
if ($ref) {
$byloc = $ref->qra;
$byloc = substr($byloc, 0, 4) if $byloc;
my $spot = $_[1];
$spot =~ s|/\w{1,4}$||;
- $ref = DXUser->get_current($spot);
+ $ref = DXUser::get_current($spot);
if ($ref) {
$dxloc = $ref->qra;
$dxloc = substr($dxloc, 0, 4) if $dxloc;
if ($dxchan) {
@out = $s->run($dxchan, 1);
} else {
- my $u = DXUser->get($call);
+ my $u = DXUser::get($call);
if ($u) {
$dxchan = $main::me;
my $old = $dxchan->{call};
my $sort = $flag == 2 ? "External" : "Local";
$self->send("$sort $target found at $node in $ms ms" );
}
+
+# send the most relevant motd
+sub send_motd
+{
+ my $self = shift;
+ my $motd;
+
+ unless ($self->{registered}) {
+ $motd = "${main::motd}_nor_$self->{lang}";
+ $motd = "${main::motd}_nor" unless -e $motd;
+ }
+ $motd = "${main::motd}_$self->{lang}" unless $motd && -e $motd;
+ $motd = $main::motd unless $motd && -e $motd;
+ if ($self->conn->{csort} eq 'ax25') {
+ if ($motd) {
+ $motd = "${motd}_ax25" if -e "${motd}_ax25";
+ } else {
+ $motd = "${main::motd}_ax25" if -e "${main::motd}_ax25";
+ }
+ }
+ $self->send_file($motd) if -e $motd;
+}
1;
__END__