diff options
Diffstat (limited to 'qt')
-rw-r--r-- | qt/message.cpp | 158 | ||||
-rw-r--r-- | qt/message.h | 59 |
2 files changed, 139 insertions, 78 deletions
diff --git a/qt/message.cpp b/qt/message.cpp index 64628954..82f44323 100644 --- a/qt/message.cpp +++ b/qt/message.cpp @@ -22,7 +22,6 @@ */ #include "message.h" -#include <kdebug.h> namespace DBus { @@ -48,7 +47,7 @@ Message::iterator::iterator() Message::iterator::iterator( DBusMessage* msg) { d = new IteratorData; - d->iter = dbus_message_get_fields_iter( msg ); + dbus_message_iter_init( msg, d->iter ); d->end = false; } @@ -59,7 +58,6 @@ Message::iterator::iterator( DBusMessage* msg) Message::iterator::iterator( const iterator& itr ) { d = new IteratorData; - dbus_message_iter_ref( itr.d->iter ); d->iter = itr.d->iter; d->var = itr.d->var; d->end = itr.d->end; @@ -70,7 +68,6 @@ Message::iterator::iterator( const iterator& itr ) */ Message::iterator::~iterator() { - dbus_message_iter_unref( d->iter ); delete d; d=0; } @@ -82,13 +79,10 @@ Message::iterator::~iterator() Message::iterator& Message::iterator::operator=( const iterator& itr ) { - //in case we'll ever go fot exception safety - dbus_message_iter_ref( itr.d->iter ); IteratorData *tmp = new IteratorData; tmp->iter = itr.d->iter; tmp->var = itr.d->var; tmp->end = itr.d->end; - dbus_message_iter_unref( d->iter ); delete d; d=tmp; return *this; } @@ -181,7 +175,7 @@ Message::iterator::operator!=( const iterator& it ) void Message::iterator::fillVar() { - switch ( dbus_message_iter_get_field_type( d->iter ) ) { + switch ( dbus_message_iter_get_arg_type( d->iter ) ) { case DBUS_TYPE_INT32: d->var = QVariant( dbus_message_iter_get_int32( d->iter ) ); break; @@ -194,24 +188,8 @@ Message::iterator::fillVar() case DBUS_TYPE_STRING: d->var = QVariant( QString(dbus_message_iter_get_string( d->iter )) ); break; - case DBUS_TYPE_BYTE_ARRAY: - { - QByteArray a; - int len; - char *ar; - ar = reinterpret_cast<char*>( dbus_message_iter_get_byte_array( d->iter, &len ) ); - a.setRawData( ar, len ); - QDataStream stream( a, IO_ReadOnly ); - stream >> d->var; - a.resetRawData( ar, len ); - } - break; - case DBUS_TYPE_STRING_ARRAY: -#warning "String array not implemented" - //d->var = QVariant( dbus_message_iter_get_string_array ); - break; default: - kdWarning()<<k_funcinfo<<" Serious problem!! "<<endl; + qDebug( "not implemented" ); d->var = QVariant(); break; } @@ -232,14 +210,25 @@ struct Message::MessagePrivate { }; /** + * + */ +Message::Message( int messageType ) +{ + d = new MessagePrivate; + d->msg = dbus_message_new( messageType ); +} + +/** * Constructs a new Message with the given service and name. * @param service service service that the message should be sent to * @param name name of the message */ -Message::Message( const QString& service, const QString& name ) +Message::Message( const QString& service, const QString& path, + const QString& interface, const QString& method ) { d = new MessagePrivate; - d->msg = dbus_message_new( service.latin1(), name.latin1() ); + d->msg = dbus_message_new_method_call( service.latin1(), path.latin1(), + interface.latin1(), method.latin1() ); } /** @@ -249,22 +238,32 @@ Message::Message( const QString& service, const QString& name ) * @param replayingTo original_message the message which the created * message is a reply to. */ -Message::Message( const QString& name, const Message& replayingTo ) +Message::Message( const Message& replayingTo ) { d = new MessagePrivate; - d->msg = dbus_message_new_reply( name.latin1(), replayingTo ); + d->msg = dbus_message_new_method_return( replayingTo.d->msg ); } -/** - * Creates a message just like @p other - * @param other the copied message - */ -Message::Message( const Message& other ) +Message:: Message( const QString& path, const QString& interface, + const QString& name ) +{ + d = new MessagePrivate; + d->msg = dbus_message_new_signal( path.ascii(), interface.ascii(), + name.ascii() ); +} + +Message::Message( const Message& replayingTo, const QString& errorName, + const QString& errorMessage ) { d = new MessagePrivate; - d->msg = dbus_message_new_from_message( other ); + d->msg = dbus_message_new_error( replayingTo.d->msg, errorName.utf8(), + errorMessage.utf8() ); } +Message Message::operator=( const Message& other ) +{ + //FIXME: ref the other.d->msg instead of copying it? +} /** * Destructs message. */ @@ -274,46 +273,70 @@ Message::~Message() delete d; d=0; } -/** - * Sets the message sender. - * @param sender the sender - * @return false if unsuccessful - */ -bool -Message::setSender( const QString& sender ) +int Message::type() const { - return dbus_message_set_sender( d->msg, sender.latin1() ); + return dbus_message_get_type( d->msg ); } -/** - * Sets a flag indicating that the message is an error reply - * message, i.e. an "exception" rather than a normal response. - * @param error true if this is an error message. - */ -void -Message::setError( bool error ) +void Message::setPath( const QString& path ) { - return dbus_message_set_is_error( d->msg, error ); + dbus_message_set_path( d->msg, path.ascii() ); } -/** - * Returns name of this message. - * @return name - */ -QString -Message::name() const +QString Message::path() const +{ + return dbus_message_get_path( d->msg ); +} + +void Message::setInterface( const QString& iface ) +{ + dbus_message_set_interface( d->msg, iface.ascii() ); +} + +QString Message::interface() const +{ + return dbus_message_get_interface( d->msg ); +} + +void Message::setMember( const QString& member ) +{ + dbus_message_set_member( d->msg, member.ascii() ); +} + +QString Message::member() const +{ + return dbus_message_get_member( d->msg ); +} + +void Message::setErrorName( const QString& err ) +{ + dbus_message_set_error_name( d->msg, err ); +} + +QString Message::errorName() const { - return dbus_message_get_name( d->msg ); + return dbus_message_get_error_name( d->msg ); +} + +void Message::setDestination( const QString& dest ) +{ + dbus_message_set_destination( d->msg, dest ); +} + +QString Message::destination() const +{ + return dbus_message_get_destination( d->msg ); } /** - * Returns service associated with this message. - * @return service + * Sets the message sender. + * @param sender the sender + * @return false if unsuccessful */ -QString -Message::service() const +bool +Message::setSender( const QString& sender ) { - return dbus_message_get_service( d->msg ); + return dbus_message_set_sender( d->msg, sender.latin1() ); } /** @@ -326,14 +349,9 @@ Message::sender() const return dbus_message_get_sender( d->msg ); } -/** - * Checks whether this message is an error indicating message. - * @return true if this is an error message - */ -bool -Message::isError() const +QString Message::signature() const { - return dbus_message_get_is_error( d->msg ); + return dbus_message_get_signature( d->msg ); } /** diff --git a/qt/message.h b/qt/message.h index 98356a38..fc664dca 100644 --- a/qt/message.h +++ b/qt/message.h @@ -23,7 +23,8 @@ #include <qvariant.h> #include <qstring.h> -#include <dbus.h> + +#include "dbus/dbus.h" namespace DBus { @@ -52,20 +53,43 @@ namespace DBus { IteratorData *d; }; - Message( const QString& service, const QString& name ); - Message( const QString& name, - const Message& replayingTo ); - Message( const Message& other ); + Message( int messageType ); + Message( const QString& service, const QString& path, + const QString& interface, const QString& method ); + Message( const Message& replayingTo ); + Message( const QString& path, const QString& interface, + const QString& name ); + Message( const Message& replayingTo, const QString& errorName, + const QString& errorMessage ); + + Message operator=( const Message& other ); virtual ~Message(); + int type() const; + + void setPath( const QString& ); + QString path() const; + + void setInterface( const QString& ); + QString interface() const; + + void setMember( const QString& ); + QString member() const; + + void setErrorName( const QString& ); + QString errorName() const; + + void setDestination( const QString& ); + QString destination() const; + bool setSender( const QString& sender ); - void setError( bool error ); + QString sender() const; + + QString signature() const; QString name() const; QString service() const; - QString sender() const; - bool isError() const; virtual void append( const QVariant& var ); @@ -76,6 +100,25 @@ namespace DBus { QVariant at( int i ); + + public: + Message& operator<<( bool ); + Message& operator<<( Q_INT8 ); + Message& operator<<( Q_INT32 ); + Message& operator<<( Q_UINT32 ); + Message& operator<<( Q_INT64 ); + Message& operator<<( Q_UINT64 ); + Message& operator<<( double ); + Message& operator<<( const QString& ); + Message& operator<<( const QVariant& ); + //Message& operator<<(); + //Message& operator<<(); + //Message& operator<<(); + //Message& operator<<(); + //Message& operator<<(); + //Message& operator<<(); + //Message& operator<<(); + protected: DBusMessage* message() const; |