diff options
Diffstat (limited to 'qt/qdbusconnection_p.h')
| -rw-r--r-- | qt/qdbusconnection_p.h | 79 | 
1 files changed, 61 insertions, 18 deletions
| diff --git a/qt/qdbusconnection_p.h b/qt/qdbusconnection_p.h index cd2e48e2..7904a843 100644 --- a/qt/qdbusconnection_p.h +++ b/qt/qdbusconnection_p.h @@ -40,13 +40,14 @@  #include "qdbuserror.h"  #include <QtCore/qatomic.h> -#include <QtCore/qmutex.h> +#include <QtCore/qeventloop.h>  #include <QtCore/qhash.h> +#include <QtCore/qmutex.h>  #include <QtCore/qobject.h>  #include <QtCore/qpointer.h> +#include <QtCore/qreadwritelock.h>  #include <QtCore/qvarlengtharray.h> -#include <QtCore/qeventloop.h> -#include <QtCore/qmutex.h> +#include <QtCore/qvector.h>  #include <dbus/dbus.h> @@ -79,16 +80,38 @@ public:      struct SignalHook      { +        inline SignalHook() : obj(0), midx(-1) { }          QString interface, name, signature; -        QPointer<QObject> obj; +        QObject* obj;          int midx;          QList<int> params;      }; -    struct ObjectData +    struct ObjectTreeNode      { -        QPointer<QObject> obj; +        struct Data +        { +            QString name; +            ObjectTreeNode *node; + +            inline bool operator<(const QString &other) const +            { return name < other; } +        }; + +        inline ObjectTreeNode() : obj(0), flags(0) { } +        inline ~ObjectTreeNode() { clear(); } +        inline void clear() +        { +            foreach (const Data &entry, children) { +                entry.node->clear(); +                delete entry.node; +            } +            children.clear(); +        } + +        QObject* obj;          int flags; +        QVector<Data> children;      };  public: @@ -96,11 +119,9 @@ public:      typedef QMultiHash<int, Watcher> WatcherHash;      typedef QHash<int, DBusTimeout *> TimeoutHash;      typedef QMultiHash<QString, SignalHook> SignalHookHash; -    typedef QHash<QString, ObjectData> ObjectDataHash; -    typedef QHash<QString, ObjectDataHash> ObjectHookHash;      typedef QHash<QString, QSharedDataPointer<QDBusIntrospection::Interface> > KnownInterfacesHash;      typedef QHash<QString, QDBusIntrospection::Object* > KnownObjectsHash; - +      public:      // public methods      QDBusConnectionPrivate(QObject *parent = 0); @@ -113,11 +134,13 @@ public:      void closeConnection();      void timerEvent(QTimerEvent *e); -    bool handleSignal(const QString &path, const QDBusMessage &msg);      bool send(const QDBusMessage &message) const;      int sendWithReplyAsync(const QDBusMessage &message, QObject *receiver,                             const char *method) const; +    void connectSignal(const QString &key, const SignalHook &hook); +    void registerObject(const ObjectTreeNode *node); +    bool handleSignal(const QString &path, const QDBusMessage &msg);      bool handleSignal(const QDBusMessage &msg);      bool handleObjectCall(const QDBusMessage &message);      bool handleError(); @@ -127,13 +150,14 @@ public:      QSharedDataPointer<QDBusIntrospection::Interface> findInterface(const QString& name);      QDBusIntrospection::Object* findObject(const QString& service,                                             const QString& path); -                                                                                   -    bool activateReply(QObject *object, int idx, const QList<int>& metaTypes, -                       const QDBusMessage &msg); +      bool activateSignal(const SignalHook& hook, const QDBusMessage &msg);      bool activateCall(QObject* object, int flags, const QDBusMessage &msg); -    bool activateAdaptor(QObject *object, int flags, const QDBusMessage &msg); -    bool activateObject(const ObjectData& data, const QDBusMessage &msg); +    bool activateObject(const ObjectTreeNode *node, const QDBusMessage &msg); +    bool activateInternalFilters(const ObjectTreeNode *node, const QDBusMessage &msg); + +    void postCallDeliveryEvent(CallDeliveryEvent *data); +    CallDeliveryEvent *postedCallDeliveryEvent();      void deliverCall(const CallDeliveryEvent &data) const;  protected: @@ -144,14 +168,17 @@ public slots:      void socketRead(int);      void socketWrite(int);      void objectDestroyed(QObject *o); +    void relaySignal(QObject *obj, const char *interface, const char *name, const QVariantList &args);  public:      // public member variables +    QString name;               // this connection's name +          DBusError error;      QDBusError lastError;      QAtomic ref; -    QMutex mutex; +    QReadWriteLock lock;      ConnectionMode mode;      DBusConnection *connection;      DBusServer *server; @@ -159,9 +186,13 @@ public:      WatcherHash watchers;      TimeoutHash timeouts;      SignalHookHash signalHooks; -    ObjectHookHash objectHooks;      QList<DBusTimeout *> pendingTimeouts; +    ObjectTreeNode rootNode; + +    QMutex callDeliveryMutex; +    CallDeliveryEvent *callDeliveryState; // protected by the callDeliveryMutex mutex +  public:      // public mutable member variables      mutable KnownInterfacesHash knownInterfaces; @@ -182,6 +213,18 @@ public:  public slots:      void reply(const QDBusMessage &msg); -};     +}; + +extern int qDBusParametersForMethod(const QByteArray &sig, QList<int>& metaTypes); +extern int qDBusNameToTypeId(const char *name); +extern bool qDBusCheckAsyncTag(const char *tag); + +// in qdbusinternalfilters.cpp +extern void qDBusIntrospectObject(const QDBusConnectionPrivate::ObjectTreeNode *node, +                                  const QDBusMessage &msg); +extern void qDBusPropertyGet(const QDBusConnectionPrivate::ObjectTreeNode *node, +                             const QDBusMessage &msg); +extern void qDBusPropertySet(const QDBusConnectionPrivate::ObjectTreeNode *node, +                             const QDBusMessage &msg);  #endif | 
