From 0e5d48bce6d4ab1119f1375a6a57af188947ceff Mon Sep 17 00:00:00 2001
From: Dirk Koopman <djk@tobit.co.uk>
Date: Mon, 24 Sep 2007 21:35:07 +0100
Subject: [PATCH] make ping reset the node obscount

also add ping debugging on obscount tag
---
 perl/DXProt.pm     | 9 +++++----
 perl/DXXml/Ping.pm | 7 +++++++
 perl/Version.pm    | 2 +-
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/perl/DXProt.pm b/perl/DXProt.pm
index fdd3025a..af7d7308 100644
--- a/perl/DXProt.pm
+++ b/perl/DXProt.pm
@@ -462,7 +462,6 @@ sub process
 
 		foreach $dxchan (@dxchan) {
 			next unless $dxchan->is_node;
-			next if $dxchan->handle_xml;
 			next if $dxchan == $main::me;
 
 			# send the pc50
@@ -471,12 +470,14 @@ sub process
 			# send a ping out on this channel
 			if ($dxchan->{pingint} && $t >= $dxchan->{pingint} + $dxchan->{lastping}) {
 				if ($dxchan->{nopings} <= 0) {
+					dbg("ROUTE: $dxchan->{call} disconnected on ping obscount") if isdbg('obscount');
 					$dxchan->disconnect;
 				} else {
 					DXXml::Ping::add($main::me, $dxchan->call);
 					$dxchan->{nopings} -= 1;
 					$dxchan->{lastping} = $t;
 					$dxchan->{lastping} += $dxchan->{pingint} / 2 unless @{$dxchan->{pingtime}};
+					dbg("ROUTE: $dxchan->{call} ping obscount = $dxchan->{nopings}") if isdbg('obscount');
 				}
 			}
 		}
@@ -1206,12 +1207,12 @@ sub addrcmd
 sub disconnect
 {
 	my $self = shift;
-	my $pc39flag = shift;
+	my $pc39flag = shift || 0;
 	my $call = $self->call;
 
 	return if $self->{disconnecting}++;
 
-	unless ($pc39flag && $pc39flag == 1) {
+	unless ($pc39flag == 1) {
 		$self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op")));
 	}
 
@@ -1272,7 +1273,7 @@ sub disconnect
 	}
 
 	# broadcast to all other nodes that all the nodes connected to via me are gone
-	unless ($pc39flag && $pc39flag == 2)  {
+	unless ($pc39flag == 2)  {
 		$self->route_pc21($main::mycall, undef, @rout) if @rout;
 		$self->route_pc92d($main::mycall, undef, $main::routeroot, $node) if $node;
 	}
diff --git a/perl/DXXml/Ping.pm b/perl/DXXml/Ping.pm
index 04f830d1..29d7ab1c 100644
--- a/perl/DXXml/Ping.pm
+++ b/perl/DXXml/Ping.pm
@@ -14,6 +14,7 @@ use DXDebug;
 use DXProt;
 use IsoTime;
 use Time::HiRes qw(gettimeofday tv_interval);
+use Route::Node;
 
 use vars qw(@ISA %pings);
 @ISA = qw(DXXml);
@@ -115,6 +116,12 @@ sub handle_ping_reply
 					$tochan->{pingave} = $tochan->{pingave} + (($t - $tochan->{pingave}) / 6);
 				}
 				$tochan->{nopings} = $nopings; # pump up the timer
+				dbg("ROUTE: $tochan->{call} ping obscount reset to $tochan->{nopings}") if isdbg('obscount');
+				my $nref = Route::Node::get($tochan->{call});
+				if ($nref) {
+					my $n = $nref->reset_obs;
+					dbg("ROUTE: reset obscount on $tochan->{call} to $n (ping)") if isdbg('obscount');
+				}
 			}
 			_handle_believe($from, $fromdxchan->{call});
 		} 
diff --git a/perl/Version.pm b/perl/Version.pm
index b8d30dd6..f42c8acf 100644
--- a/perl/Version.pm
+++ b/perl/Version.pm
@@ -11,6 +11,6 @@ use vars qw($version $subversion $build);
 
 $version = '1.54';
 $subversion = '0';
-$build = '149';
+$build = '150';
 
 1;
-- 
2.43.0