Remove parseServer
IPAddress and IPSockAddr are well-tested utilities. Use them in
DnsTlsServer so that many code related to sockaddr_storage can
be removed.
Bug: 186177613
Test: cd packages/modules/DnsResolver && atest
Change-Id: I59f59f6f50bd7b376fa0f8775c8999eee7cf9004
diff --git a/PrivateDnsConfiguration.cpp b/PrivateDnsConfiguration.cpp
index 6b9c460..afabfdd 100644
--- a/PrivateDnsConfiguration.cpp
+++ b/PrivateDnsConfiguration.cpp
@@ -38,6 +38,7 @@
using aidl::android::net::resolv::aidl::PrivateDnsValidationEventParcel;
using android::base::StringPrintf;
using android::netdutils::IPAddress;
+using android::netdutils::IPSockAddr;
using android::netdutils::setThreadName;
using android::netdutils::Slice;
using std::chrono::milliseconds;
@@ -45,24 +46,6 @@
namespace android {
namespace net {
-bool parseServer(const char* server, sockaddr_storage* parsed) {
- addrinfo hints = {
- .ai_flags = AI_NUMERICHOST | AI_NUMERICSERV,
- .ai_family = AF_UNSPEC,
- };
- addrinfo* res;
-
- int err = getaddrinfo(server, "853", &hints, &res);
- if (err != 0) {
- LOG(WARNING) << "Failed to parse server address (" << server << "): " << gai_strerror(err);
- return false;
- }
-
- memcpy(parsed, res->ai_addr, res->ai_addrlen);
- freeaddrinfo(res);
- return true;
-}
-
int PrivateDnsConfiguration::set(int32_t netId, uint32_t mark,
const std::vector<std::string>& servers, const std::string& name,
const std::string& caCert) {
@@ -72,11 +55,13 @@
// Parse the list of servers that has been passed in
PrivateDnsTracker tmp;
for (const auto& s : servers) {
- sockaddr_storage parsed;
- if (!parseServer(s.c_str(), &parsed)) {
+ IPAddress ip;
+ if (!IPAddress::forString(s, &ip)) {
+ LOG(WARNING) << "Failed to parse server address (" << s << ")";
return -EINVAL;
}
- auto server = std::make_unique<DnsTlsServer>(parsed);
+
+ auto server = std::make_unique<DnsTlsServer>(ip);
server->name = name;
server->certificate = caCert;
server->mark = mark;