add more error messages around DXUser::get*
[spider.git] / perl / DXUser.pm
index ab0be7a2365fab82ac8745ee36c22fa65ef76d9f..34870a953dc91311ae9b10bc216b28b2e88113a8 100644 (file)
@@ -3,7 +3,7 @@
 #
 # Copyright (c) 1998 - Dirk Koopman G1TLH
 #
-# $Id$
+#
 #
 
 package DXUser;
@@ -80,6 +80,7 @@ $v3 = 0;
                  wantdxcq => '0,Show CQ Zone,yesno',
                  wantdxitu => '0,Show ITU Zone,yesno',
                  wantgtk => '0,Want GTK interface,yesno',
+                 wantpc9x => '0,Want PC9X interface,yesno',
                  lastoper => '9,Last for/oper,cldatetime',
                  nothere => '0,Not Here Text',
                  registered => '9,Registered?,yesno',
@@ -236,17 +237,25 @@ sub new
 
 sub get
 {
-       my $pkg = shift;
        my $call = uc shift;
        my $data;
        
        # is it in the LRU cache?
        my $ref = $lru->get($call);
-       return $ref if $ref;
+       return $ref if $ref && ref $ref eq 'DXUser';
        
        # search for it
        unless ($dbm->get($call, $data)) {
                $ref = decode($data);
+               if ($ref) {
+                       if (ref $ref ne 'DXUser') {
+                               dbg("DXUser::get: got strange answer from decode ". ref $ref. " ignoring");
+                               return undef;
+                       }
+               } else {
+                       dbg("DXUser::get: no reference returned from decode $!");
+                       return undef;
+               }
                $lru->put($call, $ref);
                return $ref;
        }
@@ -263,14 +272,16 @@ sub get
 
 sub get_current
 {
-       my $pkg = shift;
        my $call = uc shift;
   
        my $dxchan = DXChannel::get($call);
-       return $dxchan->user if $dxchan;
-       my $rref = Route::get($call);
-       return $rref->user if $rref && exists $rref->{user};
-       return $pkg->get($call);
+       if ($dxchan) {
+               my $ref = $dxchan->user;
+               return $ref if ref $ref eq 'DXUser';
+
+               dbg("DXUser::get_current: got invalid user ref from dxchan $dxchan->{call} ". ref $ref. " ignoring");
+       }
+       return get($call);
 }
 
 #
@@ -716,6 +727,11 @@ sub wantgtk
        return _want('gtk', @_);
 }
 
+sub wantpc9x
+{
+       return _want('pc9x', @_);
+}
+
 sub wantlogininfo
 {
        my $self = shift;