Landroid/net/SntpClient;->getNtpTime()J
Landroid/net/SntpClient;->getNtpTimeReference()J
Landroid/net/SntpClient;->getRoundTripTime()J
-Landroid/net/SntpClient;->requestTime(Ljava/lang/String;I)Z
Landroid/net/StaticIpConfiguration;->dnsServers:Ljava/util/ArrayList;
Landroid/net/StaticIpConfiguration;->domains:Ljava/lang/String;
Landroid/net/StaticIpConfiguration;->gateway:Ljava/net/InetAddress;
*
* @param host host name of the server.
* @param timeout network timeout in milliseconds.
+ * @param network network over which to send the request.
* @return true if the transaction was successful.
*/
- public boolean requestTime(String host, int timeout) {
+ public boolean requestTime(String host, int timeout, Network network) {
InetAddress address = null;
try {
- address = InetAddress.getByName(host);
+ address = network.getByName(host);
} catch (Exception e) {
EventLogTags.writeNtpFailure(host, e.toString());
if (DBG) Log.d(TAG, "request time failed: " + e);
return false;
}
- return requestTime(address, NTP_PORT, timeout);
+ return requestTime(address, NTP_PORT, timeout, network);
}
- public boolean requestTime(InetAddress address, int port, int timeout) {
+ public boolean requestTime(InetAddress address, int port, int timeout, Network network) {
DatagramSocket socket = null;
final int oldTag = TrafficStats.getAndSetThreadStatsTag(TrafficStats.TAG_SYSTEM_NTP);
try {
socket = new DatagramSocket();
+ network.bindSocket(socket);
socket.setSoTimeout(timeout);
byte[] buffer = new byte[NTP_PACKET_SIZE];
DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, port);
return true;
}
+ @Deprecated
+ public boolean requestTime(String host, int timeout) {
+ Log.w(TAG, "Shame on you for calling the hidden API requestTime()!");
+ return false;
+ }
+
/**
* Returns the time computed from the NTP transaction.
*
import android.content.Context;
import android.content.res.Resources;
import android.net.ConnectivityManager;
+import android.net.Network;
import android.net.NetworkInfo;
import android.net.SntpClient;
import android.os.SystemClock;
@Override
public boolean forceRefresh() {
+ // We can't do this at initialization time: ConnectivityService might not be running yet.
+ synchronized (this) {
+ if (mCM == null) {
+ mCM = sContext.getSystemService(ConnectivityManager.class);
+ }
+ }
+
+ final Network network = mCM == null ? null : mCM.getActiveNetwork();
+ return forceRefresh(network);
+ }
+
+ public boolean forceRefresh(Network network) {
if (TextUtils.isEmpty(mServer)) {
// missing server, so no trusted time available
return false;
// We can't do this at initialization time: ConnectivityService might not be running yet.
synchronized (this) {
if (mCM == null) {
- mCM = (ConnectivityManager) sContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+ mCM = sContext.getSystemService(ConnectivityManager.class);
}
}
- final NetworkInfo ni = mCM == null ? null : mCM.getActiveNetworkInfo();
+ final NetworkInfo ni = mCM == null ? null : mCM.getNetworkInfo(network);
if (ni == null || !ni.isConnected()) {
if (LOGD) Log.d(TAG, "forceRefresh: no connectivity");
return false;
if (LOGD) Log.d(TAG, "forceRefresh() from cache miss");
final SntpClient client = new SntpClient();
- if (client.requestTime(mServer, (int) mTimeout)) {
+ if (client.requestTime(mServer, (int) mTimeout, network)) {
mHasCache = true;
mCachedNtpTime = client.getNtpTime();
mCachedNtpElapsedRealtime = client.getNtpTimeReference();
package android.net;
-import android.net.SntpClient;
+import android.content.Context;
+import android.test.AndroidTestCase;
import android.util.Log;
import libcore.util.HexEncoding;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Arrays;
-import junit.framework.TestCase;
-public class SntpClientTest extends TestCase {
+public class SntpClientTest extends AndroidTestCase {
private static final String TAG = "SntpClientTest";
private static final int ORIGINATE_TIME_OFFSET = 24;
private final SntpTestServer mServer = new SntpTestServer();
private final SntpClient mClient = new SntpClient();
+ private Network mNetwork;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ ConnectivityManager mCM = getContext().getSystemService(ConnectivityManager.class);
+ mNetwork = mCM.getActiveNetwork();
+ }
+
public void testBasicWorkingSntpClientQuery() throws Exception {
mServer.setServerReply(HexEncoding.decode(WORKING_VERSION4.toCharArray(), false));
- assertTrue(mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500));
+ assertTrue(mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500, mNetwork));
assertEquals(1, mServer.numRequestsReceived());
assertEquals(1, mServer.numRepliesSent());
}
public void testDnsResolutionFailure() throws Exception {
- assertFalse(mClient.requestTime("ntp.server.doesnotexist.example", 5000));
+ assertFalse(mClient.requestTime("ntp.server.doesnotexist.example", 5000, mNetwork));
}
public void testTimeoutFailure() throws Exception {
mServer.clearServerReply();
- assertFalse(mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500));
+ assertFalse(mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500, mNetwork));
assertEquals(1, mServer.numRequestsReceived());
assertEquals(0, mServer.numRepliesSent());
}
final byte[] reply = HexEncoding.decode(WORKING_VERSION4.toCharArray(), false);
reply[0] |= (byte) 0xc0;
mServer.setServerReply(reply);
- assertFalse(mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500));
+ assertFalse(mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500, mNetwork));
assertEquals(1, mServer.numRequestsReceived());
assertEquals(1, mServer.numRepliesSent());
}
reply[0] &= (byte) 0xf8;
reply[0] |= (byte) i;
mServer.setServerReply(reply);
- final boolean rval = mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500);
+ final boolean rval = mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500,
+ mNetwork);
switch (i) {
case NTP_MODE_SERVER:
case NTP_MODE_BROADCAST:
final String logMsg = "stratum: " + i;
reply[1] = (byte) i;
mServer.setServerReply(reply);
- final boolean rval = mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500);
+ final boolean rval = mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500,
+ mNetwork);
if (STRATUM_MIN <= i && i <= STRATUM_MAX) {
assertTrue(logMsg, rval);
} else {
final byte[] reply = HexEncoding.decode(WORKING_VERSION4.toCharArray(), false);
Arrays.fill(reply, TRANSMIT_TIME_OFFSET, TRANSMIT_TIME_OFFSET + 8, (byte) 0x00);
mServer.setServerReply(reply);
- assertFalse(mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500));
+ assertFalse(mClient.requestTime(mServer.getAddress(), mServer.getPort(), 500, mNetwork));
assertEquals(1, mServer.numRequestsReceived());
assertEquals(1, mServer.numRepliesSent());
}
package com.android.tests.bandwidthenforcement;
import android.app.IntentService;
+import android.content.Context;
import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.Network;
import android.net.SntpClient;
import android.os.Environment;
import android.util.Log;
String outputFile = intent.getStringExtra(OUTPUT_FILE);
dumpResult("testUrlConnection", testUrlConnection(), outputFile);
dumpResult("testUrlConnectionv6", testUrlConnectionv6(), outputFile);
- dumpResult("testSntp", testSntp(), outputFile);
+ dumpResult("testSntp", testSntp(getApplicationContext()), outputFile);
dumpResult("testDns", testDns(), outputFile);
}
* Tests to connect via sntp.
* @return true if it was able to connect, false otherwise.
*/
- public static boolean testSntp() {
+ public static boolean testSntp(Context context) {
final SntpClient client = new SntpClient();
- if (client.requestTime("0.pool.ntp.org", 10000)) {
+ final ConnectivityManager mCM = context.getSystemService(ConnectivityManager.class);
+ final Network network = mCM.getActiveNetwork();
+
+ if (client.requestTime("0.pool.ntp.org", 10000, network)) {
return true;
}
return false;