projects
/
quassel.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
ac21cc4
)
added SignalProxy::isSecure() to determine if all connections are secure (ssl encrypt...
author
Marcus Eggenberger
<egs@quassel-irc.org>
Sun, 21 Dec 2008 14:07:40 +0000
(15:07 +0100)
committer
Marcus Eggenberger
<egs@quassel-irc.org>
Thu, 25 Dec 2008 23:03:49 +0000
(
00:03
+0100)
src/common/signalproxy.cpp
patch
|
blob
|
history
src/common/signalproxy.h
patch
|
blob
|
history
src/common/syncableobject.cpp
patch
|
blob
|
history
src/qtui/settingspages/identitiessettingspage.cpp
patch
|
blob
|
history
diff --git
a/src/common/signalproxy.cpp
b/src/common/signalproxy.cpp
index
58b9eda
..
a9172fc
100644
(file)
--- a/
src/common/signalproxy.cpp
+++ b/
src/common/signalproxy.cpp
@@
-32,6
+32,7
@@
#include <QMetaMethod>
#include <QMetaProperty>
#include <QRegExp>
#include <QMetaMethod>
#include <QMetaProperty>
#include <QRegExp>
+#include <QSslSocket>
#include <QThread>
#include <QTime>
#include <QEvent>
#include <QThread>
#include <QTime>
#include <QEvent>
@@
-212,6
+213,18
@@
void SignalProxy::IODevicePeer::dispatchSignal(const RequestType &requestType, c
dispatchPackedFunc(QVariant(packedFunc));
}
dispatchPackedFunc(QVariant(packedFunc));
}
+bool SignalProxy::IODevicePeer::isSecure() const {
+ QSslSocket *sslSocket = qobject_cast<QSslSocket *>(_device);
+ if(sslSocket)
+ return sslSocket->isEncrypted() || sslSocket->localAddress() == QHostAddress::LocalHost || sslSocket->localAddress() == QHostAddress::LocalHostIPv6;
+
+ 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)
QString SignalProxy::IODevicePeer::address() const {
QAbstractSocket *socket = qobject_cast<QAbstractSocket *>(_device);
if(socket)
@@
-291,6
+304,8
@@
void SignalProxy::setProxyMode(ProxyMode mode) {
void SignalProxy::init() {
connect(&_heartBeatTimer, SIGNAL(timeout()), this, SLOT(sendHeartBeat()));
_heartBeatTimer.start(30 * 1000);
void SignalProxy::init() {
connect(&_heartBeatTimer, SIGNAL(timeout()), this, SLOT(sendHeartBeat()));
_heartBeatTimer.start(30 * 1000);
+ _secure = false;
+ updateSecureState();
}
void SignalProxy::initServer() {
}
void SignalProxy::initServer() {
@@
-320,6
+335,11
@@
bool SignalProxy::addPeer(QIODevice* iodev) {
connect(iodev, SIGNAL(disconnected()), this, SLOT(removePeerBySender()));
connect(iodev, SIGNAL(readyRead()), this, SLOT(dataAvailable()));
connect(iodev, SIGNAL(disconnected()), this, SLOT(removePeerBySender()));
connect(iodev, SIGNAL(readyRead()), this, SLOT(dataAvailable()));
+ QSslSocket *sslSocket = qobject_cast<QSslSocket *>(iodev);
+ if(sslSocket) {
+ connect(iodev, SIGNAL(encrypted()), this, SLOT(updateSecureState()));
+ }
+
if(!iodev->parent())
iodev->setParent(this);
if(!iodev->parent())
iodev->setParent(this);
@@
-328,6
+348,7
@@
bool SignalProxy::addPeer(QIODevice* iodev) {
if(_peers.count() == 1)
emit connected();
if(_peers.count() == 1)
emit connected();
+ updateSecureState();
return true;
}
return true;
}
@@
-355,6
+376,7
@@
bool SignalProxy::addPeer(SignalProxy* proxy) {
if(_peers.count() == 1)
emit connected();
if(_peers.count() == 1)
emit connected();
+ updateSecureState();
return true;
}
return true;
}
@@
-397,6
+419,8
@@
void SignalProxy::removePeer(QObject* dev) {
delete peer;
delete peer;
+ updateSecureState();
+
if(_peers.isEmpty())
emit disconnected();
}
if(_peers.isEmpty())
emit disconnected();
}
@@
-1122,7
+1146,7
@@
bool SignalProxy::methodsMatch(const QMetaMethod &signal, const QMetaMethod &slo
signalsuffix = signalsuffix.mid(baseName.count()).toLower();
slotprefix = slotprefix.left(slotprefix.count() - baseName.count()).toLower();
}
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) {
uint sizediff = qAbs(slotprefix.size() - signalsuffix.size());
int ratio = editingDistance(slotprefix, signalsuffix) - sizediff;
// if(ratio < 2) {
@@
-1287,3
+1311,16
@@
void SignalProxy::dumpSyncMap(SyncableObject *object) {
iter++;
}
}
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);
+}
diff --git
a/src/common/signalproxy.h
b/src/common/signalproxy.h
index
755461e
..
129a6a2
100644
(file)
--- a/
src/common/signalproxy.h
+++ b/
src/common/signalproxy.h
@@
-106,6
+106,8
@@
public:
*/
static bool readDataFromDevice(QIODevice *dev, quint32 &blockSize, QVariant &item, bool compressed = false);
*/
static bool readDataFromDevice(QIODevice *dev, quint32 &blockSize, QVariant &item, bool compressed = false);
+ bool isSecure() const { return _secure; }
+
static QString methodBaseName(const QMetaMethod &method);
const QList<int> &argTypes(QObject *obj, int methodId);
static QString methodBaseName(const QMetaMethod &method);
const QList<int> &argTypes(QObject *obj, int methodId);
@@
-142,14
+144,18
@@
private slots:
void sendHeartBeat();
void receiveHeartBeat(AbstractPeer *peer, const QVariantList ¶ms);
void receiveHeartBeatReply(AbstractPeer *peer, const QVariantList ¶ms);
void sendHeartBeat();
void receiveHeartBeat(AbstractPeer *peer, const QVariantList ¶ms);
void receiveHeartBeatReply(AbstractPeer *peer, const QVariantList ¶ms);
-
+
+ void updateSecureState();
+
signals:
void peerRemoved(QIODevice *dev);
void connected();
void disconnected();
void objectInitialized(SyncableObject *);
void lagUpdated(int lag);
signals:
void peerRemoved(QIODevice *dev);
void connected();
void disconnected();
void objectInitialized(SyncableObject *);
void lagUpdated(int lag);
-
+ void securityChanged(bool);
+ void secureStateChanged(bool);
+
private:
void init();
void initServer();
private:
void init();
void initServer();
@@
-205,6
+211,7
@@
private:
virtual ~AbstractPeer() {}
inline PeerType type() const { return _type; }
virtual void dispatchSignal(const RequestType &requestType, const QVariantList ¶ms) = 0;
virtual ~AbstractPeer() {}
inline PeerType type() const { return _type; }
virtual void dispatchSignal(const RequestType &requestType, const QVariantList ¶ms) = 0;
+ virtual bool isSecure() const = 0;
private:
PeerType _type;
};
private:
PeerType _type;
};
@@
-213,6
+220,7
@@
private:
public:
IODevicePeer(QIODevice *device, bool compress) : AbstractPeer(AbstractPeer::IODevicePeer), _device(device), byteCount(0), usesCompression(compress), sentHeartBeats(0), lag(0) {}
virtual void dispatchSignal(const RequestType &requestType, const QVariantList ¶ms);
public:
IODevicePeer(QIODevice *device, bool compress) : AbstractPeer(AbstractPeer::IODevicePeer), _device(device), byteCount(0), usesCompression(compress), sentHeartBeats(0), lag(0) {}
virtual void dispatchSignal(const RequestType &requestType, const QVariantList ¶ms);
+ virtual bool isSecure() const;
inline void dispatchPackedFunc(const QVariant &packedFunc) { SignalProxy::writeDataToDevice(_device, packedFunc, usesCompression); }
QString address() const;
inline bool isOpen() const { return _device->isOpen(); }
inline void dispatchPackedFunc(const QVariant &packedFunc) { SignalProxy::writeDataToDevice(_device, packedFunc, usesCompression); }
QString address() const;
inline bool isOpen() const { return _device->isOpen(); }
@@
-231,6
+239,7
@@
private:
public:
SignalProxyPeer(SignalProxy *sender, SignalProxy *receiver) : AbstractPeer(AbstractPeer::SignalProxyPeer), sender(sender), receiver(receiver) {}
virtual void dispatchSignal(const RequestType &requestType, const QVariantList ¶ms);
public:
SignalProxyPeer(SignalProxy *sender, SignalProxy *receiver) : AbstractPeer(AbstractPeer::SignalProxyPeer), sender(sender), receiver(receiver) {}
virtual void dispatchSignal(const RequestType &requestType, const QVariantList ¶ms);
+ virtual inline bool isSecure() const { return true; }
private:
SignalProxy *sender;
SignalProxy *receiver;
private:
SignalProxy *sender;
SignalProxy *receiver;
@@
-259,6
+268,8
@@
private:
ProxyMode _proxyMode;
QTimer _heartBeatTimer;
ProxyMode _proxyMode;
QTimer _heartBeatTimer;
+
+ bool _secure; // determines if all connections are in a secured state (using ssl or internal connections)
friend class SignalRelay;
};
friend class SignalRelay;
};
diff --git
a/src/common/syncableobject.cpp
b/src/common/syncableobject.cpp
index
96b159b
..
ec34708
100644
(file)
--- a/
src/common/syncableobject.cpp
+++ b/
src/common/syncableobject.cpp
@@
-100,7
+100,6
@@
QVariantMap SyncableObject::toVariantMap() {
QMetaObject::invokeMethod(this, methodname.toAscii(), genericvalue);
properties[SignalProxy::methodBaseName(method)] = value;
QMetaObject::invokeMethod(this, methodname.toAscii(), genericvalue);
properties[SignalProxy::methodBaseName(method)] = value;
- // qDebug() << ">>> SYNC:" << methodBaseName(method) << value;
}
// properties["Payload"] = QByteArray(10000000, 'a'); // for testing purposes
return properties;
}
// properties["Payload"] = QByteArray(10000000, 'a'); // for testing purposes
return properties;
diff --git
a/src/qtui/settingspages/identitiessettingspage.cpp
b/src/qtui/settingspages/identitiessettingspage.cpp
index
e51fa7a
..
4f87c83
100644
(file)
--- a/
src/qtui/settingspages/identitiessettingspage.cpp
+++ b/
src/qtui/settingspages/identitiessettingspage.cpp
@@
-76,7
+76,10
@@
IdentitiesSettingsPage::IdentitiesSettingsPage(QWidget *parent)
connect(ui.nicknameList, SIGNAL(itemSelectionChanged()), this, SLOT(setWidgetStates()));
#ifdef HAVE_SSL
connect(ui.nicknameList, SIGNAL(itemSelectionChanged()), this, SLOT(setWidgetStates()));
#ifdef HAVE_SSL
- ui.keyAndCertSettings->setCurrentIndex(1);
+ if(Client::signalProxy()->isSecure())
+ ui.keyAndCertSettings->setCurrentIndex(2);
+ else
+ ui.keyAndCertSettings->setCurrentIndex(1);
#else
ui.keyAndCertSettings->setCurrentIndex(0);
#endif
#else
ui.keyAndCertSettings->setCurrentIndex(0);
#endif