fix ping problem
[spider.git] / perl / DXChannel.pm
index 29919c7ebcf4eb7df53c97dbe0ebc495d30819cb..e60ce6c6be307e382420bb74a9828d9427780312 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);
@@ -124,6 +126,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 +138,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
@@ -175,6 +178,7 @@ sub alloc
        $self->{lang} = $main::lang if !$self->{lang};
        $self->{func} = "";
        $self->{width} ||=  80;
+       $self->{_nospawn} = 0;
 
        # add in all the dxcc, itu, zone info
        my @dxcc = Prefix::extract($call);
@@ -185,6 +189,11 @@ sub alloc
        }
        $self->{inqueue} = [];
 
+       if ($conn) {
+               $self->{hostname} = $self->{conn}->peerhost;
+               $self->{sockhost} = $self->{conn}->sockhost;
+       }
+
        $count++;
        dbg("DXChannel $self->{call} created ($count)") if isdbg('chan');
        bless $self, $pkg; 
@@ -198,12 +207,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) : '');
        }
 }
 
@@ -719,7 +729,7 @@ sub process_one
                if ($sort ne 'D') {
                        if (isdbg('chan')) {
                                if (($self->is_rbn && isdbg('rbnchan')) || !$self->is_rbn) {
-                                       dbg("<- $sort $call $line") if isdbg('chan');
+                                       dbg("<- $sort $call $line") if isdbg('chan'); # you may think this is tautology, but it's needed get the correct label on the debug line
                                }
                        }
                }