am 21700fed: am 5f7203eb: am 5a27a754: am bd1dee94: Merge "gps: Adding ip address for AGps"

* commit '21700fedfe29f6a0a752d2bea46142038e69136c':
  gps: Adding ip address for AGps
diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java
index 5159b7a..b79e31f 100755
--- a/services/java/com/android/server/location/GpsLocationProvider.java
+++ b/services/java/com/android/server/location/GpsLocationProvider.java
@@ -256,6 +256,7 @@
 
     private String mAGpsApn;
     private int mAGpsDataConnectionState;
+    private int mAGpsDataConnectionIpAddr;
     private final ConnectivityManager mConnMgr;
     private final GpsNetInitiatedHandler mNIHandler; 
 
@@ -502,6 +503,14 @@
                     apnName = "dummy-apn";
                 }
                 mAGpsApn = apnName;
+                if (DEBUG) Log.d(TAG, "mAGpsDataConnectionIpAddr " + mAGpsDataConnectionIpAddr);
+                if (mAGpsDataConnectionIpAddr != 0xffffffff) {
+                    boolean route_result;
+                    if (DEBUG) Log.d(TAG, "call requestRouteToHost");
+                    route_result = mConnMgr.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_SUPL,
+                        mAGpsDataConnectionIpAddr);
+                    if (route_result == false) Log.d(TAG, "call requestRouteToHost failed");
+                }
                 if (DEBUG) Log.d(TAG, "call native_agps_data_conn_open");
                 native_agps_data_conn_open(apnName);
                 mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN;
@@ -1236,7 +1245,7 @@
     /**
      * called from native code to update AGPS status
      */
-    private void reportAGpsStatus(int type, int status) {
+    private void reportAGpsStatus(int type, int status, int ipaddr) {
         switch (status) {
             case GPS_REQUEST_AGPS_DATA_CONN:
                 if (DEBUG) Log.d(TAG, "GPS_REQUEST_AGPS_DATA_CONN");
@@ -1245,9 +1254,19 @@
                 mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING;
                 int result = mConnMgr.startUsingNetworkFeature(
                         ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_SUPL);
+                mAGpsDataConnectionIpAddr = ipaddr;
                 if (result == Phone.APN_ALREADY_ACTIVE) {
                     if (DEBUG) Log.d(TAG, "Phone.APN_ALREADY_ACTIVE");
                     if (mAGpsApn != null) {
+                        Log.d(TAG, "mAGpsDataConnectionIpAddr " + mAGpsDataConnectionIpAddr);
+                        if (mAGpsDataConnectionIpAddr != 0xffffffff) {
+                            boolean route_result;
+                            if (DEBUG) Log.d(TAG, "call requestRouteToHost");
+                            route_result = mConnMgr.requestRouteToHost(
+                                ConnectivityManager.TYPE_MOBILE_SUPL,
+                                mAGpsDataConnectionIpAddr);
+                            if (route_result == false) Log.d(TAG, "call requestRouteToHost failed");
+                        }
                         native_agps_data_conn_open(mAGpsApn);
                         mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN;
                     } else {
diff --git a/services/jni/com_android_server_location_GpsLocationProvider.cpp b/services/jni/com_android_server_location_GpsLocationProvider.cpp
index 87ffcba..c29be3a 100755
--- a/services/jni/com_android_server_location_GpsLocationProvider.cpp
+++ b/services/jni/com_android_server_location_GpsLocationProvider.cpp
@@ -163,8 +163,15 @@
 static void agps_status_callback(AGpsStatus* agps_status)
 {
     JNIEnv* env = AndroidRuntime::getJNIEnv();
+
+    uint32_t ipaddr;
+    // ipaddr field was not included in original AGpsStatus
+    if (agps_status->size >= sizeof(AGpsStatus))
+        ipaddr = agps_status->ipaddr;
+    else
+        ipaddr = 0xFFFFFFFF;
     env->CallVoidMethod(mCallbacksObj, method_reportAGpsStatus,
-                        agps_status->type, agps_status->status);
+                        agps_status->type, agps_status->status, ipaddr);
     checkAndClearExceptionFromCallback(env, __FUNCTION__);
 }
 
@@ -233,7 +240,7 @@
     method_reportLocation = env->GetMethodID(clazz, "reportLocation", "(IDDDFFFJ)V");
     method_reportStatus = env->GetMethodID(clazz, "reportStatus", "(I)V");
     method_reportSvStatus = env->GetMethodID(clazz, "reportSvStatus", "()V");
-    method_reportAGpsStatus = env->GetMethodID(clazz, "reportAGpsStatus", "(II)V");
+    method_reportAGpsStatus = env->GetMethodID(clazz, "reportAGpsStatus", "(III)V");
     method_reportNmea = env->GetMethodID(clazz, "reportNmea", "(J)V");
     method_setEngineCapabilities = env->GetMethodID(clazz, "setEngineCapabilities", "(I)V");
     method_xtraDownloadRequest = env->GetMethodID(clazz, "xtraDownloadRequest", "()V");