add cmd ratelimits, restore regex is_ipaddr
[spider.git] / perl / DXChannel.pm
index dcd7b909bf25af8983044ace748da460efb896eb..ceaaf551907c0b8aaee3e19a55737c58bf92df6f 100644 (file)
@@ -33,6 +33,8 @@ use DXDebug;
 use Filter;
 use Prefix;
 use Route;
+use DXLog;
+
 
 use strict;
 use vars qw(%channels %valid @ISA $count $maxerrors);
@@ -50,6 +52,8 @@ $count = 0;
                  beep => '0,Want Beeps,yesno',
                  build => '1,Node Build',
                  call => '0,Callsign',
+                 cmdcount => '5,Cmds in cmdinterval',
+                 cmdintstart => '5,Cmd int start,atime',
                  cluster => '5,Cluster data',
                  conf => '0,In Conference?,yesno',
                  conn => '9,Msg Conn ref',
@@ -64,7 +68,7 @@ $count = 0;
                  enhanced => '5,Enhanced Client,yesno',
                  errors => '9,Errors',
                  func => '5,Function',
-                 group => '0,Access Group,parray',     # used to create a group of users/nodes for some purpose or other.
+                 group => '0,Access Group,parray',# used to create a group of users/nodes for some purpose or other.
                  gtk => '5,Using GTK,yesno',
                  handle_xml => '9,Handles XML,yesno',
                  here => '0,Here?,yesno',
@@ -124,6 +128,7 @@ $count = 0;
                  talk => '0,Want Talk,yesno',
                  talklist => '0,Talk List,parray',
                  user => '9,DXUser ref',
+                 user_interval => '0,Prompt Idle Time',
                  ve7cc => '0,VE7CC program special,yesno',
                  verified => '9,Verified?,yesno',
                  version => '1,Node Version',
@@ -135,7 +140,7 @@ $count = 0;
                  wx => '0,Want WX,yesno',                
                 );
 
-$maxerrors = 20;                               # the maximum number of concurrent errors allowed before disconnection
+$maxerrors = 10;                               # the maximum number of concurrent errors allowed before disconnection
 
 # object destruction
 sub DESTROY
@@ -204,12 +209,13 @@ sub _error_out
 {
        my $self = shift;
        my $e = shift;
-       if (++$self->{errors} > $maxerrors) {
+       if ($self != $main::me && ++$self->{errors} > $maxerrors) {
                $self->send($self->msg('e26'));
+               LogDbg('err', "DXChannel $self->{call}: too many errors ($self->{errors} > $maxerrors), disconnecting");
                $self->disconnect;
                return ();
        } else {
-               return ($self->msg($e));
+               return ($e ? $self->msg($e) : '');
        }
 }