[Libreoffice-commits] core.git: Branch 'feature/sdr-dbus' - sd/source
Michael Meeks
michael.meeks at suse.com
Mon Feb 18 06:41:09 PST 2013
sd/source/ui/remotecontrol/BluetoothServer.cxx | 39 ++++++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
New commits:
commit 4cd53be1fc6dd9dd5a981aff5098a96b9f545f35
Author: Michael Meeks <michael.meeks at suse.com>
Date: Mon Feb 18 14:40:24 2013 +0000
sdremote: start of listening for dynamic changes to adapters.
Change-Id: Ifa04c8cc1859c98adca94ac0e57c7ebd85f2f31f
diff --git a/sd/source/ui/remotecontrol/BluetoothServer.cxx b/sd/source/ui/remotecontrol/BluetoothServer.cxx
index 32a15a4..4e2a6a1 100644
--- a/sd/source/ui/remotecontrol/BluetoothServer.cxx
+++ b/sd/source/ui/remotecontrol/BluetoothServer.cxx
@@ -491,13 +491,25 @@ void SAL_CALL BluetoothServer::run()
return;
}
+ // listen for connection state and power changes - we need to close
+ // and re-create our socket code on suspend / resume, enable/disable
+ DBusError aError;
+ dbus_error_init( &aError );
+ dbus_bus_add_match( pConnection, "type='signal',interface='org.bluez.Manager'", &aError );
+
if( !bluezRegisterServiceRecord( pConnection, mpImpl->mpService,
bluetooth_service_record ) )
+ {
+ dbus_connection_unref( pConnection );
return;
+ }
int nSocket = bluezCreateListeningSocket();
if( nSocket < 0 )
+ {
+ dbus_connection_unref( pConnection );
return;
+ }
// ---------------- Socket code ----------------
@@ -535,7 +547,32 @@ void SAL_CALL BluetoothServer::run()
SAL_INFO( "sdremote.bluetooth", "main-loop spin "
<< aDBusFD.revents << " " << aSocketFD.revents );
if( aDBusFD.revents )
- dbus_connection_read_write_dispatch( pConnection, 0 );
+ {
+ dbus_connection_read_write( pConnection, 0 );
+ DBusMessage *pMsg = dbus_connection_pop_message( pConnection );
+ if( pMsg )
+ {
+ if( dbus_message_is_signal( pMsg, "org.bluez.Manager", "AdapterRemoved" ) )
+ {
+ SAL_WARN( "sdremote.bluetooth", "lost adapter - cleaning up sockets" );
+ g_main_context_remove_poll( mpImpl->mpContext, &aSocketFD );
+ close( nSocket );
+ }
+ else if( dbus_message_is_signal( pMsg, "org.bluez.Manager", "AdapterAdded" ) )
+ {
+ SAL_WARN( "sdremote.bluetooth", "gained adapter - re-generating sockets" );
+ aSocketFD.fd = nSocket = bluezCreateListeningSocket();
+ g_main_context_add_poll( mpImpl->mpContext, &aSocketFD, G_PRIORITY_DEFAULT );
+ }
+ else
+ SAL_INFO( "sdremote.bluetooth", "unknown incoming dbus message, "
+ << " type: " << dbus_message_get_type( pMsg )
+ << " path: '" << dbus_message_get_path( pMsg )
+ << "' interface: '" << dbus_message_get_interface( pMsg )
+ << "' member: '" << dbus_message_get_member( pMsg ) );
+ }
+ dbus_message_unref( pMsg );
+ }
if( aSocketFD.revents )
{
More information about the Libreoffice-commits
mailing list