X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXChannel.pm;h=1a98c7950ad906c1e99541515bb47ac61aaa3a0c;hb=refs%2Fheads%2Fmojo;hp=f8dabe1c657b3abd6129dd75fa52619e1af12382;hpb=7e3729a9039462c460dae4804f40c0bd506f3423;p=spider.git diff --git a/perl/DXChannel.pm b/perl/DXChannel.pm index f8dabe1c..1a98c795 100644 --- a/perl/DXChannel.pm +++ b/perl/DXChannel.pm @@ -33,6 +33,8 @@ use DXDebug; use Filter; use Prefix; use Route; +use DXLog; + use strict; use vars qw(%channels %valid @ISA $count $maxerrors); @@ -45,57 +47,48 @@ $count = 0; ann => '0,Want Announce,yesno', ann_talk => '0,Suppress Talk Anns,yesno', annfilter => '5,Ann Filt-out', - annfilter => '5,Ann Filt-out', badcount => '1,Bad Word Count', badip => '9,BAD IP address', 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', consort => '5,Connection Type', cq => '0,CQ Zone', delayed => '5,Delayed messages,parray', - delayed => '5,Delayed messages,parray', disconnecting => '9,Disconnecting,yesno', do_pc9x => '9,Handles PC9x,yesno', - do_pc9x => '9,Handles PC9x,yesno', dx => '0,DX Spots,yesno', dxcc => '0,Country Code', edit => '7,Edit Function', 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', + gtk => '5,Using GTK,yesno', handle_xml => '9,Handles XML,yesno', here => '0,Here?,yesno', hostname => '0,Hostname', inannfilter => '5,Ann Filt-inp', inpc92filter => '5,PC92 Route Filt-inp', inqueue => '9,Input Queue,parray', - inqueue => '9,Input Queue,parray', inrbnfilter => '5,RBN Filt-inp', - inrbnfilter => '5,RBN Filt-inp', - inroutefilter => '5,Route Filt-inp', inroutefilter => '5,Route Filt-inp', inscript => '9,In a script,yesno', - inscript => '9,In a script,yesno', - inspotsfilter => '5,Spot Filt-inp', inspotsfilter => '5,Spot Filt-inp', inwcyfilter => '5,WCY Filt-inp', - inwcyfilter => '5,WCY Filt-inp', - inwwvfilter => '5,WWV Filt-inp', inwwvfilter => '5,WWV Filt-inp', isbasic => '9,Internal Connection', isolate => '5,Isolate network,yesno', - isolate => '5,Isolate network,yesno', - isslugged => '9,Still Slugged,yesno', isslugged => '9,Still Slugged,yesno', itu => '0,ITU Zone', + K => '9,Seen on PC92 K,yesno', lang => '0,Language', lastmsgpoll => '0,Last Msg Poll,atime', - lastmsgpoll => '0,Last Msg Poll,atime', lastping => '5,Ping last sent,atime', lastread => '5,Last Msg Read', list => '9,Dep Chan List', @@ -105,8 +98,6 @@ $count = 0; name => '0,User Name', newroute => '1,New Style Routing,yesno', next_pc92_keepalive => '9,Next PC92 KeepAlive,atime', - next_pc92_keepalive => '9,Next PC92 KeepAlive,atime', - next_pc92_update => '9,Next PC92 Update,atime', next_pc92_update => '9,Next PC92 Update,atime', nopings => '5,Ping Obs Count', oldstate => '5,Last State', @@ -116,24 +107,20 @@ $count = 0; passwd => '9,Passwd List,yesno', pc50_t => '5,Last PC50 Time,atime', pc92filter => '5,PC92 Route Filt-out', - pc92filter => '5,PC92 Route Filt-out', pingave => '0,Ping ave time', pingint => '5,Ping Interval ', pingtime => '5,Ping totaltime,parray', priv => '9,Privilege', prompt => '0,Required Prompt', rbnfilter => '5,RBN Filt-out', - rbnfilter => '5,RBN Filt-out', + rbnseeme => '0,RBN See Me,yesno', redirect => '0,Redirect messages to', registered => '9,Registered?,yesno', remotecmd => '9,doing rcmd,yesno', route => '9,Route Data', routefilter => '5,Route Filt-out', - routefilter => '5,Route Filt-out', senddbg => '8,Sending Debug,yesno', sluggedpcs => '9,Slugged PCxx Queue,parray', - sluggedpcs => '9,Slugged PCxx Queue,parray', - spotsfilter => '5,Spot Filt-out', spotsfilter => '5,Spot Filt-out', startt => '0,Start Time,atime', state => '0,Current State', @@ -141,13 +128,19 @@ $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', + wcy => '0,Want WCY,yesno', wcyfilter => '5,WCY Filt-out', width => '0,Column Width', + wwv => '0,Want WWV,yesno', wwvfilter => '5,WWV Filt-out', + 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 @@ -187,6 +180,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); @@ -197,6 +191,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; @@ -210,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) : ''); } } @@ -727,9 +727,14 @@ sub process_one while (my $data = shift @{$self->{inqueue}}) { my ($sort, $call, $line) = $self->decode_input($data); next unless defined $sort; - - # do the really sexy console interface bit! (Who is going to do the TK interface then?) - dbg("<- $sort $call $line") if $sort ne 'D' && isdbg('chan'); + + if ($sort ne 'D') { + if (isdbg('chan')) { + if (($self->is_rbn && isdbg('rbnchan')) || !$self->is_rbn) { + 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 + } + } + } # handle A records my $user = $self->user; @@ -784,6 +789,15 @@ sub error_handler $self->disconnect(1); } +sub refresh_user +{ + my $call = shift; + my $user = shift; + return unless $call && $user && ref $user; + my $self = DXChannel::get($call); + $self->{user} = $user; + return $user; +} sub isregistered { @@ -799,6 +813,17 @@ sub isregistered } } +# try to replace the in-core version of the dxchan with the one that has been modified with items like filters +sub replace +{ + my $self = shift; + my $call = shift; + if (ref $self) { + $call ||= $self->{call}; + $channels{$call} = $self; + } +} + #no strict; sub AUTOLOAD {