Skip to content
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

Add OC_API annotations to oc_buffer_settings.h #647

Draft
wants to merge 10 commits into
base: master
Choose a base branch
from
176 changes: 176 additions & 0 deletions api/oc_buffer_settings.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
/****************************************************************************
*
* Copyright (c) 2017 Intel Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License"),
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the License.
*
****************************************************************************/

#include "oc_buffer_settings.h"
#include "port/oc_log_internal.h"
#include "util/oc_features.h"

#include <stddef.h>

#ifdef OC_DYNAMIC_ALLOCATION

#include "messaging/coap/conf.h"

#ifdef OC_INOUT_BUFFER_SIZE
static size_t _OC_MTU_SIZE = OC_INOUT_BUFFER_SIZE;
#else /* OC_INOUT_BUFFER_SIZE */
static size_t _OC_MTU_SIZE = 2048 + COAP_MAX_HEADER_SIZE;
#endif /* !OC_INOUT_BUFFER_SIZE */
#ifdef OC_APP_DATA_BUFFER_SIZE
static size_t _OC_MAX_APP_DATA_SIZE = 7168;
static size_t _OC_MIN_APP_DATA_SIZE = 7168;
#else /* OC_APP_DATA_BUFFER_SIZE */
static size_t _OC_MAX_APP_DATA_SIZE = 7168;
#ifdef OC_REP_ENCODING_REALLOC
static size_t _OC_MIN_APP_DATA_SIZE = 256;
#else /* OC_REP_ENCODING_REALLOC */
static size_t _OC_MIN_APP_DATA_SIZE = 7168;
#endif /* !OC_REP_ENCODING_REALLOC */
#endif /* !OC_APP_DATA_BUFFER_SIZE */
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Clarify application data size settings.

The initialization of _OC_MAX_APP_DATA_SIZE and _OC_MIN_APP_DATA_SIZE has some redundancy:

  • When OC_APP_DATA_BUFFER_SIZE is defined, both sizes are set to 7168.
  • When it's not defined, _OC_MAX_APP_DATA_SIZE is set to 7168, but _OC_MIN_APP_DATA_SIZE may be either 256 or 7168 based on OC_REP_ENCODING_REALLOC.

Consider refactoring this section to eliminate redundancy and improve readability. Additionally, ensure that the default sizes are appropriate for the application's requirements.

static size_t _OC_BLOCK_SIZE = 1024; // FIX
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Address the FIX comment for _OC_BLOCK_SIZE.

The line:

static size_t _OC_BLOCK_SIZE = 1024; // FIX

includes a // FIX comment. This suggests that this value or implementation needs attention. Ensure that the block size is correctly calculated or defined, and remove the temporary comment once resolved.


int
oc_set_mtu_size(size_t mtu_size)
{
(void)mtu_size;
#ifdef OC_INOUT_BUFFER_SIZE
return -1;
#else /* !OC_INOUT_BUFFER_SIZE */
#ifdef OC_BLOCK_WISE
if (mtu_size < (COAP_MAX_HEADER_SIZE + 16)) {
return -1;
}
#ifdef OC_OSCORE
_OC_MTU_SIZE = mtu_size + COAP_MAX_HEADER_SIZE;
#else /* OC_OSCORE */
_OC_MTU_SIZE = mtu_size;
#endif /* !OC_OSCORE */
mtu_size -= COAP_MAX_HEADER_SIZE;
size_t i;
for (i = 10; i >= 4 && (mtu_size >> i) == 0; i--)
;
_OC_BLOCK_SIZE = ((size_t)1) << i;
#endif /* OC_BLOCK_WISE */
return 0;
#endif /* OC_INOUT_BUFFER_SIZE */
}

long
oc_get_mtu_size(void)
{
return (long)_OC_MTU_SIZE;
}

void
oc_set_max_app_data_size(size_t size)
{
#ifdef OC_APP_DATA_BUFFER_SIZE
(void)size;
#else /* !OC_APP_DATA_BUFFER_SIZE */
_OC_MAX_APP_DATA_SIZE = size;
#ifndef OC_REP_ENCODING_REALLOC
_OC_MIN_APP_DATA_SIZE = size;
#endif /* !OC_REP_ENCODING_REALLOC */
#ifndef OC_BLOCK_WISE
_OC_BLOCK_SIZE = size;
_OC_MTU_SIZE = size + COAP_MAX_HEADER_SIZE;
#endif /* !OC_BLOCK_WISE */
#endif /* OC_APP_DATA_BUFFER_SIZE */
}

long
oc_get_max_app_data_size(void)
{
return (long)_OC_MAX_APP_DATA_SIZE;
}
Danielius1922 marked this conversation as resolved.
Show resolved Hide resolved

void
oc_set_min_app_data_size(size_t size)
{
#if defined(OC_APP_DATA_BUFFER_SIZE) || !defined(OC_REP_ENCODING_REALLOC)
(void)size;
#else /* !OC_APP_DATA_BUFFER_SIZE && !OC_REP_ENCODING_REALLOC */
_OC_MIN_APP_DATA_SIZE = size;
#endif /* OC_APP_DATA_BUFFER_SIZE || !OC_REP_ENCODING_REALLOC */
}

long
oc_get_min_app_data_size(void)
{
return (long)_OC_MIN_APP_DATA_SIZE;
}

long
oc_get_block_size(void)
{
return (long)_OC_BLOCK_SIZE;
}

#else /* !OC_DYNAMIC_ALLOCATION */

int
oc_set_mtu_size(size_t mtu_size)
{
(void)mtu_size;
OC_WRN("Dynamic memory not available");
return -1;
}

long
oc_get_mtu_size(void)
{
OC_WRN("Dynamic memory not available");
return -1;
}

void
oc_set_max_app_data_size(size_t size)
{
(void)size;
OC_WRN("Dynamic memory not available");
}

long
oc_get_max_app_data_size(void)
{
OC_WRN("Dynamic memory not available");
return -1;
}

void
oc_set_min_app_data_size(size_t size)
{
(void)size;
OC_WRN("Dynamic memory not available");
}

long
oc_get_min_app_data_size(void)
{
OC_WRN("Dynamic memory not available");
return -1;
}

long
oc_get_block_size(void)
{
OC_WRN("Dynamic memory not available");
return -1;
}
Danielius1922 marked this conversation as resolved.
Show resolved Hide resolved

#endif /* OC_DYNAMIC_ALLOCATION */
148 changes: 0 additions & 148 deletions api/oc_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,154 +98,6 @@ oc_get_factory_presets_cb(void)
return &g_factory_presets;
}

#ifdef OC_DYNAMIC_ALLOCATION
#include "oc_buffer_settings.h"
#ifdef OC_INOUT_BUFFER_SIZE
static size_t _OC_MTU_SIZE = OC_INOUT_BUFFER_SIZE;
#else /* OC_INOUT_BUFFER_SIZE */
static size_t _OC_MTU_SIZE = 2048 + COAP_MAX_HEADER_SIZE;
#endif /* !OC_INOUT_BUFFER_SIZE */
#ifdef OC_APP_DATA_BUFFER_SIZE
static size_t _OC_MAX_APP_DATA_SIZE = 7168;
static size_t _OC_MIN_APP_DATA_SIZE = 7168;
#else /* OC_APP_DATA_BUFFER_SIZE */
static size_t _OC_MAX_APP_DATA_SIZE = 7168;
#ifdef OC_REP_ENCODING_REALLOC
static size_t _OC_MIN_APP_DATA_SIZE = 256;
#else /* OC_REP_ENCODING_REALLOC */
static size_t _OC_MIN_APP_DATA_SIZE = 7168;
#endif /* !OC_REP_ENCODING_REALLOC */
#endif /* !OC_APP_DATA_BUFFER_SIZE */
static size_t _OC_BLOCK_SIZE = 1024; // FIX

int
oc_set_mtu_size(size_t mtu_size)
{
(void)mtu_size;
#ifdef OC_INOUT_BUFFER_SIZE
return -1;
#else /* !OC_INOUT_BUFFER_SIZE */
#ifdef OC_BLOCK_WISE
if (mtu_size < (COAP_MAX_HEADER_SIZE + 16)) {
return -1;
}
#ifdef OC_OSCORE
_OC_MTU_SIZE = mtu_size + COAP_MAX_HEADER_SIZE;
#else /* OC_OSCORE */
_OC_MTU_SIZE = mtu_size;
#endif /* !OC_OSCORE */
mtu_size -= COAP_MAX_HEADER_SIZE;
size_t i;
for (i = 10; i >= 4 && (mtu_size >> i) == 0; i--)
;
_OC_BLOCK_SIZE = ((size_t)1) << i;
#endif /* OC_BLOCK_WISE */
return 0;
#endif /* OC_INOUT_BUFFER_SIZE */
}

long
oc_get_mtu_size(void)
{
return (long)_OC_MTU_SIZE;
}

void
oc_set_max_app_data_size(size_t size)
{
#ifdef OC_APP_DATA_BUFFER_SIZE
(void)size;
#else /* !OC_APP_DATA_BUFFER_SIZE */
_OC_MAX_APP_DATA_SIZE = size;
#ifndef OC_REP_ENCODING_REALLOC
_OC_MIN_APP_DATA_SIZE = size;
#endif /* !OC_REP_ENCODING_REALLOC */
#ifndef OC_BLOCK_WISE
_OC_BLOCK_SIZE = size;
_OC_MTU_SIZE = size + COAP_MAX_HEADER_SIZE;
#endif /* !OC_BLOCK_WISE */
#endif /* OC_APP_DATA_BUFFER_SIZE */
}

long
oc_get_max_app_data_size(void)
{
return (long)_OC_MAX_APP_DATA_SIZE;
}

void
oc_set_min_app_data_size(size_t size)
{
#if defined(OC_APP_DATA_BUFFER_SIZE) || !defined(OC_REP_ENCODING_REALLOC)
(void)size;
#else /* !OC_APP_DATA_BUFFER_SIZE && !OC_REP_ENCODING_REALLOC */
_OC_MIN_APP_DATA_SIZE = size;
#endif /* OC_APP_DATA_BUFFER_SIZE || !OC_REP_ENCODING_REALLOC */
}

long
oc_get_min_app_data_size(void)
{
return (long)_OC_MIN_APP_DATA_SIZE;
}

long
oc_get_block_size(void)
{
return (long)_OC_BLOCK_SIZE;
}
#else /* !OC_DYNAMIC_ALLOCATION */
int
oc_set_mtu_size(size_t mtu_size)
{
(void)mtu_size;
OC_WRN("Dynamic memory not available");
return -1;
}

long
oc_get_mtu_size(void)
{
OC_WRN("Dynamic memory not available");
return -1;
}

void
oc_set_max_app_data_size(size_t size)
{
(void)size;
OC_WRN("Dynamic memory not available");
}

long
oc_get_max_app_data_size(void)
{
OC_WRN("Dynamic memory not available");
return -1;
}

void
oc_set_min_app_data_size(size_t size)
{
(void)size;
OC_WRN("Dynamic memory not available");
}

long
oc_get_min_app_data_size(void)
{
OC_WRN("Dynamic memory not available");
return -1;
}

long
oc_get_block_size(void)
{
OC_WRN("Dynamic memory not available");
return -1;
}
#endif /* OC_DYNAMIC_ALLOCATION */

static void
oc_shutdown_all_devices(void)
{
Expand Down
9 changes: 9 additions & 0 deletions include/oc_buffer_settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
#ifndef OC_BUFFER_SETTINGS_H
#define OC_BUFFER_SETTINGS_H

#include "oc_export.h"

#include <stddef.h>

#ifdef __cplusplus
Expand All @@ -33,27 +35,31 @@ extern "C" {
* @param mtu_size size in bytes
* @return int 0-success
*/
OC_API
int oc_set_mtu_size(size_t mtu_size);

/**
* @brief retrieve the currently used MTU size
*
* @return long the MTU size in bytes
*/
OC_API
long oc_get_mtu_size(void);

/**
* @brief set max application data size (e.g. buffer size of the messages)
*
* @param size size in bytes
*/
OC_API
void oc_set_max_app_data_size(size_t size);

/**
* @brief retrieve the max application data size
*
* @return long size in bytes
*/
OC_API
long oc_get_max_app_data_size(void);

/**
Expand All @@ -62,20 +68,23 @@ long oc_get_max_app_data_size(void);
*
* @param size size in bytes
*/
OC_API
void oc_set_min_app_data_size(size_t size);

/**
* @brief retrieve the min application data size
*
* @return long size in bytes
*/
OC_API
long oc_get_min_app_data_size(void);

/**
* @brief retrieve the block size
*
* @return long the block size in bytes
*/
OC_API
long oc_get_block_size(void);

#ifdef __cplusplus
Expand Down
Loading