@@ -31,20 +31,22 @@ int ifc_reset_connections(const char *ifname, int reset_mask);
3131int dhcp_do_request (const char *ifname,
3232 const char *ipaddr,
3333 const char *gateway,
34- uint32_t *prefixLength,
34+ uint32_t *prefixLength,
3535 const char *dns1,
3636 const char *dns2,
3737 const char *server,
38- uint32_t *lease);
38+ uint32_t *lease,
39+ const char *vendorInfo);
3940
4041int dhcp_do_request_renew (const char *ifname,
4142 const char *ipaddr,
4243 const char *gateway,
43- uint32_t *prefixLength,
44+ uint32_t *prefixLength,
4445 const char *dns1,
4546 const char *dns2,
4647 const char *server,
47- uint32_t *lease);
48+ uint32_t *lease,
49+ const char *vendorInfo);
4850
4951int dhcp_stop (const char *ifname);
5052int dhcp_release_lease (const char *ifname);
@@ -68,6 +70,7 @@ static struct fieldIds {
6870 jfieldID dns2;
6971 jfieldID serverAddress;
7072 jfieldID leaseDuration;
73+ jfieldID vendorInfo;
7174} dhcpInfoInternalFieldIds;
7275
7376static jint android_net_utils_enableInterface (JNIEnv* env, jobject clazz, jstring ifname)
@@ -116,16 +119,17 @@ static jboolean android_net_utils_runDhcpCommon(JNIEnv* env, jobject clazz, jstr
116119 char dns2[PROPERTY_VALUE_MAX];
117120 char server[PROPERTY_VALUE_MAX];
118121 uint32_t lease;
122+ char vendorInfo[PROPERTY_VALUE_MAX];
119123
120124 const char *nameStr = env->GetStringUTFChars (ifname, NULL );
121125 if (nameStr == NULL ) return (jboolean)false ;
122126
123127 if (renew) {
124128 result = ::dhcp_do_request_renew (nameStr, ipaddr, gateway, &prefixLength,
125- dns1, dns2, server, &lease);
129+ dns1, dns2, server, &lease, vendorInfo );
126130 } else {
127131 result = ::dhcp_do_request (nameStr, ipaddr, gateway, &prefixLength,
128- dns1, dns2, server, &lease);
132+ dns1, dns2, server, &lease, vendorInfo );
129133 }
130134
131135 env->ReleaseStringUTFChars (ifname, nameStr);
@@ -161,6 +165,7 @@ static jboolean android_net_utils_runDhcpCommon(JNIEnv* env, jobject clazz, jstr
161165 env->SetObjectField (info, dhcpInfoInternalFieldIds.serverAddress ,
162166 env->NewStringUTF (server));
163167 env->SetIntField (info, dhcpInfoInternalFieldIds.leaseDuration , lease);
168+ env->SetObjectField (info, dhcpInfoInternalFieldIds.vendorInfo , env->NewStringUTF (vendorInfo));
164169 }
165170 return (jboolean)(result == 0 );
166171}
@@ -230,6 +235,7 @@ int register_android_net_NetworkUtils(JNIEnv* env)
230235 dhcpInfoInternalFieldIds.dns2 = env->GetFieldID (dhcpInfoInternalClass, " dns2" , " Ljava/lang/String;" );
231236 dhcpInfoInternalFieldIds.serverAddress = env->GetFieldID (dhcpInfoInternalClass, " serverAddress" , " Ljava/lang/String;" );
232237 dhcpInfoInternalFieldIds.leaseDuration = env->GetFieldID (dhcpInfoInternalClass, " leaseDuration" , " I" );
238+ dhcpInfoInternalFieldIds.vendorInfo = env->GetFieldID (dhcpInfoInternalClass, " vendorInfo" , " Ljava/lang/String;" );
233239
234240 return AndroidRuntime::registerNativeMethods (env,
235241 NETUTILS_PKG_NAME, gNetworkUtilMethods , NELEM (gNetworkUtilMethods ));
0 commit comments