X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=perl%2FDXProt.pm;h=f6a32cce44f9ef97be30adf9cac8008de470032a;hb=6be3e1147b774c96b9d35c4c835f913e9c5e0ffc;hp=056402b9501257fc410ba747e72bfb3e49949e9b;hpb=363839f98405239478bbe5a85efad1d679a1c722;p=spider.git diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 056402b9..f6a32cce 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -1039,19 +1039,27 @@ sub normal $dxchan->send($dxchan->msg('pingi', $from, $s, $ave)) } elsif ($dxchan->is_node) { if ($tochan) { - $tochan->{nopings} = $tochan->user->nopings || 2; # pump up the timer + my $nopings = $tochan->user->nopings || 2; push @{$tochan->{pingtime}}, $t; shift @{$tochan->{pingtime}} if @{$tochan->{pingtime}} > 6; - my $st; - for (@{$tochan->{pingtime}}) { - $st += $_; + + # cope with a missed ping, this means you must set the pingint large enough + if ($t > $tochan->{pingint} && $t < 2 * $tochan->{pingint} ) { + $t -= $tochan->{pingint}; } + + # calc smoothed RTT a la TCP if (@{$tochan->{pingtime}} == 1) { $tochan->{pingave} = $t; } else { - $tochan->{pingave} = $tochan->{pingave} + (($t - $tochan->{pingave}) / 8); + $tochan->{pingave} = $tochan->{pingave} + (($t - $tochan->{pingave}) / 6); } +# my $st; +# for (@{$tochan->{pingtime}}) { +# $st += $_; +# } # $tochan->{pingave} = $st / @{$tochan->{pingtime}}; + $tochan->{nopings} = $nopings; # pump up the timer } } } @@ -1908,12 +1916,13 @@ sub in_filter_route sub eph_dup { my $s = shift; + my $r; # chop the end off $s =~ s/\^H\d\d?\^?\~?$//; - return 1 if exists $eph{$s}; + $r = 1 if exists $eph{$s}; # pump up the dup if it keeps circulating $eph{$s} = $main::systime; - return undef; + return $r; } sub eph_del_regex @@ -1932,7 +1941,7 @@ sub eph_clean my ($key, $val); while (($key, $val) = each %eph) { - if ($main::systime - $val > 90) { + if ($main::systime - $val > 180) { delete $eph{$key}; } }