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

Commit c17821cc authored by Luke Huang's avatar Luke Huang
Browse files

Add asynchronous DNS query API

Adds support for asynchronous "raw" DNS API for clients.
API allows apps to use multinetworking capability correctly
and also allows other query types than A/AAAA.

Test: built, flashed, booted
      cts test: NativeDnsAsyncTest

Change-Id: I4701b76bd8f0094ef1bdd7c5371b54387914a91b
parent aff26736
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -218,6 +218,10 @@ LIBANDROID {
    android_getaddrinfofornetwork; # introduced=23
    android_setprocnetwork; # introduced=23
    android_setsocknetwork; # introduced=23
    android_res_cancel; # introduced=29
    android_res_nquery; # introduced=29
    android_res_nresult; # introduced=29
    android_res_nsend; # introduced=29
  local:
    *;
};
+7 −2
Original line number Diff line number Diff line
# These functions have been part of the NDK since API 24.
# They are also all available to vendor code.
LIBANDROID_NET {
  global:
    # These functions have been part of the NDK since API 24.
    android_getaddrinfofornetwork; # vndk
    android_setsocknetwork; # vndk
    android_setprocnetwork; # vndk
    android_getaddrinfofornetwork; # vndk
    # These functions have been part of the NDK since API 29.
    android_res_cancel; # vndk
    android_res_nquery; # vndk
    android_res_nresult; # vndk
    android_res_nsend; # vndk
  local:
    *;
};
+28 −0
Original line number Diff line number Diff line
@@ -83,3 +83,31 @@ int android_getaddrinfofornetwork(net_handle_t network,

    return android_getaddrinfofornet(node, service, hints, netid, 0, res);
}

int android_res_nquery(net_handle_t network,
        const char *dname, int ns_class, int ns_type) {
    unsigned netid;
    if (!getnetidfromhandle(network, &netid)) {
        return -ENONET;
    }

    return resNetworkQuery(netid, dname, ns_class, ns_type);
}

int android_res_nresult(int fd, int *rcode, unsigned char *answer, int anslen) {
    return resNetworkResult(fd, rcode, answer, anslen);
}

int android_res_nsend(net_handle_t network,
        const unsigned char *msg, int msglen) {
    unsigned netid;
    if (!getnetidfromhandle(network, &netid)) {
        return -ENONET;
    }

    return resNetworkSend(netid, msg, msglen);
}

void android_res_cancel(int nsend_fd) {
    resNetworkCancel(nsend_fd);
}