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);
$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
$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);
}
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);
}
if ($sock) {
dbg((ref $conn) . " Connection $conn->{cnum} $call closing gracefully") if isdbg('connll');
- $sock->close_gracefully;
+ $sock->close_gracefully if $sock->can('close_gracefully');
}
# get rid of any references
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;
$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) {
dbgtrace((ref $conn) . "::DESTROY on call $call called from ${pkg}::${fn} line $line ");
}
- my $call = $conn->{call} || 'unallocated';
my $host = $conn->{peerhost} || '';
my $port = $conn->{peerport} || '';
my $sock = $conn->{sock};
if ($sock) {
- $sock->close_gracefully;
+ $sock->close_gracefully if $sock->can('close_gracefully');
+ delete $conn->{sock};
}
$noconns--;