8000 Refactor /oic/p resource by Danielius1922 · Pull Request #562 · iotivity/iotivity-lite · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Refactor /oic/p resource #562

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Nov 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions api/cloud/unittest/rd_client_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -422,10 +422,10 @@ TEST_F(TestRDClient, DeleteIterateLinks_PartialBuffer)
buffer.resize(query.length() + 1);

std::vector<oc_link_t *> deleted{};
int count = 0;
int invoke_count = 0;
oc_link_t *to_delete = link_p;
oc_link_t *not_deleted = nullptr;
while (count < 2) {
while (invoke_count < 2) {
rd_links_partition_t partition{};
rd_delete_result_t result = rd_delete_fill_and_send_single_packet(
to_delete, &s_endpoint, OC_STRING_VIEW("id"), &buffer[0], buffer.size(),
Expand All @@ -435,8 +435,8 @@ TEST_F(TestRDClient, DeleteIterateLinks_PartialBuffer)
// allow first packet to be sent
return (*count == 1);
},
&count, &partition);
if (count == 2) {
&invoke_count, &partition);
if (invoke_count == 2) {
ASSERT_EQ(RD_DELETE_ERROR, result);
break;
}
Expand Down
130 changes: 38 additions & 92 deletions api/oc_core_res.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
****************************************************************************/

#include "api/oc_con_resource_internal.h"
#include "api/oc_platform_internal.h"
#include "messaging/coap/oc_coap.h"
#include "oc_api.h"
#include "oc_core_res.h"
Expand Down Expand Up @@ -81,12 +82,6 @@ static oc_resource_t g_core_resources[OC_NUM_CORE_PLATFORM_RESOURCES +
OC_MAX_NUM_DEVICES)] = { 0 };
static oc_device_info_t g_oc_device_info[OC_MAX_NUM_DEVICES] = { 0 };
#endif /* !OC_DYNAMIC_ALLOCATION */
static oc_platform_info_t g_oc_platform_info = {
.pi = { { 0 } },
.mfg_name = { 0 },
.init_platform_cb = NULL,
.data = NULL,
};

static int g_res_latency = 0;
static OC_ATOMIC_UINT32_T g_device_count = 0;
Expand All @@ -110,12 +105,6 @@ oc_core_init(void)
#endif /* OC_DYNAMIC_ALLOCATION */
}

static void
oc_core_free_platform_info_properties(void)
{
oc_free_string(&(g_oc_platform_info.mfg_name));
}

static void
oc_core_free_device_info_properties(oc_device_info_t *oc_device_info_item)
{
Expand All @@ -129,7 +118,7 @@ oc_core_free_device_info_properties(oc_device_info_t *oc_device_info_item)
void
oc_core_shutdown(void)
{
oc_core_free_platform_info_properties();
oc_platform_deinit();

uint32_t device_count = OC_ATOMIC_LOAD32(g_device_count);
#ifdef OC_DYNAMIC_ALLOCATION
Expand Down Expand Up @@ -447,73 +436,27 @@ oc_device_bind_resource_type(size_t device, const char *type)
oc_device_bind_rt(device, type);
}

static void
oc_core_platform_handler(oc_request_t *request, oc_interface_mask_t iface_mask,
void *data)
void
oc_store_uri(const char *s_uri, oc_string_t *d_uri)
{
(void)data;
oc_rep_start_root_object();

char pi[OC_UUID_LEN];
oc_uuid_to_str(&g_oc_platform_info.pi, pi, OC_UUID_LEN);

switch (iface_mask) {
case OC_IF_BASELINE:
oc_process_baseline_interface(request->resource);
OC_FALLTHROUGH;
case OC_IF_R: {
oc_rep_set_text_string(root, pi, pi);
oc_rep_set_text_string(root, mnmn, oc_string(g_oc_platform_info.mfg_name));
if (g_oc_platform_info.init_platform_cb) {
g_oc_platform_info.init_platform_cb(g_oc_platform_info.data);
}
} break;
default:
break;
size_t s_len = oc_strnlen(s_uri, OC_MAX_STRING_LENGTH);
if (s_len >= OC_MAX_STRING_LENGTH) {
OC_ERR("Invalid URI");
return;
}

oc_rep_end_root_object();
oc_send_response_with_callback(request, OC_STATUS_OK, true);
}
oc_platform_info_t *
oc_core_init_platform(const char *mfg_name, oc_core_init_platform_cb_t init_cb,
void *data)
{
if (g_oc_platform_info.mfg_name.size > 0) {
return &g_oc_platform_info;
if (s_uri[0] == '/') {
oc_set_string(d_uri, s_uri, s_len);
return;
}

/* Populating resource object */
int properties = OC_DISCOVERABLE;
#ifdef OC_CLOUD
properties |= OC_OBSERVABLE;
#endif /* OC_CLOUD */
oc_core_populate_resource(OCF_P, 0, "oic/p", OC_IF_R | OC_IF_BASELINE,
OC_IF_R, properties, oc_core_platform_handler, 0, 0,
0, 1, "oic.wk.p");

oc_gen_uuid(&g_oc_platform_info.pi);

oc_new_string(&g_oc_platform_info.mfg_name, mfg_name, strlen(mfg_name));
g_oc_platform_info.init_platform_cb = init_cb;
g_oc_platform_info.data = data;

return &g_oc_platform_info;
}

void
oc_store_uri(const char *s_uri, oc_string_t *d_uri)
{
size_t s_len = strlen(s_uri);
if (s_uri[0] != '/') {
oc_alloc_string(d_uri, s_len + 2);
memcpy(oc_string(*d_uri) + 1, s_uri, s_len);
(oc_string(*d_uri))[0] = '/';
(oc_string(*d_uri))[s_len + 1] = '\0';
} else {
oc_new_string(d_uri, s_uri, s_len);
}
oc_string_t uri;
oc_alloc_string(&uri, s_len + 2);
memcpy(oc_string(uri) + 1, s_uri, s_len);
(oc_string(uri))[0] = '/';
(oc_string(uri))[s_len + 1] = '\0';
oc_new_string(d_uri, oc_string(uri), oc_string_len(uri));
oc_free_string(&uri);
}

static oc_resource_t *
Expand Down Expand Up @@ -561,7 +504,9 @@ oc_core_populate_resource(int core_resource, size_t device_index,
{
oc_resource_t *r =
core_get_resource_memory_by_index(core_resource, device_index);
if (!r) {
if (r == NULL) {
OC_ERR("Could not find resource(type:%d device:%zu)", core_resource,
device_index);
return;
}
r->device = device_index;
Expand Down Expand Up @@ -603,12 +548,6 @@ oc_core_get_device_info(size_t device)
return &g_oc_device_info[device];
}

oc_platform_info_t *
oc_core_get_platform_info(void)
{
return &g_oc_platform_info;
}

#ifdef OC_SECURITY
bool
oc_core_is_SVR(const oc_resource_t *resource, size_t device)
Expand All @@ -632,17 +571,26 @@ oc_core_is_SVR(const oc_resource_t *resource, size_t device)
}
#endif /* OC_SECURITY */

static bool
core_is_platform_resource(const oc_resource_t *resource)
{
for (size_t i = 0; i < OCF_CON; ++i) {
if (resource == &g_core_resources[i]) {
return true;
}
}
return false;
}

bool
oc_co 1E0A re_is_vertical_resource(const oc_resource_t *resource, size_t device)
{
if (resource == NULL) {
return false;
}

for (size_t i = 0; i < OCF_CON; ++i) {
if (resource == &g_core_resources[i]) {
return true;
}
if (core_is_platform_resource(resource)) {
return true;
}

if (!device_is_valid(device)) {
Expand All @@ -668,10 +616,8 @@ oc_core_is_DCR(const oc_resource_t *resource, size_t device)
return false;
}

for (size_t i = 0; i < OCF_CON; ++i) {
if (resource == &g_core_resources[i]) {
return true;
}
if (core_is_platform_resource(resource)) {
return true;
}

if (!device_is_valid(device)) {
Expand Down Expand Up @@ -719,8 +665,8 @@ core_is_resource_uri(const char *uri, size_t uri_len, const char *r_uri,
int
oc_core_get_resource_type_by_uri(const char *uri, size_t uri_len)
{
if (core_is_resource_uri(uri, uri_len, "/oic/p",
OC_CHAR_ARRAY_LEN("/oic/p"))) {
if (core_is_resource_uri(uri, uri_len, OCF_PLATFORM_URI,
OC_CHAR_ARRAY_LEN(OCF_PLATFORM_URI))) {
return OCF_P;
}
if (core_is_resource_uri(uri, uri_len, OCF_D_URI,
Expand Down
11 changes: 0 additions & 11 deletions api/oc_core_res_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,6 @@ void oc_core_init(void);
*/
void oc_core_shutdown(void);

/**
* @brief initialize the platform
*
* @param mfg_name the manufactorer name (cannot be NULL)
* @param init_cb the callback
* @param data the user data
* @return oc_platform_info_t* the platform information
*/
oc_platform_info_t *oc_core_init_platform(const char *mfg_name,
oc_core_init_platform_cb_t init_cb,
void *data) OC_NONNULL(1);
/**
* @brief Add new device to the platform
*
Expand Down
9 changes: 4 additions & 5 deletions api/oc_helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ oc_set_string(oc_string_t *dst, const char *str, size_t str_len)
{
assert(dst != NULL);

if (str == NULL || str_len == 0) {
if (str == NULL) {
oc_free_string(dst);
memset(dst, 0, sizeof(*dst));
return;
Expand Down Expand Up @@ -191,12 +191,11 @@ oc_copy_string(oc_string_t *dst, const oc_string_t *src)
return;
}

oc_free_string(dst);
if (src == NULL || oc_string(*src) == NULL) {
memset(dst, 0, sizeof(*dst));
if (src == NULL) {
oc_set_string(dst, NULL, 0);
return;
}
oc_new_string(dst, oc_string(*src), oc_string_len(*src));
oc_set_string(dst, oc_string(*src), oc_string_len(*src));
}

void
Expand Down
3 changes: 3 additions & 0 deletions api/oc_introspection.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,9 @@ introspection_data_handler_crc(oc_request_t *request)
if (ret <= 0) {
OC_ERR("cannot encode introspection data: failed to read data(error=%ld)",
ret);
#ifdef OC_DYNAMIC_ALLOCATION
free(idd_data);
#endif /* OC_DYNAMIC_ALLOCATION */
return;
}
crc = oc_crc64(0, idd_data, (size_t)ret);
Expand Down
Loading
0