[WoBluez] Stopping weave advertisement when BluezIOThread is stopped
Unregistering weave advertisement during BluezIOThread closure to stop weave advertisement when WoBluez IO thread is no longer running
Change-Id: Ic0e637f860bbb0247bf46a2002c485ce46889726
diff --git a/src/platform/ble/bluez/BluezHelperCode.cpp b/src/platform/ble/bluez/BluezHelperCode.cpp
index 86d2c16..8a40bd5 100644
--- a/src/platform/ble/bluez/BluezHelperCode.cpp
+++ b/src/platform/ble/bluez/BluezHelperCode.cpp
@@ -33,6 +33,8 @@
static void WeaveRegisterSetup(DBusMessageIter * iter, void * bluezData);
static void WeaveRegisterReply(DBusMessage * message, void * bluezData);
+static void WeaveUnregisterSetup(DBusMessageIter *iter, void *bluezData);
+static void WeaveUnregisterReply(DBusMessage *message, void *bluezData);
static gboolean WeaveAdvertisingGetType(const GDBusPropertyTable * property, DBusMessageIter * iter, void * bluezData);
static gboolean GetWeaveUUIDs(const GDBusPropertyTable * property, DBusMessageIter * iter, void * bluezData);
static gboolean WeaveServiceDataCheck(const GDBusPropertyTable * property, void * bluezData);
@@ -186,6 +188,47 @@
}
}
+static void WeaveUnregisterSetup(DBusMessageIter *iter, void *bluezData)
+{
+ const char *path = ADVERTISING_PATH;
+ gboolean success = FALSE;
+ const char *msg = NULL;
+
+ success = dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &path);
+ VerifyOrExit(success == TRUE, msg = "Fail to append basic in WeaveUnregisterSetup");
+
+exit:
+
+ if ((success != TRUE) && (msg != NULL))
+ {
+ WeaveLogError(Ble, msg);
+ }
+}
+
+static void WeaveUnregisterReply(DBusMessage *message, void *bluezData)
+{
+ DBusError error;
+
+ dbus_error_init(&error);
+
+ if (FALSE == dbus_set_error_from_message(&error, message))
+ {
+ WeaveLogProgress(Ble, "Weave advertisement unregistered");
+ if (gBluezDbusConn)
+ {
+ if (FALSE == g_dbus_unregister_interface(gBluezDbusConn, ADVERTISING_PATH, ADVERTISING_INTERFACE))
+ {
+ WeaveLogError(Ble, "Fail to unregister weave advertisement object in WeaveUnregisterReply");
+ }
+ }
+ }
+ else
+ {
+ WeaveLogError(Ble, "Fail to unregister weave advertisement in WeaveUnregisterReply: %s", error.name);
+ dbus_error_free(&error);
+ }
+}
+
static gboolean WeaveAdvertisingGetType(const GDBusPropertyTable * property, DBusMessageIter * iter, void * bluezData)
{
gboolean success = dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &(gBluezServerEndpoint->advertisingType));
@@ -1665,6 +1708,26 @@
WeaveLogError(Ble, msg);
}
+ if (gDefaultAdapter && gDefaultAdapter->advertisingProxy)
+ {
+ WeaveLogProgress(Ble, "Unregistering weave advertisement");
+
+ if (FALSE == g_dbus_proxy_method_call(gDefaultAdapter->advertisingProxy,
+ "UnregisterAdvertisement",
+ WeaveUnregisterSetup, WeaveUnregisterReply,
+ gBluezDbusConn, NULL))
+ {
+ WeaveLogError(Ble, "Fail to call UnregisterAdvertisement method");
+ }
+
+ if (FALSE == g_dbus_unregister_interface(gBluezDbusConn, ADVERTISING_PATH,
+ ADVERTISING_INTERFACE))
+ {
+ WeaveLogError(Ble, "Fail to unregister weave advertisement object");
+ }
+ }
+
+
if (NULL != gBluezServerEndpoint)
{
if (NULL != gBluezServerEndpoint->weaveService)