Adjust code to tizen 7.0 67/309967/5
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Thu, 18 Apr 2024 10:45:10 +0000 (12:45 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Fri, 19 Apr 2024 14:20:57 +0000 (16:20 +0200)
Change-Id: I2f371c3fd23e7e19425ce7abb7dbec52b1c3280e

CMakeLists.txt
packaging/webauthn-ble.spec
srcs/bt_error_to_string.h
srcs/handshake.cpp
srcs/tunnel.cpp
tests/handshake_tests.cpp

index 03375bef5beed8d9546455b445257a9d3a503d0b..5ce22f7decdce6870487c1c9909c03aa6b29e6b3 100644 (file)
@@ -53,6 +53,12 @@ IF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
     ADD_DEFINITIONS("-DBUILD_TYPE_DEBUG")
 ENDIF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
 
+ # If tizen version is not provided set big enough value to always enable the latest functionality
+IF(NOT DEFINED TIZEN_VERSION)
+    SET(TIZEN_VERSION 100)
+ENDIF(NOT DEFINED TIZEN_VERSION)
+ADD_COMPILE_DEFINITIONS(TIZEN_VERSION=${TIZEN_VERSION})
+
 ################# check the installed openssl version #########################
 SET(OPENSSL_DEP openssl3)
 PKG_CHECK_MODULES(OPENSSL11_DEP openssl1.1)
index ad756c9e55e65a45df7c26565f905899d11b6d38..00642c73fbd88685652aed56278cf91c60da90f6 100644 (file)
@@ -84,7 +84,8 @@ Adaptation Layer of Web Authentication Service for BLE Authenticator (code cover
          -DVERSION_MINOR=%version_minor \
          -DVERSION_PATCH=%version_patch \
          -DBIN_DIR=%{_bindir} \
-         -DCOVERAGE_DIR=%{coverage_dir}
+         -DCOVERAGE_DIR=%{coverage_dir} \
+         -DTIZEN_VERSION=%{?tizen_version_major}%{!?tizen_version_major:100}
 
 make %{?jobs:-j%jobs}
 
index 27a132a17e6035ea6dd36a2a11e0c9f82b24239e..22938636f8fc48857b6c100b0064cfaa24c801d7 100644 (file)
@@ -47,7 +47,9 @@ inline const char *BtErrorToString(int err) noexcept
     case BT_ERROR_AGAIN: return "BT_ERROR_AGAIN";
     case BT_ERROR_SERVICE_NOT_FOUND: return "BT_ERROR_SERVICE_NOT_FOUND";
     case BT_ERROR_AUTHORIZATION_REJECTED: return "BT_ERROR_AUTHORIZATION_REJECTED";
+#if TIZEN_VERSION >= 8
     case BT_ERROR_MAX_CONNECTION: return "BT_ERROR_MAX_CONNECTION";
+#endif
     default: return "NOT Defined";
     }
 }
index 7bfdf8741e37232783672bedb48a26d0733576b1..03b70601816360cce112a2ffec62aef170d84854 100644 (file)
@@ -144,7 +144,7 @@ void Handshake::StateAssistedConnect(const std::string &tunnelServerDomain,
     url += Base64UrlEncode(contactId);
 
     auto hexClientPayload = LowercaseHexStringOf(clientPayload);
-    m_tunnel->Connect(url, ExtraHttpHeader{"X-caBLE-Client-Payload", std::move(hexClientPayload)});
+    m_tunnel->Connect(url, ExtraHttpHeader{"X-caBLE-Client-Payload:", std::move(hexClientPayload)});
 }
 
 IHandshake::HandshakeResult Handshake::DoStateAssistedHandshake(const CryptoBuffer &psk,
index 7cbeb4857e4ae58bd90e98bc7018956734f9dcc9..3121729e6b4c03f228232f306fa34a8a40fe0846 100644 (file)
@@ -125,6 +125,10 @@ void Tunnel::Connect(const std::string &url, std::optional<ExtraHttpHeader> extr
     }
 
     m_extraHttpHeader = std::move(extraHttpHeader);
+    if (m_extraHttpHeader &&
+        (m_extraHttpHeader->name.empty() || m_extraHttpHeader->name.back() != ':'))
+        THROW_UNKNOWN("Header name must end with ':'");
+
     m_connection = m_ws->ClientConnect(m_context, url);
     if (!m_connection)
         DisconnectOnError();
@@ -404,6 +408,15 @@ bool Tunnel::HandleEvent(Lws *wsi, enum lws_callback_reasons reason, void *in, s
             break;
         }
 
+        case LWS_CALLBACK_WSI_DESTROY:
+        case LWS_CALLBACK_PROTOCOL_DESTROY:
+            if (m_state == State::DISCONNECTED) {
+                LogError("Unexpected event");
+                m_state = State::FAILED;
+                return true;
+            }
+            break;
+
         default:
             LogError("Unexpected event");
             m_state = State::FAILED;
index 639da7da7c2b8ea33f75e8bc16663a5e10a88b19..3f80d4864a7567cefece6fbbce9949f78fe82fd2 100644 (file)
@@ -115,7 +115,7 @@ TEST(Handshake, StateAssistedConnect)
         auto tunnel = std::make_unique<ConnectMTunnel>(
             "wss://some.domain/cable/contact/" +
                 Base64UrlEncode(reinterpret_cast<const uint8_t *>("contact_id")),
-            ExtraHttpHeader{"X-caBLE-Client-Payload",
+            ExtraHttpHeader{"X-caBLE-Client-Payload:",
                             LowercaseHexStringOf(std::string_view{"client_payload"})});
         auto handshake = Handshake(std::move(tunnel));
         handshake.StateAssistedConnect("some.domain",
@@ -124,7 +124,7 @@ TEST(Handshake, StateAssistedConnect)
     }
     {
         auto tunnel = std::make_unique<ConnectMTunnel>(
-            "wss://a/cable/contact/Yg", ExtraHttpHeader{"X-caBLE-Client-Payload", "63"});
+            "wss://a/cable/contact/Yg", ExtraHttpHeader{"X-caBLE-Client-Payload:", "63"});
         auto handshake = Handshake(std::move(tunnel));
         handshake.StateAssistedConnect(
             "a", reinterpret_cast<const uint8_t *>("b"), reinterpret_cast<const uint8_t *>("c"));