aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/android/aidl/com/android/server/thread/openthread/IOtDaemon.aidl6
-rw-r--r--src/android/java/com/android/server/thread/openthread/testing/FakeOtDaemon.java14
-rw-r--r--src/android/otdaemon_server.cpp11
-rw-r--r--src/android/otdaemon_server.hpp8
-rw-r--r--src/border_agent/border_agent.cpp3
-rw-r--r--tests/android/java/com/android/server/thread/openthread/testing/FakeOtDaemonTest.java23
6 files changed, 50 insertions, 15 deletions
diff --git a/src/android/aidl/com/android/server/thread/openthread/IOtDaemon.aidl b/src/android/aidl/com/android/server/thread/openthread/IOtDaemon.aidl
index 7a4df4eb..d07f72a5 100644
--- a/src/android/aidl/com/android/server/thread/openthread/IOtDaemon.aidl
+++ b/src/android/aidl/com/android/server/thread/openthread/IOtDaemon.aidl
@@ -94,13 +94,15 @@ oneway interface IOtDaemon {
* @param meshcopTxts the MeshCoP TXT values set by the system_server to override the default
* ones
* @param callback the callback for receiving OtDaemonState changes
+ * @param countryCode 2 bytes country code (as defined in ISO 3166) to set
*/
void initialize(
in ParcelFileDescriptor tunFd,
in boolean enabled,
in INsdPublisher nsdPublisher,
in MeshcopTxtAttributes meshcopTxts,
- in IOtDaemonCallback callback);
+ in IOtDaemonCallback callback,
+ in String countryCode);
/** Terminates the ot-daemon process. */
void terminate();
@@ -158,7 +160,7 @@ oneway interface IOtDaemon {
/**
* Sets the country code.
*
- * @param countryCode 2 byte country code (as defined in ISO 3166) to set.
+ * @param countryCode 2 bytes country code (as defined in ISO 3166) to set.
* @param receiver the receiver to receive result of this operation
*/
oneway void setCountryCode(in String countryCode, in IOtStatusReceiver receiver);
diff --git a/src/android/java/com/android/server/thread/openthread/testing/FakeOtDaemon.java b/src/android/java/com/android/server/thread/openthread/testing/FakeOtDaemon.java
index be093fb3..ce50eba9 100644
--- a/src/android/java/com/android/server/thread/openthread/testing/FakeOtDaemon.java
+++ b/src/android/java/com/android/server/thread/openthread/testing/FakeOtDaemon.java
@@ -84,6 +84,7 @@ public final class FakeOtDaemon extends IOtDaemon.Stub {
@Nullable private IOtDaemonCallback mCallback;
@Nullable private Long mCallbackListenerId;
@Nullable private RemoteException mJoinException;
+ @Nullable private String mCountryCode;
public FakeOtDaemon(Handler handler) {
mHandler = handler;
@@ -145,12 +146,14 @@ public final class FakeOtDaemon extends IOtDaemon.Stub {
boolean enabled,
INsdPublisher nsdPublisher,
MeshcopTxtAttributes overriddenMeshcopTxts,
- IOtDaemonCallback callback)
+ IOtDaemonCallback callback,
+ String countryCode)
throws RemoteException {
mIsInitialized = true;
mTunFd = tunFd;
mThreadEnabled = enabled ? OT_STATE_ENABLED : OT_STATE_DISABLED;
mNsdPublisher = nsdPublisher;
+ mCountryCode = countryCode;
mOverriddenMeshcopTxts = new MeshcopTxtAttributes();
mOverriddenMeshcopTxts.vendorOui = overriddenMeshcopTxts.vendorOui.clone();
@@ -249,6 +252,15 @@ public final class FakeOtDaemon extends IOtDaemon.Stub {
return mCallback;
}
+ /**
+ * Returns the country code sent to OT daemon or {@code null} if {@link #initialize} is never
+ * called.
+ */
+ @Nullable
+ public String getCountryCode() {
+ return mCountryCode;
+ }
+
@Override
public void join(byte[] activeDataset, IOtStatusReceiver receiver) throws RemoteException {
if (mJoinException != null) {
diff --git a/src/android/otdaemon_server.cpp b/src/android/otdaemon_server.cpp
index ac64e21a..9ffeb7bf 100644
--- a/src/android/otdaemon_server.cpp
+++ b/src/android/otdaemon_server.cpp
@@ -384,7 +384,8 @@ Status OtDaemonServer::initialize(const ScopedFileDescriptor &aTun
const bool enabled,
const std::shared_ptr<INsdPublisher> &aINsdPublisher,
const MeshcopTxtAttributes &aMeshcopTxts,
- const std::shared_ptr<IOtDaemonCallback> &aCallback)
+ const std::shared_ptr<IOtDaemonCallback> &aCallback,
+ const std::string &aCountryCode)
{
otbrLogInfo("OT daemon is initialized by system server (tunFd=%d, enabled=%s)", aTunFd.get(),
enabled ? "true" : "false");
@@ -396,8 +397,8 @@ Status OtDaemonServer::initialize(const ScopedFileDescriptor &aTun
mINsdPublisher = aINsdPublisher;
mMeshcopTxts = aMeshcopTxts;
- mTaskRunner.Post([enabled, aINsdPublisher, aMeshcopTxts, aCallback, this]() {
- initializeInternal(enabled, mINsdPublisher, mMeshcopTxts, aCallback);
+ mTaskRunner.Post([enabled, aINsdPublisher, aMeshcopTxts, aCallback, aCountryCode, this]() {
+ initializeInternal(enabled, mINsdPublisher, mMeshcopTxts, aCallback, aCountryCode);
});
return Status::ok();
@@ -406,10 +407,12 @@ Status OtDaemonServer::initialize(const ScopedFileDescriptor &aTun
void OtDaemonServer::initializeInternal(const bool enabled,
const std::shared_ptr<INsdPublisher> &aINsdPublisher,
const MeshcopTxtAttributes &aMeshcopTxts,
- const std::shared_ptr<IOtDaemonCallback> &aCallback)
+ const std::shared_ptr<IOtDaemonCallback> &aCallback,
+ const std::string &aCountryCode)
{
std::string instanceName = aMeshcopTxts.vendorName + " " + aMeshcopTxts.modelName;
+ setCountryCodeInternal(aCountryCode, nullptr /* aReceiver */);
registerStateCallbackInternal(aCallback, -1 /* listenerId */);
mMdnsPublisher.SetINsdPublisher(aINsdPublisher);
diff --git a/src/android/otdaemon_server.hpp b/src/android/otdaemon_server.hpp
index b24129c1..81249523 100644
--- a/src/android/otdaemon_server.hpp
+++ b/src/android/otdaemon_server.hpp
@@ -97,11 +97,13 @@ private:
const bool enabled,
const std::shared_ptr<INsdPublisher> &aNsdPublisher,
const MeshcopTxtAttributes &aMeshcopTxts,
- const std::shared_ptr<IOtDaemonCallback> &aCallback) override;
+ const std::shared_ptr<IOtDaemonCallback> &aCallback,
+ const std::string &aCountryCode) override;
void initializeInternal(const bool enabled,
const std::shared_ptr<INsdPublisher> &aINsdPublisher,
const MeshcopTxtAttributes &aMeshcopTxts,
- const std::shared_ptr<IOtDaemonCallback> &aCallback);
+ const std::shared_ptr<IOtDaemonCallback> &aCallback,
+ const std::string &aCountryCode);
Status terminate(void) override;
Status setThreadEnabled(const bool enabled, const std::shared_ptr<IOtStatusReceiver> &aReceiver) override;
void setThreadEnabledInternal(const bool enabled, const std::shared_ptr<IOtStatusReceiver> &aReceiver);
@@ -171,7 +173,7 @@ private:
std::shared_ptr<IOtStatusReceiver> mMigrationReceiver;
std::vector<LeaveCallback> mLeaveCallbacks;
BorderRouterConfigurationParcel mBorderRouterConfiguration;
- static constexpr Seconds kTelemetryCheckInterval = Seconds(30); // 30 seconds
+ static constexpr Seconds kTelemetryCheckInterval = Seconds(600); // 600 seconds
static constexpr Seconds kTelemetryUploadIntervalThreshold = Seconds(60 * 60 * 12); // 12 hours
};
diff --git a/src/border_agent/border_agent.cpp b/src/border_agent/border_agent.cpp
index c2becdef..b6acf18c 100644
--- a/src/border_agent/border_agent.cpp
+++ b/src/border_agent/border_agent.cpp
@@ -143,6 +143,7 @@ BorderAgent::BorderAgent(otbr::Ncp::ControllerOpenThread &aNcp, Mdns::Publisher
, mProductName(OTBR_PRODUCT_NAME)
, mBaseServiceInstanceName(OTBR_MESHCOP_SERVICE_INSTANCE_NAME)
{
+ mNcp.AddThreadStateChangedCallback([this](otChangedFlags aFlags) { HandleThreadStateChanged(aFlags); });
}
otbrError BorderAgent::SetMeshCopServiceValues(const std::string &aServiceInstanceName,
@@ -186,8 +187,6 @@ void BorderAgent::Start(void)
{
otbrLogInfo("Start Thread Border Agent");
- mNcp.AddThreadStateChangedCallback([this](otChangedFlags aFlags) { HandleThreadStateChanged(aFlags); });
-
#if OTBR_ENABLE_DBUS_SERVER
mNcp.GetThreadHelper()->SetUpdateMeshCopTxtHandler([this](std::map<std::string, std::vector<uint8_t>> aUpdate) {
HandleUpdateVendorMeshCoPTxtEntries(std::move(aUpdate));
diff --git a/tests/android/java/com/android/server/thread/openthread/testing/FakeOtDaemonTest.java b/tests/android/java/com/android/server/thread/openthread/testing/FakeOtDaemonTest.java
index eaf02afb..b3758ac1 100644
--- a/tests/android/java/com/android/server/thread/openthread/testing/FakeOtDaemonTest.java
+++ b/tests/android/java/com/android/server/thread/openthread/testing/FakeOtDaemonTest.java
@@ -100,6 +100,7 @@ public final class FakeOtDaemonTest {
private static final byte[] TEST_VENDOR_OUI = new byte[] {(byte) 0xAC, (byte) 0xDE, 0x48};
private static final String TEST_VENDOR_NAME = "test vendor";
private static final String TEST_MODEL_NAME = "test model";
+ private static final String TEST_DEFAULT_COUNTRY_CODE = "WW";
private FakeOtDaemon mFakeOtDaemon;
private TestLooper mTestLooper;
@@ -127,7 +128,12 @@ public final class FakeOtDaemonTest {
mOverriddenMeshcopTxts.modelName = TEST_MODEL_NAME;
mFakeOtDaemon.initialize(
- mMockTunFd, true, mMockNsdPublisher, mOverriddenMeshcopTxts, mMockCallback);
+ mMockTunFd,
+ true,
+ mMockNsdPublisher,
+ mOverriddenMeshcopTxts,
+ mMockCallback,
+ TEST_DEFAULT_COUNTRY_CODE);
mTestLooper.dispatchAll();
MeshcopTxtAttributes meshcopTxts = mFakeOtDaemon.getOverriddenMeshcopTxtAttributes();
@@ -139,6 +145,7 @@ public final class FakeOtDaemonTest {
assertThat(mFakeOtDaemon.getEnabledState()).isEqualTo(OT_STATE_ENABLED);
assertThat(mFakeOtDaemon.getNsdPublisher()).isEqualTo(mMockNsdPublisher);
assertThat(mFakeOtDaemon.getStateCallback()).isEqualTo(mMockCallback);
+ assertThat(mFakeOtDaemon.getCountryCode()).isEqualTo(TEST_DEFAULT_COUNTRY_CODE);
assertThat(mFakeOtDaemon.isInitialized()).isTrue();
verify(mMockCallback, times(1)).onStateChanged(any(), anyLong());
verify(mMockCallback, times(1)).onBackboneRouterStateChanged(any());
@@ -147,7 +154,12 @@ public final class FakeOtDaemonTest {
@Test
public void registerStateCallback_noStateChange_callbackIsInvoked() throws Exception {
mFakeOtDaemon.initialize(
- mMockTunFd, true, mMockNsdPublisher, mOverriddenMeshcopTxts, mMockCallback);
+ mMockTunFd,
+ true,
+ mMockNsdPublisher,
+ mOverriddenMeshcopTxts,
+ mMockCallback,
+ TEST_DEFAULT_COUNTRY_CODE);
final AtomicReference<OtDaemonState> stateRef = new AtomicReference<>();
final AtomicLong listenerIdRef = new AtomicLong();
final AtomicReference<BackboneRouterState> bbrStateRef = new AtomicReference<>();
@@ -316,7 +328,12 @@ public final class FakeOtDaemonTest {
DeathRecipient mockDeathRecipient = mock(DeathRecipient.class);
mFakeOtDaemon.linkToDeath(mockDeathRecipient, 0);
mFakeOtDaemon.initialize(
- mMockTunFd, true, mMockNsdPublisher, mOverriddenMeshcopTxts, mMockCallback);
+ mMockTunFd,
+ true,
+ mMockNsdPublisher,
+ mOverriddenMeshcopTxts,
+ mMockCallback,
+ TEST_DEFAULT_COUNTRY_CODE);
mFakeOtDaemon.terminate();
mTestLooper.dispatchAll();