diff options
author | Mike Lockwood <lockwood@android.com> | 2010-02-02 09:15:37 -0500 |
---|---|---|
committer | Mike Lockwood <lockwood@android.com> | 2010-02-02 09:15:37 -0500 |
commit | 5310b36a3710f0e298b944a74759ae8ce3af755c (patch) | |
tree | 38dfbf076ed941cf43fd55dc81d93af2e54dad99 /location/java | |
parent | 5e7bb0a9cafc5e90bf451faa5722bb80fb4294e9 (diff) | |
parent | 21875ab33291d4c25bd9701e7ac51c589e665177 (diff) | |
download | frameworks_base-5310b36a3710f0e298b944a74759ae8ce3af755c.zip frameworks_base-5310b36a3710f0e298b944a74759ae8ce3af755c.tar.gz frameworks_base-5310b36a3710f0e298b944a74759ae8ce3af755c.tar.bz2 |
resolved conflicts for merge of 21875ab3 to master
Change-Id: I447e813b3ec460bbc9050de6b95bd663bb33c86f
Diffstat (limited to 'location/java')
-rwxr-xr-x | location/java/com/android/internal/location/GpsLocationProvider.java | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/location/java/com/android/internal/location/GpsLocationProvider.java b/location/java/com/android/internal/location/GpsLocationProvider.java index c8809a2..2b4dab9 100755 --- a/location/java/com/android/internal/location/GpsLocationProvider.java +++ b/location/java/com/android/internal/location/GpsLocationProvider.java @@ -56,6 +56,7 @@ import java.io.StringBufferInputStream; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; +import java.util.Date; import java.util.Properties; import java.util.Map.Entry; @@ -239,10 +240,14 @@ public class GpsLocationProvider extends ILocationProvider.Stub { // how often to request NTP time, in milliseconds // current setting 4 hours - private static final long NTP_INTERVAL = 4*60*60*1000; + private static final long NTP_INTERVAL = 4*60*60*1000; // how long to wait if we have a network error in NTP or XTRA downloading // current setting - 5 minutes - private static final long RETRY_INTERVAL = 5*60*1000; + private static final long RETRY_INTERVAL = 5*60*1000; + + // to avoid injecting bad NTP time, we reject any time fixes that differ from system time + // by more than 5 minutes. + private static final long MAX_NTP_SYSTEM_TIME_OFFSET = 5*60*1000; private final IGpsStatusProvider mGpsStatusProvider = new IGpsStatusProvider.Stub() { public void addGpsStatusListener(IGpsStatusListener listener) throws RemoteException { @@ -1246,13 +1251,26 @@ public class GpsLocationProvider extends ILocationProvider.Stub { long time = client.getNtpTime(); long timeReference = client.getNtpTimeReference(); int certainty = (int)(client.getRoundTripTime()/2); + long now = System.currentTimeMillis(); + long systemTimeOffset = time - now; - if (DEBUG) Log.d(TAG, "calling native_inject_time: " + - time + " reference: " + timeReference - + " certainty: " + certainty); - - native_inject_time(time, timeReference, certainty); - mNextNtpTime = System.currentTimeMillis() + NTP_INTERVAL; + Log.d(TAG, "NTP server returned: " + + time + " (" + new Date(time) + + ") reference: " + timeReference + + " certainty: " + certainty + + " system time offset: " + systemTimeOffset); + + // sanity check NTP time and do not use if it is too far from system time + if (systemTimeOffset < 0) { + systemTimeOffset = -systemTimeOffset; + } + if (systemTimeOffset < MAX_NTP_SYSTEM_TIME_OFFSET) { + native_inject_time(time, timeReference, certainty); + } else { + Log.e(TAG, "NTP time differs from system time by " + systemTimeOffset + + "ms. Ignoring."); + } + mNextNtpTime = now + NTP_INTERVAL; } else { if (DEBUG) Log.d(TAG, "requestTime failed"); mNextNtpTime = System.currentTimeMillis() + RETRY_INTERVAL; |