From 8f44c903a6cb4ec4832bc5543717755c76265628 Mon Sep 17 00:00:00 2001 From: Eric Chou Date: Wed, 12 Sep 2012 15:44:05 +0800 Subject: [PATCH] Bug 790136 - Registered/Unregistered HFP_AG & HSP_AG services, r=qdot --- dom/bluetooth/linux/BluetoothDBusService.cpp | 31 +++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/dom/bluetooth/linux/BluetoothDBusService.cpp b/dom/bluetooth/linux/BluetoothDBusService.cpp index 275f0a9edde0..a4112b27e1f1 100644 --- a/dom/bluetooth/linux/BluetoothDBusService.cpp +++ b/dom/bluetooth/linux/BluetoothDBusService.cpp @@ -18,6 +18,7 @@ #include "base/basictypes.h" #include "BluetoothDBusService.h" +#include "BluetoothServiceUuid.h" #include "BluetoothTypes.h" #include "BluetoothReplyRunnable.h" @@ -140,6 +141,8 @@ static const char* sBluetoothDBusSignals[] = static nsAutoPtr gThreadConnection; static nsDataHashtable sPairingReqTable; static nsDataHashtable sAuthorizeReqTable; +static nsString sDefaultAdapterPath; +static nsTArray sServiceHandles; typedef void (*UnpackFunc)(DBusMessage*, DBusError*, BluetoothValue&, nsAString&); @@ -554,6 +557,28 @@ RegisterAgent(const nsAString& aAdapterPath) return true; } + + +static void +AddReservedServices(const nsAString& aAdapterPath) +{ + MOZ_ASSERT(!NS_IsMainThread()); + + nsTArray uuids; + + uuids.AppendElement((uint32_t)(BluetoothServiceUuid::HandsfreeAG >> 32)); + uuids.AppendElement((uint32_t)(BluetoothServiceUuid::HeadsetAG >> 32)); + + BluetoothService* bs = BluetoothService::Get(); + if (!bs) { + NS_WARNING("BluetoothService not available!"); + return ; + } + + sServiceHandles.Clear(); + bs->AddReservedServicesInternal(aAdapterPath, uuids, sServiceHandles); +} + void RunDBusCallback(DBusMessage* aMsg, void* aBluetoothReplyRunnable, UnpackFunc aFunc) @@ -942,7 +967,8 @@ EventFilter(DBusConnection* aConn, DBusMessage* aMsg, void* aData) LOG_AND_FREE_DBUS_ERROR_WITH_MSG(&err, aMsg); errorStr.AssignLiteral("Cannot parse manager path!"); } else { - v = NS_ConvertUTF8toUTF16(str); + sDefaultAdapterPath = NS_ConvertUTF8toUTF16(str); + v = sDefaultAdapterPath; } } else if (dbus_message_is_signal(aMsg, DBUS_MANAGER_IFACE, "PropertyChanged")) { ParsePropertyChange(aMsg, @@ -1052,6 +1078,8 @@ BluetoothDBusService::StopInternal() return NS_OK; } + RemoveReservedServicesInternal(sDefaultAdapterPath, sServiceHandles); + DBusError err; dbus_error_init(&err); for (uint32_t i = 0; i < ArrayLength(sBluetoothDBusSignals); ++i) { @@ -1148,6 +1176,7 @@ public: path)); RegisterAgent(path); + AddReservedServices(path); DispatchBluetoothReply(mRunnable, v, replyError);