diff options
Diffstat (limited to 'gatosocket.cpp')
-rw-r--r-- | gatosocket.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/gatosocket.cpp b/gatosocket.cpp index e814e8c..73567b5 100644 --- a/gatosocket.cpp +++ b/gatosocket.cpp @@ -126,6 +126,11 @@ GatoSocket::SecurityLevel GatoSocket::securityLevel() const bt_security bt_sec; socklen_t len = sizeof(bt_sec); + if (s == StateDisconnected) { + qWarning() << "Socket not connected"; + return SecurityNone; + } + if (::getsockopt(fd, SOL_BLUETOOTH, BT_SECURITY, &bt_sec, &len) == 0) { switch (bt_sec.level) { case BT_SECURITY_SDP: @@ -144,6 +149,39 @@ GatoSocket::SecurityLevel GatoSocket::securityLevel() const return SecurityNone; } +bool GatoSocket::setSecurityLevel(SecurityLevel level) +{ + bt_security bt_sec; + socklen_t len = sizeof(bt_sec); + + if (s == StateDisconnected) { + qWarning() << "Socket not connected"; + return SecurityNone; + } + + switch (level) { + case SecurityNone: + case SecurityLow: + bt_sec.level = BT_SECURITY_LOW; + break; + case SecurityMedium: + bt_sec.level = BT_SECURITY_MEDIUM; + break; + case SecurityHigh: + // Will this even work in BT LE? + bt_sec.level = BT_SECURITY_HIGH; + break; + } + bt_sec.key_size = 0; + + if (::setsockopt(fd, SOL_BLUETOOTH, BT_SECURITY, &bt_sec, len) == 0) { + return true; + } else { + qErrnoWarning("Could not set security level in L2 socket"); + return false; + } +} + bool GatoSocket::transmit(const QByteArray &pkt) { int written = ::write(fd, pkt.constData(), pkt.size()); |