diff options
author | Alex Blasche <alexander.blasche@theqtcompany.com> | 2015-06-22 12:05:03 +0200 |
---|---|---|
committer | Alex Blasche <alexander.blasche@theqtcompany.com> | 2015-07-06 06:49:31 +0000 |
commit | 6b7b961e00c87cfbaabbbfabaf348a356558d8da (patch) | |
tree | bfc8a091638427aacd71054f9d469bdc7aa958ec | |
parent | fc5738fe8fcd9f0491834b453ef2705c31fdbe02 (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.cpp | 53 | ||||
-rw-r--r-- | tests/bttestui/btlocaldevice.h | 7 | ||||
-rw-r--r-- | tests/bttestui/main.qml | 16 |
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 |