diff options
-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 |