X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXUser.pm;h=65aab42bdf164ed52a686ae40611955288b260b9;hb=f155969d600561b9ef151a7ce2494a0c89aed033;hp=c84598afad795680582b5fab55d9ccbff9a99567;hpb=8ac487c0c3297023df07493b11fe166d4c857081;p=spider.git diff --git a/perl/DXUser.pm b/perl/DXUser.pm index c84598af..65aab42b 100644 --- a/perl/DXUser.pm +++ b/perl/DXUser.pm @@ -11,9 +11,11 @@ package DXUser; require Exporter; @ISA = qw(Exporter); -use MLDBM qw(DB_File); +use DXLog; +use DB_File; +use Data::Dumper; use Fcntl; -use Carp; +use DXDebug; use strict; use vars qw(%u $dbm $filename %valid); @@ -42,13 +44,25 @@ $filename = undef; node => '0,Last Node', homenode => '0,Home Node', lockout => '9,Locked out?,yesno', # won't let them in at all - dxok => '9,DX Spots?,yesno', # accept his dx spots? - annok => '9,Announces?,yesno', # accept his announces? + dxok => '9,Accept DX Spots?,yesno', # accept his dx spots? + annok => '9,Accept Announces?,yesno', # accept his announces? reg => '0,Registered?,yesno', # is this user registered? lang => '0,Language', hmsgno => '0,Highest Msgno', group => '0,Access Group,parray', # used to create a group of users/nodes for some purpose or other isolate => '9,Isolate network,yesno', + wantbeep => '0,Rec Beep,yesno', + wantann => '0,Rec Announce,yesno', + wantwwv => '0,Rec WWV,yesno', + wantwcy => '0,Rec WCY,yesno', + wantecho => '0,Rec Echo,yesno', + wanttalk => '0,Rec Talk,yesno', + wantwx => '0,Rec WX,yesno', + wantdx => '0,Rec DX Spots,yesno', + pagelth => '0,Current Pagelth', + pingint => '9,Node Ping interval', + nopings => '9,Ping Obs Count', + wantlogininfo => '9,Login info req,yesno', ); no strict; @@ -63,7 +77,6 @@ sub AUTOLOAD confess "Non-existant field '$AUTOLOAD'" if !$valid{$name}; if (@_) { $self->{$name} = shift; - # $self->put(); } return $self->{$name}; } @@ -76,10 +89,11 @@ sub init my ($pkg, $fn, $mode) = @_; confess "need a filename in User" if !$fn; + $fn .= ".v2"; if ($mode) { - $dbm = tie (%u, MLDBM, $fn, O_CREAT|O_RDWR, 0666) or confess "can't open user file: $fn ($!)"; + $dbm = tie (%u, 'DB_File', $fn, O_CREAT|O_RDWR, 0666, $DB_BTREE) or confess "can't open user file: $fn ($!)"; } else { - $dbm = tie (%u, MLDBM, $fn, O_RDONLY) or confess "can't open user file: $fn ($!)"; + $dbm = tie (%u, 'DB_File', $fn, O_RDONLY, 0666, $DB_BTREE) or confess "can't open user file: $fn ($!)"; } $filename = $fn; @@ -93,7 +107,7 @@ use strict; sub finish { - $dbm = undef; + undef $dbm; untie %u; } @@ -107,15 +121,15 @@ sub new my $call = uc shift; # $call =~ s/-\d+$//o; - confess "can't create existing call $call in User\n!" if $u{$call}; +# confess "can't create existing call $call in User\n!" if $u{$call}; my $self = bless {}, $pkg; $self->{call} = $call; $self->{'sort'} = 'U'; - $self->{dxok} = 1; - $self->{annok} = 1; + $self->{dxok} = '1'; + $self->{annok} = '1'; $self->{lang} = $main::lang; - $u{call} = $self; + $self->put; return $self; } @@ -129,7 +143,8 @@ sub get my $pkg = shift; my $call = uc shift; # $call =~ s/-\d+$//o; # strip ssid - return $u{$call}; + my $s = $u{$call}; + return $s ? decode($s) : undef; } # @@ -157,7 +172,8 @@ sub get_current my $dxchan = DXChannel->get($call); return $dxchan->user if $dxchan; - return $u{$call}; + my $s = $u{$call}; + return $s ? decode($s) : undef; } # @@ -167,8 +183,36 @@ sub get_current sub put { my $self = shift; + confess "Trying to put nothing!" unless $self && ref $self; my $call = $self->{call}; - $u{$call} = $self; + $u{$call} = $self->encode(); +} + +# +# create a string from a user reference +# +sub encode +{ + my $self = shift; + my $dd = new Data::Dumper([$self]); + $dd->Indent(0); + $dd->Terse(1); + $dd->Quotekeys($] < 5.005 ? 1 : 0); + return $dd->Dumpxs; +} + +# +# create a hash from a string +# +sub decode +{ + my $s = shift; + my $ref; + $s = '$ref = ' . $s; + eval $s; + Log('DXUser', $@) if $@; + $ref = undef if $@; + return $ref; } # @@ -279,5 +323,112 @@ sub sort my $self = shift; @_ ? $self->{'sort'} = shift : $self->{'sort'} ; } + +# some accessors +sub _want +{ + my $n = shift; + my $self = shift; + my $val = shift; + my $s = "want$n"; + $self->{$s} = $val if defined $val; + return exists $self->{$s} ? $self->{$s} : 1; +} + +sub wantbeep +{ + return _want('beep', @_); +} + +sub wantann +{ + return _want('ann', @_); +} + +sub wantwwv +{ + return _want('wwv', @_); +} + +sub wantwcy +{ + return _want('wcy', @_); +} + +sub wantecho +{ + return _want('echo', @_); +} + +sub wantwx +{ + return _want('wx', @_); +} + +sub wantdx +{ + return _want('dx', @_); +} + +sub wanttalk +{ + return _want('talk', @_); +} + +sub wantlogininfo +{ + my $self = shift; + my $n = shift; + $self->{wantlogininfo} = $n if $n; + return exists $self->{wantlogininfo} ? $self->{wantlogininfo} : 0; +} + +sub is_node +{ + my $self = shift; + return $self->{sort} =~ /[ACRSX]/; +} + +sub is_user +{ + my $self = shift; + return $self->{sort} eq 'U'; +} + +sub is_bbs +{ + my $self = shift; + return $self->{sort} eq 'B'; +} + +sub is_spider +{ + my $self = shift; + return $self->{sort} eq 'S'; +} + +sub is_clx +{ + my $self = shift; + return $self->{sort} eq 'C'; +} + +sub is_dxnet +{ + my $self = shift; + return $self->{sort} eq 'X'; +} + +sub is_arcluster +{ + my $self = shift; + return $self->{sort} eq 'R'; +} + 1; __END__ + + + + +