X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FThingy%2FPing.pm;h=30359a422e7b6b89e22fef22c9a074d51a96a29c;hb=5def24d66561e13e76b7af3109810be21deeeffb;hp=14c4ea6a2ff045b34f105786dc449f0672d9b23f;hpb=4932835e5f1bdcfc118f93697b8a685ba2c0c083;p=spider.git diff --git a/perl/Thingy/Ping.pm b/perl/Thingy/Ping.pm index 14c4ea6a..30359a42 100644 --- a/perl/Thingy/Ping.pm +++ b/perl/Thingy/Ping.pm @@ -98,18 +98,18 @@ sub handle } else { # it's a reply, look in the ping list for this one - my $ref = $ping{$thing->{id}} if $thing->{id} - $ref ||= $thing->find; + my $ref = $ping{$thing->{id}} if exists $thing->{id}; + $ref ||= find($thing->{origin}, $thing->{group}); if ($ref) { - my $t = tv_interval($thing->{t}, [ gettimeofday ]); - if (my $dxc = DXChannel::get($thing->{user} || $thing->{origin})) { + my $t = tv_interval($ref->{t}, [ gettimeofday ]); + if (my $dxc = DXChannel::get($ref->{user} || $ref->{origin})) { - my $tochan = DXChannel::get($thing->{touser} || $thing->{group}); + my $tochan = DXChannel::get($ref->{touser} || $ref->{group}); if ($dxc->is_user) { my $s = sprintf "%.2f", $t; my $ave = sprintf "%.2f", $tochan ? ($tochan->{pingave} || $t) : $t; - $dxc->send($dxc->msg('pingi', ($thing->{touser} || $thing->{group}), $s, $ave)) + $dxc->send($dxc->msg('pingi', $ref->{user}, $s, $ave)) } elsif ($dxc->is_node) { if ($tochan ) { my $nopings = $tochan->user->nopings || $DXProt::obscount; @@ -179,10 +179,17 @@ sub forget sub find { - my $call = shift; + my $to = shift; + my $from = shift; + my $user = shift; + foreach my $thing (values %ping) { - if (($thing->{user} || $thing->{origin}) eq $call) { - return $thing; + if ($thing->{origin} eq $from && $thing->{group} eq $to) { + if ($user) { + return if $thing->{user} && $thing->{user} eq $user; + } else { + return $thing; + } } } return undef;