fix sh/mydx, add back qra sq for sh/dxgrid
[spider.git] / perl / DXUser.pm
index 3497fa8af71e4eb41b3d8bba230dc26e5449ff86..5d212b078e220388de8b4bbef8e23b9a10e9d240 100644 (file)
@@ -20,17 +20,17 @@ use File::Copy;
 
 use strict;
 
-use vars qw(%u $dbm $filename %valid $lastoperinterval $lasttime $lru $lrusize $tooold $v3 $noips);
+use vars qw(%u $dbm $filename %valid $lastoperinterval $lasttime $lru $lrusize $tooold $v3);
 
 %u = ();
 $dbm = undef;
 $filename = undef;
 $lastoperinterval = 60*24*60*60;
 $lasttime = 0;
-$lrusize = 2000;
+$lrusize = 10000;
 $tooold = 86400 * 365;         # this marks an old user who hasn't given enough info to be useful
 $v3 = 0;
-$noips = 4;
+our $maxconnlist = 3;                  # remember this many connection time (duration) [start, end] pairs
 
 # hash of valid elements and a simple prompt
 %valid = (
@@ -44,6 +44,7 @@ $noips = 4;
                  email => '0,E-mail Address,parray',
                  priv => '9,Privilege Level',
                  lastin => '0,Last Time in,cldatetime',
+                 lastseen => '0,Last Seen,cldatetime',
                  passwd => '9,Password,yesno',
                  passphrase => '9,Pass Phrase,yesno',
                  addr => '0,Full Address',
@@ -83,6 +84,12 @@ $noips = 4;
                  wantdxitu => '0,Show ITU Zone,yesno',
                  wantgtk => '0,Want GTK interface,yesno',
                  wantpc9x => '0,Want PC9X interface,yesno',
+                 wantrbn => '0,Want RBN spots,yesno',
+                 wantft => '0,Want RBN FT4/8,yesno',
+                 wantcw => '0,Want RBN CW,yesno',
+                 wantrtty => '0,Want RBN RTTY,yesno',
+                 wantpsk => '0,Want RBN PSK,yesno',
+                 wantbeacon => '0,Want (RBN) Beacon,yesno',
                  lastoper => '9,Last for/oper,cldatetime',
                  nothere => '0,Not Here Text',
                  registered => '9,Registered?,yesno',
@@ -92,7 +99,8 @@ $noips = 4;
                  believe => '1,Believable nodes,parray',
                  lastping => '1,Last Ping at,ptimelist',
                  maxconnect => '1,Max Connections',
-                 ip => '1,IP address',
+                 startt => '0,Start Time,cldatetime',
+                 connlist => '1,Connections,parraydifft',
                 );
 
 #no strict;
@@ -206,6 +214,7 @@ sub process
 
 sub finish
 {
+       $dbm->sync;
        undef $dbm;
        untie %u;
 }
@@ -231,6 +240,7 @@ sub new
 #      confess "can't create existing call $call in User\n!" if $u{$call};
 
        my $self = $pkg->alloc($call);
+       $self->{lastseen} = $main::systime;
        $self->put;
        return $self;
 }
@@ -247,7 +257,10 @@ sub get
        
        # is it in the LRU cache?
        my $ref = $lru->get($call);
-       return $ref if $ref && ref $ref eq 'DXUser';
+       if ($ref && ref $ref eq 'DXUser') {
+               $ref->{lastseen} = $main::systime;
+               return $ref;
+       }
        
        # search for it
        unless ($dbm->get($call, $data)) {
@@ -267,6 +280,7 @@ sub get
                        }
                        return undef;
                }
+               $ref->{lastseen} = $main::systime;
                $lru->put($call, $ref);
                return $ref;
        }
@@ -397,7 +411,14 @@ sub del
 sub close
 {
        my $self = shift;
-       $self->{lastin} = time;
+       my $startt = shift;
+       my $ip = shift;
+       $self->{lastseen} = $self->{lastin} = $main::systime;
+       # add a record to the connect list
+       my $ref = [$startt || $self->{startt}, $main::systime];
+       push @$ref, $ip if $ip;
+       push @{$self->{connlist}}, $ref;
+       shift @{$self->{connlist}} if @{$self->{connlist}} > $maxconnlist;
        $self->put();
 }
 
@@ -827,6 +848,12 @@ sub is_ak1a
        return $self->{sort} eq 'A';
 }
 
+sub is_rbn
+{
+       my $self = shift;
+       return $self->{sort} eq 'N'
+}
+
 sub unset_passwd
 {
        my $self = shift;