Add NDK API for getprocdns,setprocdns

The API allows callers to control the default network that is used for
DNS hostname resolution.

Test: atest CtsNetTestCases
      Tests in change I00143cafcd3eb1d71e8d5c7ea9c839a99dc6f4ce
Bug: 171540887
Change-Id: I42f0d9b17b3058f6e10fd2e651278b290f26667f
This commit is contained in:
Remi NGUYEN VAN 2021-03-23 00:57:38 +00:00
parent 49148d762d
commit 86ae725fb9
3 changed files with 36 additions and 0 deletions

View File

@ -287,6 +287,8 @@ LIBANDROID {
android_getaddrinfofornetwork; # introduced=23
android_getprocnetwork; # introduced=31
android_setprocnetwork; # introduced=23
android_getprocdns; # introduced=31
android_setprocdns; # introduced=31
android_setsocknetwork; # introduced=23
android_res_cancel; # introduced=29
android_res_nquery; # introduced=29

View File

@ -16,6 +16,8 @@ LIBANDROID_NET {
android_res_nsend; # llndk
# These functions have been part of the NDK since API 31.
android_getprocnetwork; # llndk
android_setprocdns; # llndk
android_getprocdns; # llndk
local:
*;
};

View File

@ -90,6 +90,38 @@ int android_getprocnetwork(net_handle_t *network) {
return 0;
}
int android_setprocdns(net_handle_t network) {
unsigned netid;
if (!getnetidfromhandle(network, &netid)) {
errno = EINVAL;
return -1;
}
int rval = setNetworkForResolv(netid);
if (rval < 0) {
errno = -rval;
rval = -1;
}
return rval;
}
int android_getprocdns(net_handle_t *network) {
if (network == NULL) {
errno = EINVAL;
return -1;
}
unsigned netid;
int rval = getNetworkForDns(&netid);
if (rval < 0) {
errno = -rval;
return -1;
}
*network = gethandlefromnetid(netid);
return 0;
}
int android_getaddrinfofornetwork(net_handle_t network,
const char *node, const char *service,
const struct addrinfo *hints, struct addrinfo **res) {