add IP Address to PC92 A record
authorDirk Koopman <djk@tobit.co.uk>
Thu, 26 Nov 2009 11:10:33 +0000 (11:10 +0000)
committerDirk Koopman <djk@tobit.co.uk>
Thu, 26 Nov 2009 11:10:33 +0000 (11:10 +0000)
Start some extra auditing.

Changes
perl/DXCommandmode.pm
perl/DXProt.pm
perl/DXProtHandle.pm
perl/DXProtout.pm
perl/Msg.pm
perl/Route/Node.pm
perl/Route/User.pm
perl/Version.pm
perl/cluster.pl

diff --git a/Changes b/Changes
index a7d6a81c956ec577206046d3a2c025a7f67de6ef..3878652153f0a05f36f2d973482947420f217449 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,5 @@
+26Nov09=======================================================================
+1. add ip address to PC92 A records
 25Nov09=======================================================================
 1. Change sh/qrz to use the xml interface. You will have to subscribe to
 the xml interface - see http://www.qrz.com/XML/index.html for more info.
index 6fde1742b6067b8b3b1d717bfdbe073b51c5c29f..87182fc69f08b44218f9f8fb2e9b29251469280d 100644 (file)
@@ -65,7 +65,7 @@ sub new
        my $pkg = shift;
        my $call = shift;
 #      my @rout = $main::routeroot->add_user($call, Route::here(1));
-       DXProt::_add_thingy($main::routeroot, [$call, 0, 0, 1]);
+       DXProt::_add_thingy($main::routeroot, [$call, 0, 0, 1, undef, undef, $self->{conn}->peerhost], );
 
        # ALWAYS output the user
        my $ref = Route::User::get($call);
@@ -89,7 +89,7 @@ sub start
        my $name = $user->{name};
        
        # log it
-       my $host = $self->{conn}->{peerhost};
+       my $host = $self->{conn}->peerhost;
        $host ||= "AGW Port #$self->{conn}->{agwport}" if exists $self->{conn}->{agwport};
        $host ||= "unknown";
        LogDbg('DXCommand', "$call connected from $host");
index bc27395b209944be8341a8749fa4438a939ccd90..dae0b3c75255df063bf1b9b018731c39f0b0e18a 100644 (file)
@@ -269,7 +269,7 @@ sub new
                my @rout = $ref->delete;
                $self->route_pc21($main::mycall, undef, @rout) if @rout;
        }
-       $main::routeroot->add($call, '5000', Route::here(1)) if $call ne $main::mycall;
+       $main::routeroot->add($call, '5000', Route::here(1), $self->{conn}->peerhost) if $call ne $main::mycall;
 
        return $self;
 }
@@ -284,7 +284,7 @@ sub start
        my $user = $self->{user};
 
        # log it
-       my $host = $self->{conn}->{peerhost};
+       my $host = $self->{conn}->peerhost;
        $host ||= "AGW Port #$self->{conn}->{agwport}" if exists $self->{conn}->{agwport};
        $host ||= "unknown";
 
index 8d766732777e31a90dc5c74f735ea3ca5136ae75..90e7f47196d21f6aa06a22e7dc13be05a87ef777 100644 (file)
@@ -1353,7 +1353,10 @@ sub _decode_pc92_call
        my $is_node = $flag & 4;
        my $is_extnode = $flag & 2;
        my $here = $flag & 1;
-       return ($call, $is_node, $is_extnode, $here, $part[1], $part[2]);
+       my $ip  = $part[3];
+       $ip ||= $part[1] if $part[1] && ($part[1] =~ /^(?:\d+\.)+/ || $part[1] =~ /^(?:(?:[abcdef\d]+)?,)+/);
+       $ip =~ s/,/:/g if $ip;
+       return ($call, $is_node, $is_extnode, $here, $part[1], $part[2], $ip);
 }
 
 # decode a pc92 call: flag call : version : build
@@ -1364,7 +1367,7 @@ sub _encode_pc92_call
        # plain call or value
        return $ref unless ref $ref;
 
-       my $ext = shift;
+       my $ext = shift || 0;
        my $flag = 0;
        my $call = $ref->call;
        my $extra = '';
@@ -1373,14 +1376,17 @@ sub _encode_pc92_call
                $flag |= 4;
                my $dxchan = DXChannel::get($call);
                $flag |= 2 if $call ne $main::mycall && $dxchan && !$dxchan->{do_pc9x};
-               if ($ext) {
-                       if ($ref->version) {
-                               my $version = $ref->version || 1.0;
-                               $version =  $version * 100 + 5300 if $version < 50;
-                               $extra .= ":" . $version;
-                       }
+               if (($ext & 1) && $ref->version) {
+                       my $version = $ref->version || 1.0;
+                       $version =  $version * 100 + 5300 if $version < 50;
+                       $extra .= ":" . $version;
                }
        }
+       if (($ext & 2) && $ref->ip) {
+               my $ip = $ref->ip;
+               $ip =~ s/:/,/g;
+               $extra .= ':' . $ip;
+       }
        return "$flag$call$extra";
 }
 
@@ -1394,18 +1400,18 @@ sub _add_thingy
        my $dxchan = shift;
        my $hops = shift;
 
-       my ($call, $is_node, $is_extnode, $here, $version, $build) = @$s;
+       my ($call, $is_node, $is_extnode, $here, $version, $build, $ip) = @$s;
        my @rout;
 
        if ($call) {
                if ($is_node) {
                        dbg("ROUTE: added node $call to " . $parent->call) if isdbg('routelow');
-                       @rout = $parent->add($call, $version, Route::here($here));
+                       @rout = $parent->add($call, $version, Route::here($here), $ip);
                        my $r = Route::Node::get($call);
                        $r->PC92C_dxchan($dxchan->call, $hops) if $r;
                } else {
                        dbg("ROUTE: added user $call to " . $parent->call) if isdbg('routelow');
-                       @rout = $parent->add_user($call, Route::here($here));
+                       @rout = $parent->add_user($call, Route::here($here), $ip);
                        $dxchan->tell_buddies('loginb', $call, $parent->call) if $dxchan;
                }
                if ($pc92_slug_changes && $parent == $main::routeroot) {
index 6ee0c4984a40799ccf9833e19ebe794d36ea930a..c76569d8e3626f2b20050d206c6e88be43b731b0 100644 (file)
@@ -410,7 +410,7 @@ sub gen_pc92_with_time
 # add a local one
 sub pc92a
 {
-       return _gen_pc92('A', 0, @_);
+       return _gen_pc92('A', 2, @_);
 }
 
 # delete a local one
index b60ece8a46fd50d0ab9576a206a98e06d71eb4de..c9b58a482cb19398d9e94cc3cf471e3f69bb801d 100644 (file)
@@ -193,6 +193,12 @@ sub pid_gone
        }
 }
 
+sub peerhost
+{
+       my $self = shift;
+       return $self->{peerhost};
+}
+
 #-----------------------------------------------------------------
 # Send side routines
 sub connect {
@@ -225,7 +231,8 @@ sub connect {
        return undef unless $r || _err_will_block($!);
        
        $conn->{sock} = $sock;
-    
+       $conn->{peerhost} = $sock->peerhost;    # for consistency
+
     if ($conn->{rproc}) {
         my $callback = sub {$conn->_rcv};
         set_event_handler ($sock, read => $callback);
index 123f21f9f2e952d4c74a06a69ddf8c8544afa212..617a0aed43a0718c47cebaf5ea28413d95165a39 100644 (file)
@@ -33,6 +33,7 @@ use vars qw(%list %valid @ISA $max $filterdef $obscount);
                  obscount => '0,Obscount',
                  last_PC92C => '9,Last PC92C',
                  PC92C_dxchan => '9,Channel of PC92C,phash',
+                 ip => '0,IP Address',
 );
 
 $filterdef = $Route::filterdef;
@@ -166,6 +167,8 @@ sub add_user
 {
        my $self = shift;
        my $ucall = shift;
+       my $here = shift;
+       my $ip = shift;
 
        confess "Trying to add NULL User call to routing tables" unless $ucall;
 
@@ -174,7 +177,7 @@ sub add_user
        if ($uref) {
                @out = $uref->addparent($self);
        } else {
-               $uref = Route::User->new($ucall, $self->{call}, @_);
+               $uref = Route::User->new($ucall, $self->{call}, $here, $ip);
                @out = $uref;
        }
        $self->_adduser($uref);
@@ -281,6 +284,8 @@ sub new
        $self->{users} = [];
        $self->{nodes} = [];
        $self->{PC92C_dxchan} = {};
+       my $ip = shift;
+       $self->{ip} = $ip if defined $ip;
        $self->reset_obs;                       # by definition
 
        $list{$call} = $self;
index e25c199cfdd40e6e7a8dc5ce53b23e916ab070b6..de24f906ef7155059c112743d8b5024e75a0b98b 100644 (file)
@@ -19,6 +19,7 @@ use vars qw(%list %valid @ISA $max $filterdef);
 
 %valid = (
                  parent => '0,Parent Calls,parray',
+                 ip => '0,IP Address',
 );
 
 $filterdef = $Route::filterdef;
@@ -44,11 +45,14 @@ sub new
        my $call = uc shift;
        my $ncall = uc shift;
        my $flags = shift;
+       my $ip = shift;
+
        confess "already have $call in $pkg" if $list{$call};
        
        my $self = $pkg->SUPER::new($call);
        $self->{parent} = [ $ncall ];
        $self->{flags} = $flags || Route::here(1);
+       $self->{ip} = $ip if defined $ip;
        $list{$call} = $self;
 
        return $self;
index ffa9ecd30c55d264aecab707908c528ad2c1e04b..55bcb9505639ee95b321aab095d08b3871966d44 100644 (file)
@@ -11,6 +11,6 @@ use vars qw($version $subversion $build);
 
 $version = '1.55';
 $subversion = '0';
-$build = '54';
+$build = '55';
 
 1;
index bec097821a7fd6dcf3046e29594f6e451c9d1284..059a24a929997f5ca5c8cb150490803d823b605d 100755 (executable)
@@ -175,7 +175,7 @@ sub new_channel
                        return;
                }
                if ($bumpexisting) {
-                       my $ip = $conn->{peerhost} || 'unknown';
+                       my $ip = $conn->peerhost || 'unknown';
                        $dxchan->send_now('D', DXM::msg($lang, 'conbump', $call, $ip));
                        LogDbg('DXCommand', "$call bumped off by $ip, disconnected");
                        $dxchan->disconnect;
@@ -208,7 +208,7 @@ sub new_channel
        my $lock = $user->lockout if $user;
        if ($baseuser && $baseuser->lockout || $lock) {
                if (!$user || !defined $lock || $lock) {
-                       my $host = $conn->{peerhost} || "unknown";
+                       my $host = $conn->peerhost || "unknown";
                        LogDbg('DXCommand', "$call on $host is locked out, disconnected");
                        $conn->disconnect;
                        return;