1 /***************************************************************************
2 * Copyright (C) 2005-2018 by the Quassel Project *
3 * devel@quassel-irc.org *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) version 3. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
19 ***************************************************************************/
21 #include "internalpeer.h"
24 using namespace Protocol;
26 InternalPeer::InternalPeer(QObject *parent)
27 : Peer(nullptr, parent)
29 static bool registered = []() {
30 qRegisterMetaType<QPointer<InternalPeer>>();
31 qRegisterMetaType<Protocol::SyncMessage>();
32 qRegisterMetaType<Protocol::RpcCall>();
33 qRegisterMetaType<Protocol::InitRequest>();
34 qRegisterMetaType<Protocol::InitData>();
39 setFeatures(Quassel::Features{});
43 InternalPeer::~InternalPeer()
51 QString InternalPeer::description() const
53 return tr("internal connection");
57 QString InternalPeer::address() const
59 return tr("internal connection");
63 quint16 InternalPeer::port() const
69 bool InternalPeer::isOpen() const
75 bool InternalPeer::isSecure() const
81 bool InternalPeer::isLocal() const
87 void InternalPeer::close(const QString &reason)
94 int InternalPeer::lag() const
100 ::SignalProxy *InternalPeer::signalProxy() const
106 void InternalPeer::setSignalProxy(::SignalProxy *proxy)
108 if (!proxy && _proxy) {
117 if (proxy && !_proxy) {
123 qWarning() << Q_FUNC_INFO << "Changing the SignalProxy is not supported!";
127 void InternalPeer::setPeer(InternalPeer *peer)
129 connect(peer, selectOverload<const Protocol::SyncMessage&>(&InternalPeer::dispatchMessage),
130 this, selectOverload<const Protocol::SyncMessage&>(&InternalPeer::handleMessage));
131 connect(peer, selectOverload<const Protocol::RpcCall&>(&InternalPeer::dispatchMessage),
132 this, selectOverload<const Protocol::RpcCall&>(&InternalPeer::handleMessage));
133 connect(peer, selectOverload<const Protocol::InitRequest&>(&InternalPeer::dispatchMessage),
134 this, selectOverload<const Protocol::InitRequest&>(&InternalPeer::handleMessage));
135 connect(peer, selectOverload<const Protocol::InitData&>(&InternalPeer::dispatchMessage),
136 this, selectOverload<const Protocol::InitData&>(&InternalPeer::handleMessage));
138 connect(peer, &Peer::disconnected, this, &InternalPeer::peerDisconnected);
144 void InternalPeer::peerDisconnected()
146 disconnect(sender(), nullptr, this, nullptr);
154 void InternalPeer::dispatch(const SyncMessage &msg)
156 emit dispatchMessage(msg);
160 void InternalPeer::dispatch(const RpcCall &msg)
162 emit dispatchMessage(msg);
166 void InternalPeer::dispatch(const InitRequest &msg)
168 emit dispatchMessage(msg);
172 void InternalPeer::dispatch(const InitData &msg)
174 emit dispatchMessage(msg);
178 void InternalPeer::handleMessage(const Protocol::SyncMessage &msg)
184 void InternalPeer::handleMessage(const Protocol::RpcCall &msg)
190 void InternalPeer::handleMessage(const Protocol::InitRequest &msg)
196 void InternalPeer::handleMessage(const Protocol::InitData &msg)
203 void InternalPeer::handle(const T &msg)
205 static auto setSourcePeer = [](Peer *peer) {
206 auto p = SignalProxy::current();
208 p->setSourcePeer(peer);
214 setSourcePeer(nullptr);