#include <QMetaMethod>
#include <QMetaProperty>
#include <QRegExp>
+#ifdef HAVE_SSL
+#include <QSslSocket>
+#endif
#include <QThread>
#include <QTime>
#include <QEvent>
dispatchPackedFunc(QVariant(packedFunc));
}
+bool SignalProxy::IODevicePeer::isSecure() const {
+#ifdef HAVE_SSL
+ QSslSocket *sslSocket = qobject_cast<QSslSocket *>(_device);
+ if(sslSocket)
+ return sslSocket->isEncrypted() || sslSocket->localAddress() == QHostAddress::LocalHost || sslSocket->localAddress() == QHostAddress::LocalHostIPv6;
+#endif
+
+ QAbstractSocket *socket = qobject_cast<QAbstractSocket *>(_device);
+ if(socket)
+ return socket->localAddress() == QHostAddress::LocalHost || socket->localAddress() == QHostAddress::LocalHostIPv6;
+
+ return false;
+}
+
QString SignalProxy::IODevicePeer::address() const {
QAbstractSocket *socket = qobject_cast<QAbstractSocket *>(_device);
if(socket)
void SignalProxy::init() {
connect(&_heartBeatTimer, SIGNAL(timeout()), this, SLOT(sendHeartBeat()));
_heartBeatTimer.start(30 * 1000);
+ _secure = false;
+ updateSecureState();
}
void SignalProxy::initServer() {
connect(iodev, SIGNAL(disconnected()), this, SLOT(removePeerBySender()));
connect(iodev, SIGNAL(readyRead()), this, SLOT(dataAvailable()));
+#ifdef HAVE_SSL
+ QSslSocket *sslSocket = qobject_cast<QSslSocket *>(iodev);
+ if(sslSocket) {
+ connect(iodev, SIGNAL(encrypted()), this, SLOT(updateSecureState()));
+ }
+#endif
+
if(!iodev->parent())
iodev->setParent(this);
if(_peers.count() == 1)
emit connected();
+ updateSecureState();
return true;
}
if(_peers.count() == 1)
emit connected();
+ updateSecureState();
return true;
}
delete peer;
+ updateSecureState();
+
if(_peers.isEmpty())
emit disconnected();
}
void SignalProxy::objectRenamed(const QString &newname, const QString &oldname) {
SyncableObject *syncObject = qobject_cast<SyncableObject *>(sender());
- const QMetaObject *meta = syncObject->metaObject();
+ const QMetaObject *meta = syncObject->syncMetaObject();
const QByteArray className(meta->className());
objectRenamed(className, newname, oldname);
signalsuffix = signalsuffix.mid(baseName.count()).toLower();
slotprefix = slotprefix.left(slotprefix.count() - baseName.count()).toLower();
}
-
+
uint sizediff = qAbs(slotprefix.size() - signalsuffix.size());
int ratio = editingDistance(slotprefix, signalsuffix) - sizediff;
// if(ratio < 2) {
iter++;
}
}
+
+void SignalProxy::updateSecureState() {
+ bool wasSecure = _secure;
+
+ _secure = !_peers.isEmpty();
+ PeerHash::const_iterator peerIter;
+ for(peerIter = _peers.constBegin(); peerIter != _peers.constEnd(); peerIter++) {
+ _secure &= (*peerIter)->isSecure();
+ }
+
+ if(wasSecure != _secure)
+ emit secureStateChanged(_secure);
+}