diff options
author | Michael Meeks <michael.meeks@suse.com> | 2013-02-18 09:24:23 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2013-02-19 09:12:00 +0000 |
commit | fe72f19a9b80d9cfa2de9a10fa2e0aa0c9a7b4ae (patch) | |
tree | cfb7bf844fee1feacb99def99d6c1820ba95f71a /sd/source/ui/remotecontrol | |
parent | 3708fe8434ad6f64d527215f4619556b0a5701ff (diff) |
improve bluetooth discoverability toggling API.
Change-Id: I289d43fcb173b64b01183a41f780bc74d2ba0abe
Diffstat (limited to 'sd/source/ui/remotecontrol')
-rw-r--r-- | sd/source/ui/remotecontrol/BluetoothServer.cxx | 36 | ||||
-rw-r--r-- | sd/source/ui/remotecontrol/BluetoothServer.hxx | 13 | ||||
-rw-r--r-- | sd/source/ui/remotecontrol/Server.cxx | 14 |
3 files changed, 45 insertions, 18 deletions
diff --git a/sd/source/ui/remotecontrol/BluetoothServer.cxx b/sd/source/ui/remotecontrol/BluetoothServer.cxx index ad6dadf14a61..249178581015 100644 --- a/sd/source/ui/remotecontrol/BluetoothServer.cxx +++ b/sd/source/ui/remotecontrol/BluetoothServer.cxx @@ -260,7 +260,8 @@ void incomingCallback( void *userRefCon, BluetoothServer::BluetoothServer( std::vector<Communicator*>* pCommunicators ) - : mpCommunicators( pCommunicators ) + : meWasDiscoverable( UNKNOWN ), + mpCommunicators( pCommunicators ) { } @@ -268,6 +269,27 @@ BluetoothServer::~BluetoothServer() { } + +void BluetoothServer::ensureDiscoverable() +{ + if( !spServer || spServer->meWasDiscoverable != UNKNOWN ) + return; + + bool bDiscoverable = spServer->isDiscoverable(); + spServer->meWasDiscoverable = bDiscoverable ? DISCOVERABLE : NOT_DISCOVERABLE; + spServer->setDiscoverable( true ); +} + +void BluetoothServer::restoreDiscoverable() +{ + if(!spServer) + return; + + if ( spServer->meWasDiscoverable == NOT_DISCOVERABLE ) + spServer->setDiscoverable( false ); + spServer->meWasDiscoverable = UNKNOWN; +} + bool BluetoothServer::isDiscoverable() { #if (defined(LINUX) && !defined(__FreeBSD_kernel__)) && defined(ENABLE_DBUS) @@ -321,7 +343,7 @@ bool BluetoothServer::isDiscoverable() #endif } -void BluetoothServer::setDiscoverable( bool aDiscoverable ) +void BluetoothServer::setDiscoverable( bool bDiscoverable ) { #if (defined(LINUX) && !defined(__FreeBSD_kernel__)) && defined(ENABLE_DBUS) SAL_INFO( "sdremote.bluetooth", "BluetoothServer::setDiscoverable called" ); @@ -391,12 +413,12 @@ void BluetoothServer::setDiscoverable( bool aDiscoverable ) return; } - GValue aDiscoverableGValue = G_VALUE_INIT; - g_value_init( &aDiscoverableGValue, G_TYPE_BOOLEAN ); - g_value_set_boolean( &aDiscoverableGValue, aDiscoverable ); + GValue bDiscoverableGValue = G_VALUE_INIT; + g_value_init( &bDiscoverableGValue, G_TYPE_BOOLEAN ); + g_value_set_boolean( &bDiscoverableGValue, bDiscoverable ); aResult = dbus_g_proxy_call( aAdapter, "SetProperty", &aError, G_TYPE_STRING, "Discoverable", - G_TYPE_VALUE, &aDiscoverableGValue, G_TYPE_INVALID, G_TYPE_INVALID); + G_TYPE_VALUE, &bDiscoverableGValue, G_TYPE_INVALID, G_TYPE_INVALID); if ( !aResult || aError ) { SAL_WARN( "sdremote.bluetooth", "SetProperty(Discoverable) failed" ); @@ -411,7 +433,7 @@ void BluetoothServer::setDiscoverable( bool aDiscoverable ) g_object_unref( G_OBJECT( aAdapter )); dbus_g_connection_unref( aConnection ); #else // defined(LINUX) && defined(ENABLE_DBUS) - (void) aDiscoverable; // avoid warnings + (void) bDiscoverable; // avoid warnings #endif } diff --git a/sd/source/ui/remotecontrol/BluetoothServer.hxx b/sd/source/ui/remotecontrol/BluetoothServer.hxx index d8c9879ab59b..5b986fae210c 100644 --- a/sd/source/ui/remotecontrol/BluetoothServer.hxx +++ b/sd/source/ui/remotecontrol/BluetoothServer.hxx @@ -22,18 +22,25 @@ namespace sd public: static void setup( std::vector<Communicator*>* pCommunicators ); - static bool isDiscoverable(); - static void setDiscoverable( bool aDiscoverable ); + /// ensure that Bluetooth discoverability is on + static void ensureDiscoverable(); + /// restore the state of discoverability from before ensureDiscoverable + static void restoreDiscoverable(); + void addCommunicator( Communicator* pCommunicator ); private: BluetoothServer( std::vector<Communicator*>* pCommunicators ); ~BluetoothServer(); + + bool isDiscoverable(); + void setDiscoverable( bool bDiscoverable ); + + enum { UNKNOWN, DISCOVERABLE, NOT_DISCOVERABLE } meWasDiscoverable; static BluetoothServer *spServer; virtual void SAL_CALL run(); std::vector<Communicator*>* mpCommunicators; - }; } diff --git a/sd/source/ui/remotecontrol/Server.cxx b/sd/source/ui/remotecontrol/Server.cxx index 9989ed05bb57..561dac149cb6 100644 --- a/sd/source/ui/remotecontrol/Server.cxx +++ b/sd/source/ui/remotecontrol/Server.cxx @@ -318,21 +318,19 @@ void SdDLL::RegisterRemotes() sd::DiscoveryService::setup(); } -bool RemoteServer::isBluetoothDiscoverable() +void RemoteServer::ensureDiscoverable() { + // FIXME: we could also enable listening on our WiFi + // socket here to significantly reduce the attack surface. #ifdef ENABLE_SDREMOTE_BLUETOOTH - return BluetoothServer::isDiscoverable(); -#else - return false; + BluetoothServer::ensureDiscoverable(); #endif } -void RemoteServer::setBluetoothDiscoverable( bool aDiscoverable ) +void RemoteServer::restoreDiscoverable() { #ifdef ENABLE_SDREMOTE_BLUETOOTH - BluetoothServer::setDiscoverable( aDiscoverable ); -#else - (void) aDiscoverable; + BluetoothServer::restoreDiscoverable(); #endif } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |