X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FMsg.pm;h=c81273e29b329a5070b2bd53e34e7371564e3c68;hb=f91073b99369ea05c42364f9462695be7a67016d;hp=13833962d3d316d26f997e8861a431d143bda478;hpb=309eea6bcd4a0eaf25f810168bc38dc348c2a982;p=spider.git diff --git a/perl/Msg.pm b/perl/Msg.pm index 13833962..c81273e2 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -18,7 +18,7 @@ use Mojo::IOLoop; use Mojo::IOLoop::Stream; use DXDebug; -use Timer; +use DXTimer; use vars qw($now %conns $noconns $cnum $total_in $total_out $total_lines_in $total_lines_out $connect_timeout $disc_waittime); @@ -133,9 +133,28 @@ sub peerhost $conn->{peerhost} ||= $conn->{sock}->handle->peerhost if $conn->{sock}; $conn->{peerhost} ||= 'UNKNOWN'; } + $conn->{peerhost} =~ s/^::ffff://; return $conn->{peerhost}; } +sub sockhost +{ + my $conn = shift; + unless ($conn->{sockhost}) { + $conn->{sockhost} ||= 'ax25' if $conn->ax25; + $conn->{sockhost} ||= $conn->{sock}->handle->sockhost if $conn->{sock}; + $conn->{sockhost} ||= 'UNKNOWN'; + } + $conn->{sockhost} =~ s/^::ffff://; + if (! defined $main::localhost_alias_ipv4 && $conn->{sockhost} =~ /\./ && $conn->{sockhost} !~ /^127\./) { + $main::localhost_alias_ipv4 = $conn->{sockhost}; + dbg("Msg: localhost_alias_ipv4 = '$main::localhost_alias_ipv4'"); + } elsif (! defined $main::localhost_alias_ipv6 && $conn->{sockhost} =~ /:/ && $conn->{sockhost} !~ /^::1$/) { + $main::localhost_alias_ipv6 = $conn->{sockhost}; + dbg("Msg: localhost_alias_ipv6 = '$main::localhost_alias_ipv6'"); + } + return $conn->{sockhost}; +} #----------------------------------------------------------------- # Send side routines @@ -151,7 +170,8 @@ sub _on_connect $sock->timeout(0); $sock->start; $conn->{peerhost} = eval { $handle->peerhost; }; - dbg((ref $conn) . " connected $conn->{cnum} to $conn->{peerhost}:$conn->{peerport}") if isdbg('conn') || isdbg ('connect'); + $conn->{sockhost} = eval { $handle->sockhost; }; + dbg((ref $conn) . " connected $conn->{cnum}:$conn->{sockhost} to $conn->{peerhost}:$conn->{peerport}") if isdbg('conn') || isdbg ('connect'); if ($conn->{on_connect}) { &{$conn->{on_connect}}($conn, $handle); } @@ -291,7 +311,8 @@ sub disconnect dbg("Buffer empty, just close $call") if $dbg; _close_it($conn); } - } else { + } + else { dbg((ref $conn) . " socket missing on $conn->{call}") if $dbg; _close_it($conn); } @@ -447,7 +468,7 @@ sub _rcv { # Complement to _send my $msg = shift; my $sock = $conn->{sock}; return unless defined($sock); - return if $conn->{disconnecting}; + return if $conn->{disonnecting}; $total_in += length $msg; $conn->{datain} += length $msg; @@ -491,9 +512,9 @@ sub new_client { $sock->timeout(0); $sock->start; $conn->{peerhost} = $handle->peerhost || 'unknown'; - $conn->{peerhost} =~ s|^::ffff:||; # chop off leading pseudo IPV6 stuff on dual stack listeners $conn->{peerport} = $handle->peerport || 0; - dbg((ref $conn) . " accept $conn->{cnum} from $conn->{peerhost}:$conn->{peerport}") if isdbg('conn') || isdbg('connect'); + $conn->{sockhost} = $handle->sockhost || ''; + dbg((ref $conn) . " accept $conn->{cnum}:$conn->{sockhost} from $conn->{peerhost}:$conn->{peerport}") if isdbg('conn') || isdbg('connect'); my ($rproc, $eproc) = &{$server_conn->{rproc}} ($conn, $conn->{peerhost}, $conn->{peerport}); $conn->{sort} = 'Incoming'; if ($eproc) {