summaryrefslogtreecommitdiffstats
path: root/core/jni/android_net_NetUtils.cpp
diff options
context:
space:
mode:
authorRobert Greenwalt <rgreenwalt@google.com>2011-04-28 14:28:50 -0700
committerRobert Greenwalt <rgreenwalt@google.com>2011-05-02 11:17:30 -0700
commitaa70f101e08098ed9cb190abe2d7f952561026b8 (patch)
tree8dd78eb19fa32c9c98f31b258aff02accb3ee4fa /core/jni/android_net_NetUtils.cpp
parent969749319ca17f6e0c6836303a78cc484df2539b (diff)
downloadframeworks_base-aa70f101e08098ed9cb190abe2d7f952561026b8.zip
frameworks_base-aa70f101e08098ed9cb190abe2d7f952561026b8.tar.gz
frameworks_base-aa70f101e08098ed9cb190abe2d7f952561026b8.tar.bz2
Add RouteInfo objects for tracking routes.
Used to have list of gateways for default routes, but general static routes should be supported. Change-Id: I01730142c6139f2b833b9d48f5381d2d320b69f6
Diffstat (limited to 'core/jni/android_net_NetUtils.cpp')
-rw-r--r--core/jni/android_net_NetUtils.cpp27
1 files changed, 24 insertions, 3 deletions
diff --git a/core/jni/android_net_NetUtils.cpp b/core/jni/android_net_NetUtils.cpp
index 3adf770..33ba26a 100644
--- a/core/jni/android_net_NetUtils.cpp
+++ b/core/jni/android_net_NetUtils.cpp
@@ -58,7 +58,6 @@ static struct fieldIds {
jclass dhcpInfoInternalClass;
jmethodID constructorId;
jfieldID ipaddress;
- jfieldID gateway;
jfieldID prefixLength;
jfieldID dns1;
jfieldID dns2;
@@ -165,7 +164,30 @@ static jboolean android_net_utils_runDhcp(JNIEnv* env, jobject clazz, jstring if
env->ReleaseStringUTFChars(ifname, nameStr);
if (result == 0 && dhcpInfoInternalFieldIds.dhcpInfoInternalClass != NULL) {
env->SetObjectField(info, dhcpInfoInternalFieldIds.ipaddress, env->NewStringUTF(ipaddr));
- env->SetObjectField(info, dhcpInfoInternalFieldIds.gateway, env->NewStringUTF(gateway));
+
+ // set the gateway
+ jclass cls = env->FindClass("java/net/InetAddress");
+ jmethodID method = env->GetStaticMethodID(cls, "getByName",
+ "(Ljava/lang/String;)Ljava/net/InetAddress;");
+ jvalue args[1];
+ args[0].l = env->NewStringUTF(gateway);
+ jobject inetAddressObject = env->CallStaticObjectMethodA(cls, method, args);
+
+ if (!env->ExceptionOccurred()) {
+ cls = env->FindClass("android/net/RouteInfo");
+ method = env->GetMethodID(cls, "<init>", "(Ljava/net/InetAddress;)V");
+ args[0].l = inetAddressObject;
+ jobject routeInfoObject = env->NewObjectA(cls, method, args);
+
+ cls = env->FindClass("android/net/DhcpInfoInternal");
+ method = env->GetMethodID(cls, "addRoute", "(Landroid/net/RouteInfo;)V");
+ args[0].l = routeInfoObject;
+ env->CallVoidMethodA(info, method, args);
+ } else {
+ // if we have an exception (host not found perhaps), just don't add the route
+ env->ExceptionClear();
+ }
+
env->SetIntField(info, dhcpInfoInternalFieldIds.prefixLength, prefixLength);
env->SetObjectField(info, dhcpInfoInternalFieldIds.dns1, env->NewStringUTF(dns1));
env->SetObjectField(info, dhcpInfoInternalFieldIds.dns2, env->NewStringUTF(dns2));
@@ -233,7 +255,6 @@ int register_android_net_NetworkUtils(JNIEnv* env)
if (dhcpInfoInternalFieldIds.dhcpInfoInternalClass != NULL) {
dhcpInfoInternalFieldIds.constructorId = env->GetMethodID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "<init>", "()V");
dhcpInfoInternalFieldIds.ipaddress = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "ipAddress", "Ljava/lang/String;");
- dhcpInfoInternalFieldIds.gateway = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "gateway", "Ljava/lang/String;");
dhcpInfoInternalFieldIds.prefixLength = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "prefixLength", "I");
dhcpInfoInternalFieldIds.dns1 = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "dns1", "Ljava/lang/String;");
dhcpInfoInternalFieldIds.dns2 = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "dns2", "Ljava/lang/String;");