-
-=head2 C<< $obj->peer_ip_string() >>
-
-Returns the string describing the peer's IP
-
-=cut
-sub peer_ip_string {
- my PublicInbox::DS $self = shift;
- return _undef("peer_ip_string undef: no sock") unless $self->{sock};
- return $self->{peer_ip} if defined $self->{peer_ip};
-
- my $pn = getpeername($self->{sock});
- return _undef("peer_ip_string undef: getpeername") unless $pn;
-
- my ($port, $iaddr) = eval {
- if (length($pn) >= 28) {
- return Socket6::unpack_sockaddr_in6($pn);
- } else {
- return Socket::sockaddr_in($pn);
- }
- };
-
- if ($@) {
- $self->{peer_port} = "[Unknown peerport '$@']";
- return "[Unknown peername '$@']";
- }
-
- $self->{peer_port} = $port;
-
- if (length($iaddr) == 4) {
- return $self->{peer_ip} = Socket::inet_ntoa($iaddr);
- } else {
- $self->{peer_v6} = 1;
- return $self->{peer_ip} = Socket6::inet_ntop(Socket6::AF_INET6(),
- $iaddr);
- }
-}
-
-=head2 C<< $obj->peer_addr_string() >>
-
-Returns the string describing the peer for the socket which underlies this
-object in form "ip:port"
-
-=cut
-sub peer_addr_string {
- my PublicInbox::DS $self = shift;
- my $ip = $self->peer_ip_string
- or return undef;
- return $self->{peer_v6} ?
- "[$ip]:$self->{peer_port}" :
- "$ip:$self->{peer_port}";
-}
-
-=head2 C<< $obj->local_ip_string() >>
-
-Returns the string describing the local IP
-
-=cut
-sub local_ip_string {
- my PublicInbox::DS $self = shift;
- return _undef("local_ip_string undef: no sock") unless $self->{sock};
- return $self->{local_ip} if defined $self->{local_ip};
-
- my $pn = getsockname($self->{sock});
- return _undef("local_ip_string undef: getsockname") unless $pn;
-
- my ($port, $iaddr) = Socket::sockaddr_in($pn);
- $self->{local_port} = $port;
-
- return $self->{local_ip} = Socket::inet_ntoa($iaddr);
-}
-
-=head2 C<< $obj->local_addr_string() >>
-
-Returns the string describing the local end of the socket which underlies this
-object in form "ip:port"
-
-=cut
-sub local_addr_string {
- my PublicInbox::DS $self = shift;
- my $ip = $self->local_ip_string;
- return $ip ? "$ip:$self->{local_port}" : undef;
-}
-
-