summaryrefslogtreecommitdiff
path: root/sd/source/ui/remotecontrol
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@suse.com>2013-02-18 09:24:23 +0000
committerThorsten Behrens <tbehrens@suse.com>2013-02-19 12:59:55 +0100
commit943fd58a4fce2a1009060f2f8907e806983721e7 (patch)
tree0bc3509e98e38c5540680494b42d0ace2cbaffe0 /sd/source/ui/remotecontrol
parent66e5365a626e99752110fb94b4e1469c0dff32bd (diff)
improve bluetooth discoverability toggling API.
Change-Id: I289d43fcb173b64b01183a41f780bc74d2ba0abe (cherry picked from commit 21979643e47e503a20113b1e8e98814717c71ac5) Signed-off-by: Thorsten Behrens <tbehrens@suse.com>
Diffstat (limited to 'sd/source/ui/remotecontrol')
-rw-r--r--sd/source/ui/remotecontrol/BluetoothServer.cxx36
-rw-r--r--sd/source/ui/remotecontrol/BluetoothServer.hxx13
-rw-r--r--sd/source/ui/remotecontrol/Server.cxx14
3 files changed, 45 insertions, 18 deletions
diff --git a/sd/source/ui/remotecontrol/BluetoothServer.cxx b/sd/source/ui/remotecontrol/BluetoothServer.cxx
index 4d948663b9bd..d140c1e523d1 100644
--- a/sd/source/ui/remotecontrol/BluetoothServer.cxx
+++ b/sd/source/ui/remotecontrol/BluetoothServer.cxx
@@ -267,7 +267,8 @@ void incomingCallback( void *userRefCon,
BluetoothServer::BluetoothServer( std::vector<Communicator*>* pCommunicators )
- : mpCommunicators( pCommunicators )
+ : meWasDiscoverable( UNKNOWN ),
+ mpCommunicators( pCommunicators )
{
}
@@ -275,6 +276,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)
@@ -328,7 +350,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::isDiscoverable called" );
@@ -398,12 +420,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" );
@@ -418,7 +440,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: */