diff --git a/api/cloud/oc_cloud_context.c b/api/cloud/oc_cloud_context.c index 0eb23831c..1bcb3fe4c 100644 --- a/api/cloud/oc_cloud_context.c +++ b/api/cloud/oc_cloud_context.c @@ -307,7 +307,9 @@ oc_cloud_registration_context_init(oc_cloud_registration_context_t *regctx, // limit the number of server changes to the number of servers at startup // minus one (since the initial address is already used) size_t server_count = oc_endpoint_addresses_size(servers); - regctx->remaining_server_changes = server_count > 0 ? server_count - 1 : 0; + assert(server_count <= UINT8_MAX); + regctx->remaining_server_changes = + (uint8_t)(server_count > 0 ? server_count - 1 : 0); regctx->server_changed = false; } diff --git a/swig/swig_interfaces/oc_cloud.i b/swig/swig_interfaces/oc_cloud.i index a7fc6a322..30241111f 100644 --- a/swig/swig_interfaces/oc_cloud.i +++ b/swig/swig_interfaces/oc_cloud.i @@ -712,6 +712,11 @@ void jni_cloud_context_clear(oc_cloud_context_t *ctx, bool dump_async) %ignore cloud_context_has_permanent_access_token; %ignore cloud_context_clear_access_token; %ignore cloud_context_has_refresh_token; + +%ignore oc_cloud_registration_context_t; +%ignore oc_cloud_registration_context_init; +%ignore oc_cloud_registration_context_deinit; +%ignore oc_cloud_context_t::registration_ctx; %include "api/cloud/oc_cloud_context_internal.h" %ignore oc_cloud_add_server_address; diff --git a/swig/swig_interfaces/oc_endpoint_address.i b/swig/swig_interfaces/oc_endpoint_address.i index 1d3398e13..19dbb9788 100644 --- a/swig/swig_interfaces/oc_endpoint_address.i +++ b/swig/swig_interfaces/oc_endpoint_address.i @@ -32,6 +32,7 @@ %ignore oc_endpoint_address_metadata_t; %ignore oc_endpoint_address_metadata_view_t; %ignore oc_endpoint_address_view_t; +%ignore oc_endpoint_address_view; %ignore oc_endpoint_address_make_view_with_uuid; %ignore oc_endpoint_address_make_view_with_name; @@ -87,6 +88,11 @@ /*******************Begin oc_endpoint_address_internal.h****************************/ +%ignore oc_endpoint_address_metadata_type_t; +%ignore oc_endpoint_address_encode; +%ignore on_selected_endpoint_address_change_fn_t; +%ignore oc_endpoint_addresses_on_selected_change_t; + %ignore oc_endpoint_addresses_t; %ignore oc_endpoint_addresses_init; %ignore oc_endpoint_addresses_deinit; @@ -104,11 +110,13 @@ %ignore oc_endpoint_addresses_select_by_uri; %ignore oc_endpoint_addresses_select_next; %ignore oc_endpoint_addresses_is_selected; +%ignore oc_endpoint_addresses_selected; %ignore oc_endpoint_addresses_selected_uri; %ignore oc_endpoint_addresses_selected_uuid; %ignore oc_endpoint_addresses_selected_name; %ignore oc_endpoint_addresses_encode; - +%ignore oc_endpoint_addresses_set_on_selected_change; +%ignore oc_endpoint_addresses_get_on_selected_change; %include "util/oc_endpoint_address_internal.h" diff --git a/util/oc_endpoint_address.c b/util/oc_endpoint_address.c index cc658c7ff..5fff016ad 100644 --- a/util/oc_endpoint_address.c +++ b/util/oc_endpoint_address.c @@ -256,7 +256,7 @@ oc_endpoint_addresses_reinit(oc_endpoint_addresses_t *eas, } void -oc_endpoint_adddresses_set_on_selected_change( +oc_endpoint_addresses_set_on_selected_change( oc_endpoint_addresses_t *eas, on_selected_endpoint_address_change_fn_t cb, void *data) { diff --git a/util/oc_endpoint_address_internal.h b/util/oc_endpoint_address_internal.h index 93223a7fb..c7ddfb64a 100644 --- a/util/oc_endpoint_address_internal.h +++ b/util/oc_endpoint_address_internal.h @@ -143,7 +143,7 @@ bool oc_endpoint_addresses_reinit(oc_endpoint_addresses_t *eas, OC_NONNULL(1); /** Set the callback invoked when the selected endpoint address changes */ -void oc_endpoint_adddresses_set_on_selected_change( +void oc_endpoint_addresses_set_on_selected_change( oc_endpoint_addresses_t *eas, on_selected_endpoint_address_change_fn_t cb, void *data) OC_NONNULL(1, 2); diff --git a/util/unittest/endpoint_address_test.cpp b/util/unittest/endpoint_address_test.cpp index 5b6394edc..986c9c3ff 100644 --- a/util/unittest/endpoint_address_test.cpp +++ b/util/unittest/endpoint_address_test.cpp @@ -378,7 +378,16 @@ TEST_F(TestEndpointAddresses, Select) { oc_endpoint_addresses_t &ea{ getAddresses() }; + auto on_selected_change = oc_endpoint_addresses_get_on_selected_change(&ea); + ASSERT_EQ(nullptr, on_selected_change.cb); + ASSERT_EQ(nullptr, on_selected_change.cb_data); + bool selected_changed = false; + oc_endpoint_addresses_set_on_selected_change( + &ea, [](void *data) { *static_cast(data) = true; }, + &selected_changed); + oc_endpoint_addresses_select_next(&ea); + EXPECT_FALSE(selected_changed); auto *selected_addr = oc_endpoint_addresses_selected_uri(&ea); EXPECT_EQ(nullptr, selected_addr); auto *selected_uuid = oc_endpoint_addresses_selected_uuid(&ea); @@ -395,6 +404,7 @@ TEST_F(TestEndpointAddresses, Select) // when adding to an empty list, the first added item is automatically // selected + EXPECT_TRUE(selected_changed); EXPECT_TRUE(oc_endpoint_addresses_is_selected(&ea, uri1)); selected_addr = oc_endpoint_addresses_selected_uri(&ea); ASSERT_NE(nullptr, selected_addr); @@ -407,8 +417,10 @@ TEST_F(TestEndpointAddresses, Select) ASSERT_EQ(nullptr, selected_name); // non-existing URI shouldn't change the selection + selected_changed = false; EXPECT_FALSE( oc_endpoint_addresses_select_by_uri(&ea, OC_STRING_VIEW("/fail"))); + EXPECT_FALSE(selected_changed); EXPECT_FALSE(oc_endpoint_addresses_is_selected(&ea, OC_STRING_VIEW("/fail"))); EXPECT_TRUE(oc_endpoint_addresses_is_selected(&ea, uri1)); selected_addr = oc_endpoint_addresses_selected_uri(&ea); @@ -453,10 +465,14 @@ TEST_F(TestEndpointAddresses, Select) EXPECT_STREQ(name3.data, oc_string(*selected_name)); // rotate back to uri1 + selected_changed = false; oc_endpoint_addresses_select_next(&ea); + EXPECT_TRUE(selected_changed); #else /* !OC_DYNAMIC_ALLOCATION */ // the list has a single element, so the selection should stay at uri1 + selected_changed = false; oc_endpoint_addresses_select_next(&ea); + EXPECT_FALSE(selected_changed); #endif /* OC_DYNAMIC_ALLOCATION */ EXPECT_TRUE(oc_endpoint_addresses_is_selected(&ea, uri1));