Modify to add array type for external routes dbus variant 71/276671/1
authorhyunuk.tak <hyunuk.tak@samsung.com>
Tue, 31 May 2022 02:33:04 +0000 (11:33 +0900)
committerhyunuk.tak <hyunuk.tak@samsung.com>
Thu, 23 Jun 2022 02:22:23 +0000 (11:22 +0900)
Change-Id: Iea12013151a5f6a7fe6354109f81edbed7b54940
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
src/thread-br.c
tests/unittest/mocks/thread-mock-dummy.cpp

index a592d72..588c3b9 100644 (file)
@@ -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;
index 8e59794..ee8fd98 100644 (file)
@@ -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;
 }