+QVariantList SignalProxy::peerData() {
+ QVariantList result;
+ for (auto &&peer : _peerMap.values()) {
+ QVariantMap data;
+ data["id"] = peer->id();
+ data["clientVersion"] = peer->clientVersion();
+ // We explicitly rename this, as, due to the Debian reproducability changes, buildDate isn’t actually the build
+ // date anymore, but on newer clients the date of the last git commit
+ data["clientVersionDate"] = peer->buildDate();
+ data["remoteAddress"] = peer->address();
+ data["connectedSince"] = peer->connectedSince();
+ data["secure"] = peer->isSecure();
+ data["features"] = static_cast<quint32>(peer->features().toLegacyFeatures());
+ data["featureList"] = peer->features().toStringList();
+ result << data;
+ }
+ return result;
+}
+
+Peer *SignalProxy::peerById(int peerId) {
+ // We use ::value() here instead of the [] operator because the latter has the side-effect
+ // of automatically inserting a null value with the passed key into the map. See
+ // https://doc.qt.io/qt-5/qhash.html#operator-5b-5d and https://doc.qt.io/qt-5/qhash.html#value.
+ return _peerMap.value(peerId);
+}
+
+void SignalProxy::restrictTargetPeers(QSet<Peer*> peers, std::function<void()> closure)
+{
+ auto previousRestrictMessageTarget = _restrictMessageTarget;
+ auto previousRestrictedTargets = _restrictedTargets;
+ _restrictMessageTarget = true;
+ _restrictedTargets = peers;
+
+ closure();
+
+ _restrictMessageTarget = previousRestrictMessageTarget;
+ _restrictedTargets = previousRestrictedTargets;
+}
+
+Peer *SignalProxy::sourcePeer() {
+ return _sourcePeer;
+}
+
+void SignalProxy::setSourcePeer(Peer *sourcePeer) {
+ _sourcePeer = sourcePeer;
+}
+
+Peer *SignalProxy::targetPeer() {
+ return _targetPeer;
+}
+
+void SignalProxy::setTargetPeer(Peer *targetPeer) {
+ _targetPeer = targetPeer;
+}