summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Remi NGUYEN VAN <reminv@google.com> 2021-06-04 07:01:11 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2021-06-04 07:01:11 +0000
commita2f8b41020e3ad91ca06918bada88b2ed5e26e14 (patch)
tree8d837c4ebec2a907db7c31b866ce9c5fc9e98595
parent7576e161f1a2bad14feb656bf666d7245e8e8ffb (diff)
parentba43fb8406b94ff9374cc2f679467a74bb7458f2 (diff)
Merge "Add NDK API for getprocdns,setprocdns"
-rw-r--r--native/android/libandroid.map.txt2
-rw-r--r--native/android/libandroid_net.map.txt2
-rw-r--r--native/android/net.c32
3 files changed, 36 insertions, 0 deletions
diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt
index 919fd8177e58..33c4c40078fb 100644
--- a/native/android/libandroid.map.txt
+++ b/native/android/libandroid.map.txt
@@ -276,6 +276,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
diff --git a/native/android/libandroid_net.map.txt b/native/android/libandroid_net.map.txt
index cc8dd727408f..a6c1b5098066 100644
--- a/native/android/libandroid_net.map.txt
+++ b/native/android/libandroid_net.map.txt
@@ -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:
*;
};
diff --git a/native/android/net.c b/native/android/net.c
index d4b888845b27..e2f36a77b7c6 100644
--- a/native/android/net.c
+++ b/native/android/net.c
@@ -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) {