diff --git a/src/stream.cpp b/src/stream.cpp index 4685b05f..29132eba 100644 --- a/src/stream.cpp +++ b/src/stream.cpp @@ -462,6 +462,9 @@ namespace stream { std::atomic state; }; + template + static inline std::string_view encode_control(session_t *session, const std::string_view &plaintext, std::array &tagged_cipher); + static void apply_session_input_policy(session_t *session, bool allow_keyboard, bool allow_mouse, bool allow_gamepad, uint8_t reason) { auto effective_keyboard = config::input.keyboard && allow_keyboard; auto effective_mouse = config::input.mouse && allow_mouse; @@ -485,13 +488,17 @@ namespace stream { return -1; } - control_set_input_policy_t plaintext; + struct control_set_input_policy_msg_t { + control_header_v2 header; + control_set_input_policy_t payload; + } plaintext; + plaintext.header.type = packetTypes[IDX_SET_INPUT_POLICY]; plaintext.header.payloadLength = sizeof(plaintext) - sizeof(control_header_v2); - plaintext.allow_keyboard = session->input_policy.allow_keyboard.load(std::memory_order_relaxed) ? 1 : 0; - plaintext.allow_mouse = session->input_policy.allow_mouse.load(std::memory_order_relaxed) ? 1 : 0; - plaintext.allow_gamepad = session->input_policy.allow_gamepad.load(std::memory_order_relaxed) ? 1 : 0; - plaintext.reason = reason; + plaintext.payload.allow_keyboard = session->input_policy.allow_keyboard.load(std::memory_order_relaxed) ? 1 : 0; + plaintext.payload.allow_mouse = session->input_policy.allow_mouse.load(std::memory_order_relaxed) ? 1 : 0; + plaintext.payload.allow_gamepad = session->input_policy.allow_gamepad.load(std::memory_order_relaxed) ? 1 : 0; + plaintext.payload.reason = reason; std::array encrypted_payload;