Committing Haralds stuff together with some of my backlog for connection.
[platform/upstream/dbus.git] / qt / connection.cpp
index 54c4689..de5c627 100644 (file)
@@ -29,30 +29,60 @@ using Internal::Integrator;
 
 struct Connection::Private
 {
+  Private( Connection *qq );
+  void setConnection( DBusConnection *c );
   DBusConnection *connection;
   int connectionSlot;
   DBusError error;
   Integrator *integrator;
   int timeout;
+  Connection *q;
 };
 
+Connection::Private::Private( Connection *qq )
+  : connection( 0 ), connectionSlot( 0 ), integrator( 0 ),
+    timeout( -1 ), q( qq )
+{
+  dbus_error_init( &error );
+}
+
+void Connection::Private::setConnection( DBusConnection *c )
+{
+  if (!c) {
+    qDebug( "error: %s, %s", error.name, error.message );
+    dbus_error_free( &error );
+    return;
+  }
+  connection = c;
+  integrator = new Integrator( c, q );
+  connect( integrator, SIGNAL(readReady()), q, SLOT(dispatchRead()) );
+}
+
+Connection::Connection( QObject *parent )
+  : QObject( parent )
+{
+  d = new Private( this );
+}
+
 Connection::Connection( const QString& host, QObject *parent )
   : QObject( parent )
 {
-  d = new Private;
+  d = new Private( this );
 
   if ( !host.isEmpty() )
     init( host );
 }
 
+Connection::Connection(DBusBusType type, QObject* parent)
+  : QObject( parent )
+{
+  d = new Private(this);
+  d->setConnection( dbus_bus_get(type, &d->error) );
+}
+
 void Connection::init( const QString& host )
 {
-  dbus_error_init( &d->error );
-  d->timeout = -1;
-  d->connection = dbus_connection_open( host.ascii(), &d->error );
-  d->integrator = new Integrator( d->connection, this );
-  connect( d->integrator, SIGNAL(readReady()),
-           SLOT(dispatchRead()) );
+  d->setConnection( dbus_connection_open( host.ascii(), &d->error) );
   //dbus_connection_allocate_data_slot( &d->connectionSlot );
   //dbus_connection_set_data( d->connection, d->connectionSlot, 0, 0 );
 }
@@ -96,17 +126,13 @@ DBusConnection* Connection::connection() const
 Connection::Connection( DBusConnection *connection, QObject *parent  )
   : QObject( parent )
 {
-  d = new Private;
-  dbus_error_init( &d->error );
-  d->timeout = -1;
-  d->connection = connection;
-  d->integrator = new Integrator( d->connection, this );
-  connect( d->integrator, SIGNAL(readReady()),
-           SLOT(dispatchRead()) );
+  d = new Private(this);
+  d->setConnection(connection);
 }
 
-void Connection::send( const Message& )
+void Connection::send( const Message &m )
 {
+    dbus_connection_send(d->connection, m.message(), 0);
 }
 
 void Connection::sendWithReply( const Message& )
@@ -117,6 +143,10 @@ Message Connection::sendWithReplyAndBlock( const Message &m )
 {
   DBusMessage *reply;
   reply = dbus_connection_send_with_reply_and_block( d->connection, m.message(), d->timeout, &d->error );
+  if (dbus_error_is_set(&d->error)) {
+      qDebug("error: %s, %s", d->error.name, d->error.message);
+      dbus_error_free(&d->error);
+  }
   return Message( reply );
 }