From: Manuel Nickschas Date: Wed, 11 Mar 2015 18:43:21 +0000 (+0100) Subject: Make PeerPtr work for RPC calls X-Git-Tag: 0.12-rc1~8 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=d367542ce54ed86fd3c8dbdbbf8210fc9a19a882 Make PeerPtr work for RPC calls While most of the functionality was already in place, it turns out that we need to enable loading/saving PeerPtr from/to a QVariant in order for SignalProxy to work properly. I'm honestly not sure why it seemed to work without this when implementing the TransferManager, but it's obvious it's required. --- diff --git a/src/common/peer.cpp b/src/common/peer.cpp index 14041597..3785326c 100644 --- a/src/common/peer.cpp +++ b/src/common/peer.cpp @@ -32,3 +32,22 @@ AuthHandler *Peer::authHandler() const { return _authHandler; } + + +// Note that we need to use a fixed-size integer instead of uintptr_t, in order +// to avoid issues with different architectures for client and core. +// In practice, we'll never really have to restore the real value of a PeerPtr from +// a QVariant. +QDataStream &operator<<(QDataStream &out, PeerPtr ptr) +{ + out << reinterpret_cast(ptr); + return out; +} + +QDataStream &operator>>(QDataStream &in, PeerPtr &ptr) +{ + quint64 value; + in >> value; + ptr = reinterpret_cast(value); + return in; +} diff --git a/src/common/peer.h b/src/common/peer.h index a21e9c1b..b9dfed16 100644 --- a/src/common/peer.h +++ b/src/common/peer.h @@ -86,6 +86,9 @@ private: typedef Peer * PeerPtr; Q_DECLARE_METATYPE(PeerPtr) +QDataStream &operator<<(QDataStream &out, PeerPtr ptr); +QDataStream &operator>>(QDataStream &in, PeerPtr &ptr); + // Template method needed in the header template inline diff --git a/src/common/quassel.cpp b/src/common/quassel.cpp index f43423cc..c166ee64 100644 --- a/src/common/quassel.cpp +++ b/src/common/quassel.cpp @@ -42,6 +42,7 @@ #include "logger.h" #include "message.h" #include "network.h" +#include "peer.h" #include "protocol.h" #include "syncableobject.h" #include "types.h" @@ -203,6 +204,8 @@ void Quassel::registerMetaTypes() qRegisterMetaTypeStreamOperators("MsgId"); qRegisterMetaType("Protocol::SessionState"); + qRegisterMetaType("PeerPtr"); + qRegisterMetaTypeStreamOperators("PeerPtr"); // Versions of Qt prior to 4.7 didn't define QVariant as a meta type if (!QMetaType::type("QVariant")) {