Merge "Add NDK API for getprocnetwork"
This commit is contained in:
@@ -227,6 +227,7 @@ cc_library_shared {
|
||||
shared_libs: [
|
||||
"android.hardware.memtrack-V1-ndk_platform",
|
||||
"libandroidicu",
|
||||
"libandroid_net",
|
||||
"libbpf_android",
|
||||
"libnetdbpf",
|
||||
"libnetdutils",
|
||||
|
||||
@@ -274,6 +274,7 @@ LIBANDROID {
|
||||
ATrace_endAsyncSection; # introduced=29
|
||||
ATrace_setCounter; # introduced=29
|
||||
android_getaddrinfofornetwork; # introduced=23
|
||||
android_getprocnetwork; # introduced=31
|
||||
android_setprocnetwork; # introduced=23
|
||||
android_setsocknetwork; # introduced=23
|
||||
android_res_cancel; # introduced=29
|
||||
|
||||
@@ -14,6 +14,8 @@ LIBANDROID_NET {
|
||||
android_res_nquery; # llndk
|
||||
android_res_nresult; # llndk
|
||||
android_res_nsend; # llndk
|
||||
# These functions have been part of the NDK since API 31.
|
||||
android_getprocnetwork; # llndk
|
||||
local:
|
||||
*;
|
||||
};
|
||||
|
||||
@@ -22,12 +22,13 @@
|
||||
#include <stdlib.h>
|
||||
#include <sys/limits.h>
|
||||
|
||||
// This value MUST be kept in sync with the corresponding value in
|
||||
// the android.net.Network#getNetworkHandle() implementation.
|
||||
static const uint32_t kHandleMagic = 0xcafed00d;
|
||||
static const uint32_t kHandleMagicSize = 32;
|
||||
|
||||
static int getnetidfromhandle(net_handle_t handle, unsigned *netid) {
|
||||
static const uint32_t k32BitMask = 0xffffffff;
|
||||
// This value MUST be kept in sync with the corresponding value in
|
||||
// the android.net.Network#getNetworkHandle() implementation.
|
||||
static const uint32_t kHandleMagic = 0xcafed00d;
|
||||
|
||||
// Check for minimum acceptable version of the API in the low bits.
|
||||
if (handle != NETWORK_UNSPECIFIED &&
|
||||
@@ -41,6 +42,12 @@ static int getnetidfromhandle(net_handle_t handle, unsigned *netid) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static net_handle_t gethandlefromnetid(unsigned netid) {
|
||||
if (netid == NETID_UNSET) {
|
||||
return NETWORK_UNSPECIFIED;
|
||||
}
|
||||
return (((net_handle_t) netid) << kHandleMagicSize) | kHandleMagic;
|
||||
}
|
||||
|
||||
int android_setsocknetwork(net_handle_t network, int fd) {
|
||||
unsigned netid;
|
||||
@@ -72,6 +79,17 @@ int android_setprocnetwork(net_handle_t network) {
|
||||
return rval;
|
||||
}
|
||||
|
||||
int android_getprocnetwork(net_handle_t *network) {
|
||||
if (network == NULL) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned netid = getNetworkForProcess();
|
||||
*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) {
|
||||
|
||||
Reference in New Issue
Block a user