Commit e8a46365 authored by Zack Rusin's avatar Zack Rusin

Committing Haralds stuff together with some of my backlog for connection.

parent 4e243ba4
......@@ -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 );
}
......
......@@ -39,8 +39,10 @@ namespace DBusQt {
{
Q_OBJECT
public:
Connection( const QString& host = QString::null,
QObject* parent = 0);
Connection( QObject *parent =0 );
Connection( const QString& host,
QObject *parent = 0 );
Connection( DBusBusType type, QObject* parent = 0 );
bool isConnected() const;
bool isAuthenticated() const;
......@@ -62,11 +64,13 @@ namespace DBusQt {
protected:
void init( const QString& host );
virtual void* virtual_hook( int id, void* data );
virtual void *virtual_hook( int id, void *data );
private:
friend class Internal::Integrator;
DBusConnection* connection() const;
DBusConnection *connection() const;
Connection( DBusConnection *connection, QObject *parent );
private:
struct Private;
Private *d;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment