Networking

#include <multinetwork.h>

Summary

Enumerations

ResNsendFlags{
  ANDROID_RESOLV_NO_RETRY = 1 << 0,
  ANDROID_RESOLV_NO_CACHE_STORE = 1 << 1,
  ANDROID_RESOLV_NO_CACHE_LOOKUP = 1 << 2
}
enum
Possible values of the flags argument to android_res_nsend and android_res_nquery.

Typedefs

net_handle_t typedef
uint64_t
The corresponding C type for android.net.Network::getNetworkHandle() return values.

Functions

android_getaddrinfofornetwork(net_handle_t network, const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res)
int
Perform hostname resolution via the DNS servers associated with |network|.
android_res_cancel(int nsend_fd)
void
Attempts to cancel the in-progress query associated with the |nsend_fd| descriptor.
android_res_nquery(net_handle_t network, const char *dname, int ns_class, int ns_type, uint32_t flags)
int
Look up the {|ns_class|, |ns_type|} Resource Record (RR) associated with Domain Name |dname| on the given |network|.
android_res_nresult(int fd, int *rcode, uint8_t *answer, size_t anslen)
int
Read a result for the query associated with the |fd| descriptor.
android_res_nsend(net_handle_t network, const uint8_t *msg, size_t msglen, uint32_t flags)
int
Issue the query |msg| on the given |network|.
android_setprocnetwork(net_handle_t network)
int
Binds the current process to |network|.
android_setsocknetwork(net_handle_t network, int fd)
int
All functions below that return an int return 0 on success or -1 on failure with an appropriate errno value set.

Enumerations

ResNsendFlags

 ResNsendFlags

Possible values of the flags argument to android_res_nsend and android_res_nquery.

Values are ORed together.

Properties
ANDROID_RESOLV_NO_CACHE_LOOKUP

Don't lookup the request in cache.

ANDROID_RESOLV_NO_CACHE_STORE

Do not cache the result of the lookup.

The lookup may return a result that is already in the cache, unless the ANDROID_RESOLV_NO_CACHE_LOOKUP flag is also specified.

ANDROID_RESOLV_NO_RETRY

Send a single request to a single resolver and fail on timeout or network errors.

Typedefs

net_handle_t

uint64_t net_handle_t

The corresponding C type for android.net.Network::getNetworkHandle() return values.

The Java signed long value can be safely cast to a net_handle_t:

[C] ((net_handle_t) java_long_network_handle) [C++] static_cast(java_long_network_handle)

as appropriate.

Functions

android_getaddrinfofornetwork

int android_getaddrinfofornetwork(
  net_handle_t network,
  const char *node,
  const char *service,
  const struct addrinfo *hints,
  struct addrinfo **res
)

Perform hostname resolution via the DNS servers associated with |network|.

All arguments (apart from |network|) are used identically as those passed to getaddrinfo(3). Return and error values are identical to those of getaddrinfo(3), and in particular gai_strerror(3) can be used as expected. Similar to getaddrinfo(3):

  • |hints| may be NULL (in which case man page documented defaults apply)
  • either |node| or |service| may be NULL, but not both
  • |res| must not be NULL

This is the equivalent of: android.net.Network::getAllByName())

android_res_cancel

void android_res_cancel(
  int nsend_fd
)

Attempts to cancel the in-progress query associated with the |nsend_fd| descriptor.

android_res_nquery

int android_res_nquery(
  net_handle_t network,
  const char *dname,
  int ns_class,
  int ns_type,
  uint32_t flags
)

Look up the {|ns_class|, |ns_type|} Resource Record (RR) associated with Domain Name |dname| on the given |network|.

The typical value for |ns_class| is ns_c_in, while |type| can be any record type (for instance, ns_t_aaaa or ns_t_txt). |flags| is a additional config to control actual querying behavior, see ResNsendFlags for detail.

Returns a file descriptor to watch for read events, or a negative POSIX error code (see errno.h) if an immediate error occurs.

android_res_nresult

int android_res_nresult(
  int fd,
  int *rcode,
  uint8_t *answer,
  size_t anslen
)

Read a result for the query associated with the |fd| descriptor.

Closes |fd| before returning.

Returns: < 0: negative POSIX error code (see errno.h for possible values). |rcode| is not set. >= 0: length of |answer|. |rcode| is the resolver return code (e.g., ns_r_nxdomain)

android_res_nsend

int android_res_nsend(
  net_handle_t network,
  const uint8_t *msg,
  size_t msglen,
  uint32_t flags
)

Issue the query |msg| on the given |network|.

|flags| is a additional config to control actual querying behavior, see ResNsendFlags for detail.

Returns a file descriptor to watch for read events, or a negative POSIX error code (see errno.h) if an immediate error occurs.

android_setprocnetwork

int android_setprocnetwork(
  net_handle_t network
)

Binds the current process to |network|.

All sockets created in the future (and not explicitly bound via android_setsocknetwork()) will be bound to |network|. All host name resolutions will be limited to |network| as well. Note that if the network identified by |network| ever disconnects, all sockets created in this way will cease to work and all host name resolutions will fail. This is by design so an application doesn't accidentally use sockets it thinks are still bound to a particular network.

To clear a previous process binding, invoke with NETWORK_UNSPECIFIED.

This is the equivalent of: android.net.ConnectivityManager::setProcessDefaultNetwork())

android_setsocknetwork

int android_setsocknetwork(
  net_handle_t network,
  int fd
)

All functions below that return an int return 0 on success or -1 on failure with an appropriate errno value set.

Set the network to be used by the given socket file descriptor.

To clear a previous socket binding, invoke with NETWORK_UNSPECIFIED.

This is the equivalent of: android.net.Network::bindSocket())