summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlex Blasche <alexander.blasche@theqtcompany.com>2015-06-23 17:24:27 +0200
committerAlex Blasche <alexander.blasche@theqtcompany.com>2015-07-07 14:11:11 +0000
commit5549e27b92385f72a9fc28ec60e5eb70689aa3bc (patch)
tree2eeaf3fc540e41cf1d7c764cc7a4a26f38d1cb49 /src
parent69201947082eddf07f8eaf82bff11d4067e0f89a (diff)
Android: Apply QBluetoothSocket::preferredSecurityFlags during connect
This patch permits Android clients to choose the security level before connecting to the server. This may also used by some older devices (Android 4.1 or lower) to connect if they don't support the so far predetermined secure way of connecting via rfcomm. Task-number: QTBUG-46377 Change-Id: I3f72f183e7ead16bec57a0ce83e9a96324675312 Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/bluetooth/qbluetoothsocket_android.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/bluetooth/qbluetoothsocket_android.cpp b/src/bluetooth/qbluetoothsocket_android.cpp
index 3c526eca..1a5f70b0 100644
--- a/src/bluetooth/qbluetoothsocket_android.cpp
+++ b/src/bluetooth/qbluetoothsocket_android.cpp
@@ -258,11 +258,22 @@ bool QBluetoothSocketPrivate::fallBackConnect(QAndroidJniObject uuid, int channe
}
}
- QAndroidJniObject method = remoteDeviceClass.callObjectMethod(
+ QAndroidJniObject method;
+ if (secFlags == QBluetooth::NoSecurity) {
+ qCDebug(QT_BT_ANDROID) << "Connnecting via insecure rfcomm";
+ method = remoteDeviceClass.callObjectMethod(
+ "getMethod",
+ "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;",
+ QAndroidJniObject::fromString(QLatin1String("createInsecureRfcommSocket")).object<jstring>(),
+ paramTypes.object<jobjectArray>());
+ } else {
+ qCDebug(QT_BT_ANDROID) << "Connnecting via secure rfcomm";
+ method = remoteDeviceClass.callObjectMethod(
"getMethod",
"(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;",
QAndroidJniObject::fromString(QLatin1String("createRfcommSocket")).object<jstring>(),
paramTypes.object<jobjectArray>());
+ }
if (!method.isValid() || env->ExceptionCheck()) {
qCWarning(QT_BT_ANDROID) << "Could not invoke getMethod";
if (env->ExceptionCheck()) {
@@ -372,9 +383,17 @@ void QBluetoothSocketPrivate::connectToService(const QBluetoothAddress &address,
"(Ljava/lang/String;)Ljava/util/UUID;",
inputString.object<jstring>());
- socketObject = remoteDevice.callObjectMethod("createRfcommSocketToServiceRecord",
+ if (secFlags == QBluetooth::NoSecurity) {
+ qCDebug(QT_BT_ANDROID) << "Connnecting via insecure rfcomm";
+ socketObject = remoteDevice.callObjectMethod("createInsecureRfcommSocketToServiceRecord",
"(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;",
uuidObject.object<jobject>());
+ } else {
+ qCDebug(QT_BT_ANDROID) << "Connnecting via secure rfcomm";
+ socketObject = remoteDevice.callObjectMethod("createRfcommSocketToServiceRecord",
+ "(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;",
+ uuidObject.object<jobject>());
+ }
if (env->ExceptionCheck()) {
env->ExceptionDescribe();