From: hyunuk.tak Date: Tue, 31 May 2022 02:33:04 +0000 (+0900) Subject: Modify to add array type for external routes dbus variant X-Git-Tag: accepted/tizen/unified/20220914.164046~22 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=70bbe19da54541847ba5635dad41bcf214239ecc;p=platform%2Fcore%2Fapi%2Fthread.git Modify to add array type for external routes dbus variant Change-Id: Iea12013151a5f6a7fe6354109f81edbed7b54940 Signed-off-by: hyunuk.tak --- diff --git a/src/thread-br.c b/src/thread-br.c index a592d72..588c3b9 100644 --- a/src/thread-br.c +++ b/src/thread-br.c @@ -95,6 +95,7 @@ static int __thread_br_get_external_route_cb(GVariant *val, THREAD_VALIDATE_INPUT_PARAMETER(callback); THREAD_VALIDATE_INPUT_PARAMETER(instance); + GVariantIter iter; uint8_t *prefix_address = NULL; uint8_t prefix_len = 0; uint16_t rloc16 = 0; @@ -105,41 +106,42 @@ static int __thread_br_get_external_route_cb(GVariant *val, thread_instance_s *current_instance = instance; THREAD_DBG("Process callback for get external route"); + g_variant_iter_init(&iter, val); - g_variant_get(val, "((ayy)qybb)", + while (g_variant_iter_next(&iter, "((ayy)qybb)", &prefix_address, &prefix_len, &rloc16, &preference, - &stable, &next_hop_is_self); - - thread_route_info_s *route_info = _create_new_route(); - - THREAD_DBG("Got the external route..."); - - THREAD_DBG("prefix_address: %02x%02x:%02x%02x:%02x%02x:%02x%02x", - prefix_address[0], prefix_address[1], prefix_address[2], - prefix_address[3], prefix_address[4], prefix_address[5], - prefix_address[6], prefix_address[7]); - - THREAD_DBG("prefix_len: %u", prefix_len); - THREAD_DBG("rloc16: %u", rloc16); - THREAD_DBG("preference: %u", preference); - THREAD_DBG("stable: %s", stable ? "TRUE" : "FALSE"); - THREAD_DBG("next_hop_is_self: %s", next_hop_is_self ? - "TRUE" : "FALSE"); - memcpy((route_info->prefix).ipv6.fields.m8, prefix_address, - THREAD_IPV6_PREFIX_SIZE*sizeof(uint8_t)); - (route_info->prefix).length = prefix_len; - route_info->preference = preference; - route_info->is_stable = stable; - route_info->rloc16 = rloc16; - route_info->is_nexthop_this_device = next_hop_is_self; - current_instance->route_list = g_slist_append( - current_instance->route_list, - route_info); - - if (callback) - (callback)(++count, (thread_route_info_h)route_info, - user_data); + &stable, &next_hop_is_self)) { + + thread_route_info_s *route_info = _create_new_route(); + + THREAD_DBG("Got the external route..."); + + THREAD_DBG("prefix_address: %02x%02x:%02x%02x:%02x%02x:%02x%02x", + prefix_address[0], prefix_address[1], prefix_address[2], + prefix_address[3], prefix_address[4], prefix_address[5], + prefix_address[6], prefix_address[7]); + + THREAD_DBG("prefix_len: %u", prefix_len); + THREAD_DBG("rloc16: %u", rloc16); + THREAD_DBG("preference: %u", preference); + THREAD_DBG("stable: %s", stable ? "TRUE" : "FALSE"); + THREAD_DBG("next_hop_is_self: %s", next_hop_is_self ? + "TRUE" : "FALSE"); + memcpy((route_info->prefix).ipv6.fields.m8, prefix_address, + THREAD_IPV6_PREFIX_SIZE*sizeof(uint8_t)); + (route_info->prefix).length = prefix_len; + route_info->preference = preference; + route_info->is_stable = stable; + route_info->rloc16 = rloc16; + route_info->is_nexthop_this_device = next_hop_is_self; + current_instance->route_list = g_slist_append( + current_instance->route_list, + route_info); + if (callback) + (callback)(++count, (thread_route_info_h)route_info, + user_data); + } THREAD_DBG("Exiting __thread_br_get_external_route_cb ..."); FUNC_EXIT; diff --git a/tests/unittest/mocks/thread-mock-dummy.cpp b/tests/unittest/mocks/thread-mock-dummy.cpp index 8e59794..ee8fd98 100644 --- a/tests/unittest/mocks/thread-mock-dummy.cpp +++ b/tests/unittest/mocks/thread-mock-dummy.cpp @@ -184,16 +184,22 @@ static GVariant *__make_external_routes_result() bool stable = TRUE; bool nextHopIsSelf = TRUE; + GVariantBuilder *externalRoutesBuilder = + g_variant_builder_new(G_VARIANT_TYPE("a((ayy)qybb)")); + GVariantBuilder *prefixBuilder = g_variant_builder_new(G_VARIANT_TYPE("ay")); __make_ipv6_prefix(prefixAddress); for (int i = 0; i < THREAD_IPV6_PREFIX_SIZE; ++i) g_variant_builder_add(prefixBuilder, "y", prefixAddress[i]); - GVariant *externalRoutesResult = g_variant_new("((ayy)qybb)", + g_variant_builder_add(externalRoutesBuilder, "((ayy)qybb)", prefixBuilder, prefixLen, rloc16, preference, stable, nextHopIsSelf); + GVariant *externalRoutesResult = g_variant_new("a((ayy)qybb)", externalRoutesBuilder); + g_variant_builder_unref(prefixBuilder); + g_variant_builder_unref(externalRoutesBuilder); return externalRoutesResult; }