summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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