+29Feb08=======================================================================
+1. Fix crash on rcmd of an invalid command.
25Feb08=======================================================================
1. Arrange for AGWMsg to retry connection either if the AGW engine isn't
loaded on startup or it disappears for some reason and restarts.
use Route;
use strict;
-use vars qw(%channels %valid @ISA $count);
+use vars qw(%channels %valid @ISA $count $maxerrors);
%channels = ();
$count = 0;
next_pc92_keepalive => '9,Next PC92 KeepAlive,atime',
);
+$maxerrors = 20; # the maximum number of concurrent errors allowed before disconnection
+
# object destruction
sub DESTROY
{
return $channels{$call} = $self;
}
+# count errors and disconnect if too many
+# this has to be here because it can come from rcmd (DXProt) as
+# well as DXCommandmode.
+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));
+ }
+}
+
# rebless this channel as something else
sub rebless
{
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
}
}
-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 ();