summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Blasche <alexander.blasche@theqtcompany.com>2015-06-22 12:05:03 +0200
committerAlex Blasche <alexander.blasche@theqtcompany.com>2015-07-06 06:49:31 +0000
commit6b7b961e00c87cfbaabbbfabaf348a356558d8da (patch)
treebfc8a091638427aacd71054f9d469bdc7aa958ec
parentfc5738fe8fcd9f0491834b453ef2705c31fdbe02 (diff)
Add security flag support for tests with bttestui
The user presses the "Cycle SecFlag" button and chooses the required sec level. The sec level is set on client and server socket shortly before connectToService() and listen() are called. Change-Id: Ic841fb22eb2acaf738435d6d34897b7efb59e22e Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com>
-rw-r--r--tests/bttestui/btlocaldevice.cpp53
-rw-r--r--tests/bttestui/btlocaldevice.h7
-rw-r--r--tests/bttestui/main.qml16
3 files changed, 73 insertions, 3 deletions
diff --git a/tests/bttestui/btlocaldevice.cpp b/tests/bttestui/btlocaldevice.cpp
index fbb1e59d..5fb031fa 100644
--- a/tests/bttestui/btlocaldevice.cpp
+++ b/tests/bttestui/btlocaldevice.cpp
@@ -45,7 +45,7 @@
//#define SOCKET_PROTOCOL QBluetoothServiceInfo::L2capProtocol
BtLocalDevice::BtLocalDevice(QObject *parent) :
- QObject(parent)
+ QObject(parent), securityFlags(QBluetooth::NoSecurity)
{
localDevice = new QBluetoothLocalDevice(this);
connect(localDevice, SIGNAL(error(QBluetoothLocalDevice::Error)),
@@ -90,9 +90,9 @@ BtLocalDevice::BtLocalDevice(QObject *parent) :
connect(socket, SIGNAL(connected()), this, SLOT(socketConnected()));
connect(socket, SIGNAL(disconnected()), this, SLOT(socketDisconnected()));
connect(socket, SIGNAL(readyRead()), this, SLOT(readData()));
+ setSecFlags(socket->preferredSecurityFlags());
server = new QBluetoothServer(SOCKET_PROTOCOL, this);
- server->setSecurityFlags(QBluetooth::NoSecurity);
connect(server, SIGNAL(newConnection()), this, SLOT(serverNewConnection()));
connect(server, SIGNAL(error(QBluetoothServer::Error)),
this, SLOT(serverError(QBluetoothServer::Error)));
@@ -114,6 +114,21 @@ BtLocalDevice::~BtLocalDevice()
}
}
+int BtLocalDevice::secFlags() const
+{
+ return (int)securityFlags;
+}
+
+void BtLocalDevice::setSecFlags(int newFlags)
+{
+ QBluetooth::SecurityFlags fl(newFlags);
+
+ if (securityFlags != fl) {
+ securityFlags = fl;
+ emit secFlagsChanged();
+ }
+}
+
QString BtLocalDevice::hostMode() const
{
switch (localDevice->hostMode()) {
@@ -196,6 +211,20 @@ void BtLocalDevice::confirmPairing()
localDevice->pairingConfirmation(confirm);
}
+void BtLocalDevice::cycleSecurityFlags()
+{
+ if (securityFlags.testFlag(QBluetooth::Secure))
+ setSecFlags(QBluetooth::NoSecurity);
+ else if (securityFlags.testFlag(QBluetooth::Encryption))
+ setSecFlags(secFlags() | QBluetooth::Secure);
+ else if (securityFlags.testFlag(QBluetooth::Authentication))
+ setSecFlags(secFlags() | QBluetooth::Encryption);
+ else if (securityFlags.testFlag(QBluetooth::Authorization))
+ setSecFlags(secFlags() | QBluetooth::Authentication);
+ else
+ setSecFlags(secFlags() | QBluetooth::Authorization);
+}
+
void BtLocalDevice::deviceDiscovered(const QBluetoothDeviceInfo &info)
{
QString services;
@@ -371,8 +400,11 @@ void BtLocalDevice::dumpServiceDiscovery()
void BtLocalDevice::connectToService()
{
- if (socket)
+ if (socket) {
+ if (socket->preferredSecurityFlags() != securityFlags)
+ socket->setPreferredSecurityFlags(securityFlags);
socket->connectToService(QBluetoothAddress(BTCHAT_DEVICE_ADDR),QBluetoothUuid(QString(TEST_SERVICE_UUID)));
+ }
}
void BtLocalDevice::connectToServiceViaSearch()
@@ -380,6 +412,9 @@ void BtLocalDevice::connectToServiceViaSearch()
if (socket) {
qDebug() << "###### Connecting to service socket";
if (!foundTestServers.isEmpty()) {
+ if (socket->preferredSecurityFlags() != securityFlags)
+ socket->setPreferredSecurityFlags(securityFlags);
+
QBluetoothServiceInfo info = foundTestServers.at(0);
socket->connectToService(info.device().address(), QBluetoothUuid(QString(TEST_SERVICE_UUID)));
} else {
@@ -512,6 +547,12 @@ void BtLocalDevice::serverListenPort()
qDebug() << "###### Already listening" << serviceInfo.isRegistered();
return;
}
+
+ if (server->securityFlags() != securityFlags) {
+ qDebug() << "###### Setting security policy on server socket" << securityFlags;
+ server->setSecurityFlags(securityFlags);
+ }
+
qDebug() << "###### Start listening via port";
bool ret = server->listen(localDevice->address());
qDebug() << "###### Listening(Expecting TRUE):" << ret;
@@ -576,6 +617,12 @@ void BtLocalDevice::serverListenUuid()
qDebug() << "###### Already listening" << serviceInfo.isRegistered();
return;
}
+
+ if (server->securityFlags() != securityFlags) {
+ qDebug() << "###### Setting security policy on server socket" << securityFlags;
+ server->setSecurityFlags(securityFlags);
+ }
+
qDebug() << "###### Start listening via UUID";
serviceInfo = server->listen(QBluetoothUuid(QString(TEST_SERVICE_UUID)), tr("Bt Chat Server"));
qDebug() << "###### Listening(Expecting TRUE, TRUE):" << serviceInfo.isRegistered() << serviceInfo.isValid();
diff --git a/tests/bttestui/btlocaldevice.h b/tests/bttestui/btlocaldevice.h
index f3f519ca..ad64d923 100644
--- a/tests/bttestui/btlocaldevice.h
+++ b/tests/bttestui/btlocaldevice.h
@@ -48,13 +48,18 @@ public:
explicit BtLocalDevice(QObject *parent = 0);
~BtLocalDevice();
Q_PROPERTY(QString hostMode READ hostMode NOTIFY hostModeStateChanged)
+ Q_PROPERTY(int secFlags READ secFlags WRITE setSecFlags
+ NOTIFY secFlagsChanged)
+ int secFlags() const;
+ void setSecFlags(int);
QString hostMode() const;
signals:
void error(QBluetoothLocalDevice::Error error);
void hostModeStateChanged();
void socketStateUpdate(int foobar);
+ void secFlagsChanged();
public slots:
//QBluetoothLocalDevice
@@ -68,6 +73,7 @@ public slots:
void disconnected(const QBluetoothAddress &addr);
void pairingDisplayConfirmation(const QBluetoothAddress &address, const QString &pin);
void confirmPairing();
+ void cycleSecurityFlags();
//QBluetoothDeviceDiscoveryAgent
void deviceDiscovered(const QBluetoothDeviceInfo &info);
@@ -123,6 +129,7 @@ private:
QBluetoothServiceInfo serviceInfo;
QList<QBluetoothServiceInfo> foundTestServers;
+ QBluetooth::SecurityFlags securityFlags;
};
#endif // BTLOCALDEVICE_H
diff --git a/tests/bttestui/main.qml b/tests/bttestui/main.qml
index ddf55d02..caf182c3 100644
--- a/tests/bttestui/main.qml
+++ b/tests/bttestui/main.qml
@@ -90,6 +90,18 @@ Rectangle {
anchors.bottomMargin: 3
text: device.evaluateSocketState(0)
}
+ Text {
+ id: secFlagLabel; text: "SecFlags: "
+ anchors.left: parent.left
+ anchors.bottom: hostModeText.top
+ anchors.bottomMargin: 3
+ }
+ Text {
+ anchors.left: secFlagLabel.right
+ anchors.bottom: hostModeText.top
+ anchors.bottomMargin: 3
+ text: device.secFlags
+ }
Row {
anchors.top: parent.top
@@ -132,6 +144,10 @@ Rectangle {
buttonText: "Unpair"
onClicked: device.requestPairingUpdate(false)
}
+ Button {
+ buttonText: "Cycle SecFlag"
+ onClicked: device.cycleSecurityFlags()
+ }
}
Column {
spacing: 8