Add resolv_res_nsend

Add public function resolv_res_nsend which would call res_nsend directly.
This function will be used by DNS-Async API.

Test: built, flashed, booted

Change-Id: I81cead2ea00e7e6f738fc0b3eef12a036a10fc7c
diff --git a/resolv/include/netd_resolv/resolv.h b/resolv/include/netd_resolv/resolv.h
index 981340a..134725a 100644
--- a/resolv/include/netd_resolv/resolv.h
+++ b/resolv/include/netd_resolv/resolv.h
@@ -110,6 +110,11 @@
                                                            const addrinfo*,
                                                            const android_net_context*, addrinfo**);
 
+// Query dns with raw msg
+// TODO: Add a way to control query parameter, like flags, or maybe res_options or even res_state.
+LIBNETD_RESOLV_PUBLIC int resolv_res_nsend(const android_net_context* netContext, const u_char* msg,
+                                           int msgLen, u_char* ans, int ansLen, int* rcode);
+
 // Set name servers for a network
 LIBNETD_RESOLV_PUBLIC int resolv_set_nameservers_for_net(unsigned netid, const char** servers,
                                                          unsigned numservers, const char* domains,
diff --git a/resolv/libnetd_resolv.map.txt b/resolv/libnetd_resolv.map.txt
index e139ab7..aa28e10 100644
--- a/resolv/libnetd_resolv.map.txt
+++ b/resolv/libnetd_resolv.map.txt
@@ -27,11 +27,12 @@
     android_net_res_stats_get_info_for_net;
     android_net_res_stats_get_usable_servers;
     resolv_delete_cache_for_net;
-    resolv_set_nameservers_for_net;
-    resolv_set_private_dns_for_net;
     resolv_delete_private_dns_for_net;
     resolv_get_private_dns_status_for_net;
     resolv_register_private_dns_callback;
+    resolv_res_nsend;
+    resolv_set_nameservers_for_net;
+    resolv_set_private_dns_for_net;
   local:
     *;
 };
diff --git a/resolv/res_send.cpp b/resolv/res_send.cpp
index ed0b85f..c9ed708 100644
--- a/resolv/res_send.cpp
+++ b/resolv/res_send.cpp
@@ -1293,3 +1293,12 @@
         }
     }
 }
+
+int resolv_res_nsend(const android_net_context* netContext, const u_char* msg, int msgLen,
+                     u_char* ans, int ansLen, int* rcode) {
+    res_state res = res_get_state();
+    res_setnetcontext(res, netContext);
+    _resolv_populate_res_for_net(res);
+    *rcode = NOERROR;
+    return res_nsend(res, msg, msgLen, ans, ansLen, rcode);
+}