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");