Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86ae725f authored by Remi NGUYEN VAN's avatar Remi NGUYEN VAN
Browse files

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
parent 49148d76
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
+2 −0
Original line number Diff line number Diff line
@@ -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:
    *;
};
+32 −0
Original line number Diff line number Diff line
@@ -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) {