Skip to content

Commit 8efd74d

Browse files
Stephen Limikeandroid
authored andcommitted
gps: Adding ip address for AGps
Change-Id: Ic590187d159853de2f1bd2912e159f0a00d8fb10
1 parent 0ff79e8 commit 8efd74d

2 files changed

Lines changed: 29 additions & 3 deletions

File tree

services/java/com/android/server/location/GpsLocationProvider.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
253253

254254
private String mAGpsApn;
255255
private int mAGpsDataConnectionState;
256+
private int mAGpsDataConnectionIpAddr;
256257
private final ConnectivityManager mConnMgr;
257258
private final GpsNetInitiatedHandler mNIHandler;
258259

@@ -503,6 +504,14 @@ private void handleUpdateNetworkState(int state, NetworkInfo info) {
503504
apnName = "dummy-apn";
504505
}
505506
mAGpsApn = apnName;
507+
if (DEBUG) Log.d(TAG, "mAGpsDataConnectionIpAddr " + mAGpsDataConnectionIpAddr);
508+
if (mAGpsDataConnectionIpAddr != 0xffffffff) {
509+
boolean route_result;
510+
if (DEBUG) Log.d(TAG, "call requestRouteToHost");
511+
route_result = mConnMgr.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_SUPL,
512+
mAGpsDataConnectionIpAddr);
513+
if (route_result == false) Log.d(TAG, "call requestRouteToHost failed");
514+
}
506515
if (DEBUG) Log.d(TAG, "call native_agps_data_conn_open");
507516
native_agps_data_conn_open(apnName);
508517
mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN;
@@ -1230,7 +1239,7 @@ private void reportSvStatus() {
12301239
/**
12311240
* called from native code to update AGPS status
12321241
*/
1233-
private void reportAGpsStatus(int type, int status) {
1242+
private void reportAGpsStatus(int type, int status, int ipaddr) {
12341243
switch (status) {
12351244
case GPS_REQUEST_AGPS_DATA_CONN:
12361245
if (DEBUG) Log.d(TAG, "GPS_REQUEST_AGPS_DATA_CONN");
@@ -1239,9 +1248,19 @@ private void reportAGpsStatus(int type, int status) {
12391248
mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING;
12401249
int result = mConnMgr.startUsingNetworkFeature(
12411250
ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_SUPL);
1251+
mAGpsDataConnectionIpAddr = ipaddr;
12421252
if (result == Phone.APN_ALREADY_ACTIVE) {
12431253
if (DEBUG) Log.d(TAG, "Phone.APN_ALREADY_ACTIVE");
12441254
if (mAGpsApn != null) {
1255+
Log.d(TAG, "mAGpsDataConnectionIpAddr " + mAGpsDataConnectionIpAddr);
1256+
if (mAGpsDataConnectionIpAddr != 0xffffffff) {
1257+
boolean route_result;
1258+
if (DEBUG) Log.d(TAG, "call requestRouteToHost");
1259+
route_result = mConnMgr.requestRouteToHost(
1260+
ConnectivityManager.TYPE_MOBILE_SUPL,
1261+
mAGpsDataConnectionIpAddr);
1262+
if (route_result == false) Log.d(TAG, "call requestRouteToHost failed");
1263+
}
12451264
native_agps_data_conn_open(mAGpsApn);
12461265
mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN;
12471266
} else {

services/jni/com_android_server_location_GpsLocationProvider.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,15 @@ GpsXtraCallbacks sGpsXtraCallbacks = {
154154
static void agps_status_callback(AGpsStatus* agps_status)
155155
{
156156
JNIEnv* env = AndroidRuntime::getJNIEnv();
157+
158+
uint32_t ipaddr;
159+
// ipaddr field was not included in original AGpsStatus
160+
if (agps_status->size >= sizeof(AGpsStatus))
161+
ipaddr = agps_status->ipaddr;
162+
else
163+
ipaddr = 0xFFFFFFFF;
157164
env->CallVoidMethod(mCallbacksObj, method_reportAGpsStatus,
158-
agps_status->type, agps_status->status);
165+
agps_status->type, agps_status->status, ipaddr);
159166
checkAndClearExceptionFromCallback(env, __FUNCTION__);
160167
}
161168

@@ -224,7 +231,7 @@ static void android_location_GpsLocationProvider_class_init_native(JNIEnv* env,
224231
method_reportLocation = env->GetMethodID(clazz, "reportLocation", "(IDDDFFFJ)V");
225232
method_reportStatus = env->GetMethodID(clazz, "reportStatus", "(I)V");
226233
method_reportSvStatus = env->GetMethodID(clazz, "reportSvStatus", "()V");
227-
method_reportAGpsStatus = env->GetMethodID(clazz, "reportAGpsStatus", "(II)V");
234+
method_reportAGpsStatus = env->GetMethodID(clazz, "reportAGpsStatus", "(III)V");
228235
method_reportNmea = env->GetMethodID(clazz, "reportNmea", "(J)V");
229236
method_setEngineCapabilities = env->GetMethodID(clazz, "setEngineCapabilities", "(I)V");
230237
method_xtraDownloadRequest = env->GetMethodID(clazz, "xtraDownloadRequest", "()V");

0 commit comments

Comments
 (0)