added IP address logging for connections
[spider.git] / perl / DXProt.pm
index c26016ee5048ce9205175a484ae042c3be8b1b31..e78d9a7a20fb0e2f2afe27e671e2cae00c430954 100644 (file)
@@ -216,6 +216,10 @@ sub start
        my ($self, $line, $sort) = @_;
        my $call = $self->{call};
        my $user = $self->{user};
+
+       # log it
+       my $host = $self->{conn}->{peerhost} || "unknown";
+       Log('DXProt', "$call connected from $host");
        
        # remember type of connection
        $self->{consort} = $line;
@@ -267,8 +271,6 @@ sub start
 
        # send info to all logged in thingies
        $self->tell_login('loginn');
-
-       Log('DXProt', "$call connected");
 }
 
 #
@@ -1039,14 +1041,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}) / 6);
                                                                        }
-                                                                       $tochan->{pingave} = $st / @{$tochan->{pingtime}};
+#                                                                      my $st;
+#                                                                      for (@{$tochan->{pingtime}}) {
+#                                                                              $st += $_;
+#                                                                      }
+#                                                                      $tochan->{pingave} = $st / @{$tochan->{pingtime}};
+                                                                       $tochan->{nopings} = $nopings; # pump up the timer
                                                                }
                                                        } 
                                                }
@@ -1903,12 +1918,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
@@ -1927,7 +1943,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};
                }
        }