From: Brian Gix Date: Wed, 11 Mar 2020 22:59:40 +0000 (-0700) Subject: tools/mesh-cfgclient: Add support for Static OOB key X-Git-Tag: accepted/tizen/unified/20200402.155610~12 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F50%2F228950%2F1;p=platform%2Fupstream%2Fbluez.git tools/mesh-cfgclient: Add support for Static OOB key This fixes a bug that didn't allow 16 octet Static OOB strings during provisioning. Change-Id: I08c04784d920b4cf4dcff0e172e9095d00be7bc7 Signed-off-by: Anupam Roy --- diff --git a/tools/mesh-cfgclient.c b/tools/mesh-cfgclient.c index 81b87e0..cfeb64a 100644 --- a/tools/mesh-cfgclient.c +++ b/tools/mesh-cfgclient.c @@ -374,12 +374,11 @@ static void agent_input_done(oob_type_t type, void *buf, uint16_t len, struct l_dbus_message *reply = NULL; struct l_dbus_message_builder *builder; uint32_t val_u32; - uint8_t ascii[16]; + uint8_t oob_data[16]; switch (type) { case NONE: case OUTPUT: - case HEXADECIMAL: default: break; @@ -388,12 +387,18 @@ static void agent_input_done(oob_type_t type, void *buf, uint16_t len, bt_shell_printf("Bad input length\n"); break; } + /* Fall Through */ - memset(ascii, 0, 16); - memcpy(ascii, buf, len); + case HEXADECIMAL: + if (len > 16) { + bt_shell_printf("Bad input length\n"); + break; + } + memset(oob_data, 0, 16); + memcpy(oob_data, buf, len); reply = l_dbus_message_new_method_return(msg); builder = l_dbus_message_builder_new(reply); - append_byte_array(builder, ascii, 16); + append_byte_array(builder, oob_data, 16); l_dbus_message_builder_finalize(builder); l_dbus_message_builder_destroy(builder); break; @@ -541,12 +546,16 @@ static struct l_dbus_message *prompt_static_call(struct l_dbus *dbus, return l_dbus_message_new_error(msg, dbus_err_fail, NULL); } - if (!strcmp(str, "in-alpha") && !strcmp(str, "out-alpha")) - return l_dbus_message_new_error(msg, dbus_err_support, NULL); - - l_dbus_message_ref(msg); - agent_input_request(ASCII, 8, "Enter displayed Ascii code", + if (!strcmp(str, "in-alpha") || !strcmp(str, "out-alpha")) { + l_dbus_message_ref(msg); + agent_input_request(ASCII, 8, "Enter displayed Ascii code", agent_input_done, msg); + } else if (!strcmp(str, "static-oob")) { + l_dbus_message_ref(msg); + agent_input_request(HEXADECIMAL, 16, "Enter Static Key", + agent_input_done, msg); + } else + return l_dbus_message_new_error(msg, dbus_err_support, NULL); return NULL; } diff --git a/tools/mesh/agent.c b/tools/mesh/agent.c index 1f83347..0258a38 100644 --- a/tools/mesh/agent.c +++ b/tools/mesh/agent.c @@ -81,15 +81,16 @@ static bool str2hex(const char *str, uint16_t in_len, uint8_t *out, static void response_hexadecimal(const char *input, void *user_data) { uint8_t buf[MAX_HEXADECIMAL_OOB_LEN]; + uint16_t len = pending_request.len; if (!str2hex(input, strlen(input), buf, pending_request.len) ) { bt_shell_printf("Incorrect input: expecting %d hex octets\n", pending_request.len); - return; + len = 0; } if (pending_request.cb) - pending_request.cb(HEXADECIMAL, buf, pending_request.len, + pending_request.cb(HEXADECIMAL, buf, len, pending_request.user_data); reset_input_request(); @@ -98,14 +99,15 @@ static void response_hexadecimal(const char *input, void *user_data) static void response_decimal(const char *input, void *user_data) { uint8_t buf[DECIMAL_OOB_LEN]; + uint16_t len = DECIMAL_OOB_LEN; if (strlen(input) > pending_request.len) - return; + len = 0; bt_put_be32(atoi(input), buf); if (pending_request.cb) - pending_request.cb(DECIMAL, buf, DECIMAL_OOB_LEN, + pending_request.cb(DECIMAL, buf, len, pending_request.user_data); reset_input_request();