diff options
Diffstat (limited to 'qt/message.cpp')
-rw-r--r-- | qt/message.cpp | 561 |
1 files changed, 0 insertions, 561 deletions
diff --git a/qt/message.cpp b/qt/message.cpp deleted file mode 100644 index 256c2b23..00000000 --- a/qt/message.cpp +++ /dev/null @@ -1,561 +0,0 @@ -/* -*- mode: C++; c-file-style: "gnu" -*- */ -/* message.cpp: Qt wrapper for DBusMessage - * - * Copyright (C) 2003 Zack Rusin <zack@kde.org> - * - * Licensed under the Academic Free License version 2.0 - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -#include "message.h" - -#include <qmap.h> - -#include <cstdlib> - -namespace DBusQt { - -struct Message::iterator::IteratorData { - DBusMessageIter *iter; - QVariant var; - bool end; - DBusMessage *mesg; -}; - -/** - * Iterator. - */ -Message::iterator::iterator() -{ - d = new IteratorData; - d->iter = 0; d->end = true; -} - -/** - * Constructs iterator for the message. - * @param msg message whose fields we want to iterate - */ -Message::iterator::iterator( DBusMessage* msg ) -{ - d = new IteratorData; - d->mesg = msg; - d->iter = static_cast<DBusMessageIter *>( malloc( sizeof(DBusMessageIter) ) ); - dbus_message_iter_init( d->mesg, d->iter ); - if ( !d->iter ) { - qDebug("No iterator??"); - } - fillVar(); - d->end = false; -} - -/** - * Copy constructor for the iterator. - * @param itr iterator - */ -Message::iterator::iterator( const iterator& itr ) -{ - d = new IteratorData; - d->iter = itr.d->iter; - d->var = itr.d->var; - d->end = itr.d->end; -} - -/** - * Destructor. - */ -Message::iterator::~iterator() -{ - free( d->iter ); - delete d; d=0; -} - -/** - * Creates an iterator equal to the @p itr iterator - * @param itr other iterator - * @return - */ -Message::iterator& -Message::iterator::operator=( const iterator& itr ) -{ - IteratorData *tmp = new IteratorData; - tmp->iter = itr.d->iter; - tmp->var = itr.d->var; - tmp->end = itr.d->end; - delete d; d=tmp; - return *this; -} - -/** - * Returns the constant QVariant held by the iterator. - * @return the constant reference to QVariant held by this iterator - */ -const QVariant& -Message::iterator::operator*() const -{ - return d->var; -} - -/** - * Returns the QVariant held by the iterator. - * @return reference to QVariant held by this iterator - */ -QVariant& -Message::iterator::operator*() -{ - return d->var; -} - -/** - * Moves to the next field and return a reference to itself after - * incrementing. - * @return reference to self after incrementing - */ -Message::iterator& -Message::iterator::operator++() -{ - if ( d->end ) - return *this; - - if ( dbus_message_iter_next( d->iter ) ) { - fillVar(); - } else { - d->end = true; - d->var = QVariant(); - } - return *this; -} - -/** - * Moves to the next field and returns self before incrementing. - * @return self before incrementing - */ -Message::iterator -Message::iterator::operator++(int) -{ - iterator itr( *this ); - operator++(); - return itr; -} - -/** - * Compares this iterator to @p it iterator. - * @param it the iterator to which we're comparing this one to - * @return true if they're equal, false otherwise - */ -bool -Message::iterator::operator==( const iterator& it ) -{ - if ( d->end == it.d->end ) { - if ( d->end == true ) { - return true; - } else { - return d->var == it.d->var; - } - } else - return false; -} - -/** - * Compares two iterators. - * @param it The other iterator. - * @return true if two iterators are not equal, false - * otherwise - */ -bool -Message::iterator::operator!=( const iterator& it ) -{ - return !operator==( it ); -} - -QVariant Message::iterator::marshallBaseType( DBusMessageIter* i ) -{ - QVariant ret; - switch (dbus_message_iter_get_arg_type(i)) { - case DBUS_TYPE_INT32: - { - dbus_int32_t v; - dbus_message_iter_get_basic (i, &v); - ret = QVariant( v ); - } - break; - case DBUS_TYPE_UINT32: - { - dbus_uint32_t v; - dbus_message_iter_get_basic (i, &v); - ret = QVariant( v ); - } - break; - case DBUS_TYPE_DOUBLE: - { - double v; - dbus_message_iter_get_basic (i, &v); - ret = QVariant( v ); - } - break; - case DBUS_TYPE_STRING: - { - const char *v; - dbus_message_iter_get_basic (i, &v); - ret = QVariant( v ); - } - break; - default: - ret = QVariant(); - break; - } - return ret; -} - -/** - * Fills QVariant based on what current DBusMessageIter helds. - */ -void -Message::iterator::fillVar() -{ - switch ( dbus_message_iter_get_arg_type( d->iter ) ) { - case DBUS_TYPE_INT32: - case DBUS_TYPE_UINT32: - case DBUS_TYPE_DOUBLE: - case DBUS_TYPE_STRING: - d->var = marshallBaseType( d->iter ); - break; - case DBUS_TYPE_ARRAY: { - switch ( dbus_message_iter_get_element_type( d->iter ) ) { - case DBUS_TYPE_STRING: { - QStringList tempList; - DBusMessageIter sub; - dbus_message_iter_recurse (d->iter, &sub); - while (dbus_message_iter_get_arg_type (&sub) != DBUS_TYPE_INVALID) - { - const char *v; - dbus_message_iter_get_basic (&sub, &v); - tempList.append( QString( v ) ); - dbus_message_iter_next (&sub); - } - d->var = QVariant( tempList ); - break; - } - default: - qDebug( "Array of type not implemented" ); - d->var = QVariant(); - break; - } - break; - } -#if 0 - /* DICT is gone for now, but expected to be reintroduced, or else - * reintroduced as a flag on the introspection data that can - * apply to array of struct of two fields - */ - case DBUS_TYPE_DICT: { - qDebug( "Got a hash!" ); - QMap<QString, QVariant> tempMap; - DBusMessageIter dictIter; - dbus_message_iter_init_dict_iterator( d->iter, &dictIter ); - do { - char *key = dbus_message_iter_get_dict_key( &dictIter ); - tempMap[key] = marshallBaseType( &dictIter ); - dbus_free( key ); - dbus_message_iter_next( &dictIter ); - } while( dbus_message_iter_has_next( &dictIter ) ); - d->var = QVariant( tempMap ); - break; - qDebug( "Hash/Dict type not implemented" ); - d->var = QVariant(); - break; - } -#endif - default: - qDebug( "not implemented" ); - d->var = QVariant(); - break; - } -} - -/** - * Returns a QVariant help by this iterator. - * @return QVariant held by this iterator - */ -QVariant -Message::iterator::var() const -{ - return d->var; -} - -struct Message::Private { - DBusMessage *msg; -}; - -Message::Message( DBusMessage *m ) -{ - d = new Private; - d->msg = m; -} - -/** - * - */ -Message::Message( int messageType ) -{ - d = new Private; - 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& path, - const QString& interface, const QString& method ) -{ - d = new Private; - d->msg = dbus_message_new_method_call( service.latin1(), path.latin1(), - interface.latin1(), method.latin1() ); -} - -/** - * Constructs a message that is a reply to some other - * message. - * @param name the name of the message - * @param replayingTo original_message the message which the created - * message is a reply to. - */ -Message::Message( const Message& replayingTo ) -{ - d = new Private; - d->msg = dbus_message_new_method_return( replayingTo.d->msg ); -} - -Message:: Message( const QString& path, const QString& interface, - const QString& name ) -{ - d = new Private; - 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 Private; - 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. - */ -Message::~Message() -{ - if ( d->msg ) { - dbus_message_unref( d->msg ); - } - delete d; d=0; -} - -int Message::type() const -{ - return dbus_message_get_type( d->msg ); -} - -void Message::setPath( const QString& path ) -{ - dbus_message_set_path( d->msg, path.ascii() ); -} - -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_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 ); -} - -/** - * Sets the message sender. - * @param sender the sender - * @return false if unsuccessful - */ -bool -Message::setSender( const QString& sender ) -{ - return dbus_message_set_sender( d->msg, sender.latin1() ); -} - -/** - * Returns sender of this message. - * @return sender - */ -QString -Message::sender() const -{ - return dbus_message_get_sender( d->msg ); -} - -QString Message::signature() const -{ - return dbus_message_get_signature( d->msg ); -} - - -/** - * Returns the starting iterator for the fields of this - * message. - * @return starting iterator - */ -Message::iterator -Message::begin() const -{ - return iterator( d->msg ); -} - -/** - * Returns the ending iterator for the fields of this - * message. - * @return ending iterator - */ -Message::iterator -Message::end() const -{ - return iterator(); -} - -/** - * Returns the field at position @p i - * @param i position of the wanted field - * @return QVariant at position @p i or an empty QVariant - */ -QVariant -Message::at( int i ) -{ - iterator itr( d->msg ); - - while ( i-- ) { - if ( itr == end() ) - return QVariant();//nothing there - ++itr; - } - return *itr; -} - -/** - * The underlying DBusMessage of this class. - * @return DBusMessage pointer. - */ -DBusMessage* -Message::message() const -{ - return d->msg; -} - -Message& Message::operator<<( bool b ) -{ - const dbus_bool_t right_size_bool = b; - dbus_message_append_args( d->msg, DBUS_TYPE_BOOLEAN, &right_size_bool, - DBUS_TYPE_INVALID ); -} - -Message& Message::operator<<( Q_INT8 byte ) -{ - dbus_message_append_args( d->msg, DBUS_TYPE_BYTE, &byte, - DBUS_TYPE_INVALID ); -} - -Message& Message::operator<<( Q_INT32 num ) -{ - dbus_message_append_args( d->msg, DBUS_TYPE_INT32, &num, - DBUS_TYPE_INVALID ); -} - -Message& Message::operator<<( Q_UINT32 num ) -{ - dbus_message_append_args( d->msg, DBUS_TYPE_UINT32, &num, - DBUS_TYPE_INVALID ); -} - -Message& Message::operator<<( Q_INT64 num ) -{ - dbus_message_append_args( d->msg, DBUS_TYPE_INT64, &num, - DBUS_TYPE_INVALID ); -} - -Message& Message::operator<<( Q_UINT64 num ) -{ - dbus_message_append_args( d->msg, DBUS_TYPE_UINT64, &num, - DBUS_TYPE_INVALID ); -} - -Message& Message::operator<<( double num ) -{ - dbus_message_append_args( d->msg, DBUS_TYPE_DOUBLE, &num, - DBUS_TYPE_INVALID ); -} - -Message& Message::operator<<( const QString& str ) -{ - const char *u = str.utf8(); - dbus_message_append_args( d->msg, DBUS_TYPE_STRING, &u, - DBUS_TYPE_INVALID ); -} - -Message& Message::operator<<( const QVariant& custom ) -{ - //FIXME: imeplement -} - -} |