summaryrefslogtreecommitdiff
path: root/gatosocket.cpp
diff options
context:
space:
mode:
authorJavier <maemo@javispedro.com>2014-07-26 22:59:39 +0200
committerJavier <maemo@javispedro.com>2014-07-26 22:59:39 +0200
commite34f49ff20f2227ffca0515201e7493fd55ef64a (patch)
tree486b48932015af92c9577b6cddc88834cb839df4 /gatosocket.cpp
parentaaf7fb81d16018cac51c67443bd09e499dbf1e7e (diff)
downloadlibgato-e34f49ff20f2227ffca0515201e7493fd55ef64a.tar.gz
libgato-e34f49ff20f2227ffca0515201e7493fd55ef64a.zip
add "requireencryption" connection option (ABI broken!)
Diffstat (limited to 'gatosocket.cpp')
-rw-r--r--gatosocket.cpp38
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());