Skip to content

Commit 1a4cd32

Browse files
committed
Fix address converting to string.
1 parent bd8dd3c commit 1a4cd32

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

source/base/net/tcp_channel.cc

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -119,16 +119,34 @@ std::u16string TcpChannel::peerAddress() const
119119
if (!socket_.is_open())
120120
return std::u16string();
121121

122-
asio::ip::address address = socket_.remote_endpoint().address();
123-
if (address.is_v4())
122+
try
124123
{
125-
asio::ip::address ipv4_address = address.to_v4();
126-
return utf16FromLocal8Bit(ipv4_address.to_string());
124+
asio::ip::address address = socket_.remote_endpoint().address();
125+
if (address.is_v4())
126+
{
127+
asio::ip::address_v4 ipv4_address = address.to_v4();
128+
return utf16FromLocal8Bit(ipv4_address.to_string());
129+
}
130+
else
131+
{
132+
asio::ip::address_v6 ipv6_address = address.to_v6();
133+
if (ipv6_address.is_v4_mapped())
134+
{
135+
asio::ip::address_v4 ipv4_address =
136+
asio::ip::make_address_v4(asio::ip::v4_mapped, ipv6_address);
137+
return utf16FromLocal8Bit(ipv4_address.to_string());
138+
}
139+
else
140+
{
141+
return utf16FromLocal8Bit(ipv6_address.to_string());
142+
}
143+
}
127144
}
128-
else
145+
catch (const std::error_code& error_code)
129146
{
130-
asio::ip::address ipv6_address = address.to_v6();
131-
return utf16FromLocal8Bit(ipv6_address.to_string());
147+
LOG(LS_ERROR) << "Unable to get peer address: "
148+
<< base::utf16FromLocal8Bit(error_code.message());
149+
return std::u16string();
132150
}
133151
}
134152

0 commit comments

Comments
 (0)