Skip to content

Commit

Permalink
[eclipse-wakaama#618] Fix payload_len handling
Browse files Browse the repository at this point in the history
Use size_t to store the message instead of a 16bit variable

Signed-off-by: Marc Lasch <marc.lasch@husqvarnagroup.com>
  • Loading branch information
mlasch committed Sep 27, 2021
1 parent 10d5b72 commit df98c84
Show file tree
Hide file tree
Showing 12 changed files with 65 additions and 132 deletions.
6 changes: 2 additions & 4 deletions coap/er-coap-13/er-coap-13.c
Original file line number Diff line number Diff line change
Expand Up @@ -1499,8 +1499,7 @@ coap_set_header_size(void *packet, uint32_t size)
/*-----------------------------------------------------------------------------------*/
/*- PAYLOAD -------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------*/
int
coap_get_payload(void *packet, const uint8_t **payload)
size_t coap_get_payload(void *packet, const uint8_t **payload)
{
coap_packet_t *const coap_pkt = (coap_packet_t *) packet;

Expand All @@ -1513,8 +1512,7 @@ coap_get_payload(void *packet, const uint8_t **payload)
}
}

int
coap_set_payload(void *packet, const void *payload, size_t length)
size_t coap_set_payload(void *packet, const void *payload, size_t length)
{
coap_packet_t *const coap_pkt = (coap_packet_t *) packet;

Expand Down
6 changes: 3 additions & 3 deletions coap/er-coap-13/er-coap-13.h
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ typedef struct {
multi_option_t *uri_query;
uint8_t if_none_match;

uint16_t payload_len;
size_t payload_len;
uint8_t *payload;

} coap_packet_t;
Expand Down Expand Up @@ -383,7 +383,7 @@ int coap_get_header_block(void *packet, uint32_t *num, uint8_t *more, uint16_t *
int coap_get_header_size(void *packet, uint32_t *size);
int coap_set_header_size(void *packet, uint32_t size);

int coap_get_payload(void *packet, const uint8_t **payload);
int coap_set_payload(void *packet, const void *payload, size_t length);
size_t coap_get_payload(void *packet, const uint8_t **payload);
size_t coap_set_payload(void *packet, const void *payload, size_t length);

#endif /* COAP_13_H_ */
3 changes: 1 addition & 2 deletions coap/transaction.c
Original file line number Diff line number Diff line change
Expand Up @@ -483,8 +483,7 @@ void transaction_step(lwm2m_context_t * contextP,
}
}

void transaction_set_payload(lwm2m_transaction_t * transaction, uint8_t * buffer, int length)
{
void transaction_set_payload(lwm2m_transaction_t *transaction, uint8_t *buffer, size_t length) {
transaction->payload = buffer;
transaction->payload_len = length;
const uint16_t lwm2m_coap_block_size = lwm2m_get_coap_block_size();
Expand Down
3 changes: 1 addition & 2 deletions core/internals.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ void transaction_remove(lwm2m_context_t * contextP, lwm2m_transaction_t * transa
bool transaction_handleResponse(lwm2m_context_t * contextP, void * fromSessionH, coap_packet_t * message, coap_packet_t * response);
void transaction_step(lwm2m_context_t * contextP, time_t currentTime, time_t * timeoutP);
bool transaction_free_userData(lwm2m_context_t * context, lwm2m_transaction_t * transaction);
void transaction_set_payload(lwm2m_transaction_t * transaction, uint8_t * buffer, int length);
void transaction_set_payload(lwm2m_transaction_t *transaction, uint8_t *buffer, size_t length);

// defined in management.c
uint8_t dm_handleRequest(lwm2m_context_t * contextP, lwm2m_uri_t * uriP, lwm2m_server_t * serverP, coap_packet_t * message, coap_packet_t * response);
Expand All @@ -343,7 +343,6 @@ void observe_clear(lwm2m_context_t * contextP, lwm2m_uri_t * uriP);
bool observe_handleNotify(lwm2m_context_t * contextP, void * fromSessionH, coap_packet_t * message, coap_packet_t * response);
void observe_remove(lwm2m_observation_t * observationP);
lwm2m_observed_t * observe_findByUri(lwm2m_context_t * contextP, lwm2m_uri_t * uriP);
void applyObservationCallback(lwm2m_observation_t * observation, int status, block_info_t * block_info, lwm2m_media_type_t format, uint8_t * data, int dataLength);

// defined in registration.c
uint8_t registration_handleRequest(lwm2m_context_t * contextP, lwm2m_uri_t * uriP, void * fromSessionH, coap_packet_t * message, coap_packet_t * response);
Expand Down
51 changes: 11 additions & 40 deletions core/management.c
Original file line number Diff line number Diff line change
Expand Up @@ -491,16 +491,9 @@ static void prv_resultCallback(lwm2m_context_t * contextP,
transaction_free_userData(contextP, transacP);
}

static int prv_makeOperation(lwm2m_context_t * contextP,
uint16_t clientID,
lwm2m_uri_t * uriP,
coap_method_t method,
lwm2m_media_type_t format,
uint8_t * buffer,
int length,
lwm2m_result_callback_t callback,
void * userData)
{
static int prv_makeOperation(lwm2m_context_t *contextP, uint16_t clientID, lwm2m_uri_t *uriP, coap_method_t method,
lwm2m_media_type_t format, uint8_t *buffer, size_t length,
lwm2m_result_callback_t callback, void *userData) {
lwm2m_client_t * clientP;
lwm2m_transaction_t * transaction;
dm_data_t * dataP;
Expand Down Expand Up @@ -577,17 +570,9 @@ int lwm2m_dm_read(lwm2m_context_t * contextP,
return prv_lwm2m_dm_read(contextP, clientID, uriP, callback, userData);
}

static
int prv_lwm2m_dm_write(lwm2m_context_t * contextP,
uint16_t clientID,
lwm2m_uri_t * uriP,
lwm2m_media_type_t format,
uint8_t * buffer,
int length,
bool partialUpdate,
lwm2m_result_callback_t callback,
void * userData)
{
static int prv_lwm2m_dm_write(lwm2m_context_t *contextP, uint16_t clientID, lwm2m_uri_t *uriP,
lwm2m_media_type_t format, uint8_t *buffer, size_t length, bool partialUpdate,
lwm2m_result_callback_t callback, void *userData) {
coap_method_t method = partialUpdate ? COAP_POST : COAP_PUT;

LOG_ARG("clientID: %d, format: %s, length: %d", clientID, STR_MEDIA_TYPE(format), length);
Expand All @@ -614,28 +599,14 @@ int prv_lwm2m_dm_write(lwm2m_context_t * contextP,
}
}

int lwm2m_dm_write(lwm2m_context_t * contextP,
uint16_t clientID,
lwm2m_uri_t * uriP,
lwm2m_media_type_t format,
uint8_t * buffer,
int length,
bool partialUpdate,
lwm2m_result_callback_t callback,
void * userData)
{
int lwm2m_dm_write(lwm2m_context_t *contextP, uint16_t clientID, lwm2m_uri_t *uriP, lwm2m_media_type_t format,
uint8_t *buffer, size_t length, bool partialUpdate, lwm2m_result_callback_t callback,
void *userData) {
return prv_lwm2m_dm_write(contextP, clientID, uriP, format, buffer, length, partialUpdate, callback, userData);
}

int lwm2m_dm_execute(lwm2m_context_t * contextP,
uint16_t clientID,
lwm2m_uri_t * uriP,
lwm2m_media_type_t format,
uint8_t * buffer,
int length,
lwm2m_result_callback_t callback,
void * userData)
{
int lwm2m_dm_execute(lwm2m_context_t *contextP, uint16_t clientID, lwm2m_uri_t *uriP, lwm2m_media_type_t format,
uint8_t *buffer, size_t length, lwm2m_result_callback_t callback, void *userData) {
LOG_ARG("clientID: %d, format: %s, length: %d", clientID, STR_MEDIA_TYPE(format), length);
LOG_URI(uriP);
if (!LWM2M_URI_IS_SET_RESOURCE(uriP))
Expand Down
5 changes: 4 additions & 1 deletion core/packet.c
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ static int prv_change_to_block1(lwm2m_context_t * contextP, void * sessionH, uin

transaction = prv_get_transaction(contextP, sessionH, mid);

for (int n = 1; 16 << n <= (int)size ; n++) {
for (uint16_t n = 1; 16 << n <= (uint16_t)size; n++) {
block_size = 16 << n;
}

Expand Down Expand Up @@ -473,6 +473,9 @@ void lwm2m_handle_packet(lwm2m_context_t * contextP,
static coap_packet_t response[1];

LOG("Entering");
/* The buffer length is uint16_t here, as UDP packet length field is 16 bit.
* This might change in the future e.g. for supporting TCP or other transport.
*/
coap_error_code = coap_parse_message(message, buffer, (uint16_t)length);
if (coap_error_code == NO_ERROR)
{
Expand Down
11 changes: 4 additions & 7 deletions core/registration.c
Original file line number Diff line number Diff line change
Expand Up @@ -785,7 +785,7 @@ static uint8_t prv_register(lwm2m_context_t * contextP,
coap_set_header_uri_query(transaction->message, query);
coap_set_header_content_type(transaction->message, LWM2M_CONTENT_LINK);

transaction_set_payload(transaction, payload, payload_length);
transaction_set_payload(transaction, payload, (size_t)payload_length);

registration_data_t * dataP = (registration_data_t *) lwm2m_malloc(sizeof(registration_data_t));
if (dataP == NULL){
Expand Down Expand Up @@ -894,7 +894,7 @@ static int prv_updateRegistration(lwm2m_context_t * contextP,
lwm2m_free(payload);
return COAP_500_INTERNAL_SERVER_ERROR;
}
transaction_set_payload(transaction, payload, payload_length);
transaction_set_payload(transaction, payload, (size_t)payload_length);
}

registration_data_t * dataP = (registration_data_t *) lwm2m_malloc(sizeof(registration_data_t));
Expand Down Expand Up @@ -1604,11 +1604,8 @@ static int prv_getId(uint8_t * data,
return result;
}

static lwm2m_client_object_t * prv_decodeRegisterPayload(uint8_t * payload,
uint16_t payloadLength,
lwm2m_media_type_t * format,
char ** altPath)
{
static lwm2m_client_object_t *prv_decodeRegisterPayload(uint8_t *payload, size_t payloadLength,
lwm2m_media_type_t *format, char **altPath) {
uint16_t index;
lwm2m_client_object_t * objList;
bool linkAttrFound;
Expand Down
13 changes: 3 additions & 10 deletions examples/bootstrap_server/bootstrap_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -332,16 +332,9 @@ static void prv_send_command(lwm2m_context_t *lwm2mH,
}
}

static int prv_bootstrap_callback(lwm2m_context_t * lwm2mH,
void * sessionH,
uint8_t status,
lwm2m_uri_t * uriP,
char * name,
lwm2m_media_type_t format,
uint8_t * data,
uint16_t dataLength,
void * userData)
{
static int prv_bootstrap_callback(lwm2m_context_t *lwm2mH, void *sessionH, uint8_t status, lwm2m_uri_t *uriP,
char *name, lwm2m_media_type_t format, uint8_t *data, size_t dataLength,
void *userData) {
internal_data_t * dataP = (internal_data_t *)userData;
endpoint_t * endP;

Expand Down
44 changes: 11 additions & 33 deletions examples/server/lwm2mserver.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,16 +249,9 @@ static void prv_printUri(const lwm2m_uri_t * uriP)
#endif
}

static void prv_result_callback(lwm2m_context_t *contextP,
uint16_t clientID,
lwm2m_uri_t * uriP,
int status,
block_info_t * block_info,
lwm2m_media_type_t format,
uint8_t * data,
int dataLength,
void * userData)
{
static void prv_result_callback(lwm2m_context_t *contextP, uint16_t clientID, lwm2m_uri_t *uriP, int status,
block_info_t *block_info, lwm2m_media_type_t format, uint8_t *data, size_t dataLength,
void *userData) {
/* unused parameters */
(void)contextP;
(void)userData;
Expand All @@ -275,16 +268,9 @@ static void prv_result_callback(lwm2m_context_t *contextP,
fflush(stdout);
}

static void prv_notify_callback(lwm2m_context_t *contextP,
uint16_t clientID,
lwm2m_uri_t * uriP,
int count,
block_info_t * block_info,
lwm2m_media_type_t format,
uint8_t * data,
int dataLength,
void * userData)
{
static void prv_notify_callback(lwm2m_context_t *contextP, uint16_t clientID, lwm2m_uri_t *uriP, int count,
block_info_t *block_info, lwm2m_media_type_t format, uint8_t *data, size_t dataLength,
void *userData) {
/* unused parameters */
(void)contextP;
(void)userData;
Expand Down Expand Up @@ -964,16 +950,9 @@ static void prv_cancel_client(lwm2m_context_t *lwm2mH,
fprintf(stdout, "Syntax error !");
}

static void prv_monitor_callback(lwm2m_context_t *lwm2mH,
uint16_t clientID,
lwm2m_uri_t * uriP,
int status,
block_info_t * block_info,
lwm2m_media_type_t format,
uint8_t * data,
int dataLength,
void * userData)
{
static void prv_monitor_callback(lwm2m_context_t *lwm2mH, uint16_t clientID, lwm2m_uri_t *uriP, int status,
block_info_t *block_info, lwm2m_media_type_t format, uint8_t *data, size_t dataLength,
void *userData) {
lwm2m_client_t * targetP;

/* unused parameter */
Expand Down Expand Up @@ -1010,7 +989,6 @@ static void prv_monitor_callback(lwm2m_context_t *lwm2mH,
fflush(stdout);
}


static void prv_quit(lwm2m_context_t *lwm2mH,
char * buffer,
void * user_data)
Expand Down Expand Up @@ -1209,7 +1187,7 @@ int main(int argc, char *argv[])
else if (result > 0)
{
uint8_t buffer[MAX_PACKET_SIZE];
int numBytes;
size_t numBytes;

if (FD_ISSET(sock, &readfds))
{
Expand Down Expand Up @@ -1247,7 +1225,7 @@ int main(int argc, char *argv[])
port = saddr->sin6_port;
}

fprintf(stderr, "%d bytes received from [%s]:%hu\r\n", numBytes, s, ntohs(port));
fprintf(stderr, PRIdPTR " bytes received from [%s]:%hu\r\n", numBytes, s, ntohs(port));
output_buffer(stderr, buffer, numBytes, 0);

connP = connection_find(connList, &addr, addrLen);
Expand Down
30 changes: 8 additions & 22 deletions examples/shared/commandline.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,12 +174,8 @@ static void print_indent(FILE * stream,
fprintf(stream, " ");
}

void output_buffer(FILE * stream,
const uint8_t * buffer,
int length,
int indent)
{
int i;
void output_buffer(FILE *stream, const uint8_t *buffer, size_t length, int indent) {
size_t i;

if (length == 0) fprintf(stream, "\n");

Expand Down Expand Up @@ -304,23 +300,16 @@ void output_tlv(FILE * stream,
#endif
}

void output_data(FILE * stream,
block_info_t * block_info,
lwm2m_media_type_t format,
uint8_t * data,
int dataLength,
int indent)
{
int i;

void output_data(FILE *stream, block_info_t *block_info, lwm2m_media_type_t format, uint8_t *data, size_t dataLength,
int indent) {
print_indent(stream, indent);
if (block_info != NULL) {
fprintf(stream, "block transfer: size: %d, num: %d, more: %d\n\r", block_info->block_size, block_info->block_num, block_info->block_more);
} else {
fprintf(stream, "non block transfer\n\r");
}
print_indent(stream, indent);
fprintf(stream, "%d bytes received of type ", dataLength);
fprintf(stream, PRIdPTR " bytes received of type ", dataLength);

switch (format)
{
Expand All @@ -342,8 +331,7 @@ void output_data(FILE * stream,
case LWM2M_CONTENT_JSON:
fprintf(stream, "application/vnd.oma.lwm2m+json:\r\n");
print_indent(stream, indent);
for (i = 0 ; i < dataLength ; i++)
{
for (size_t i = 0; i < dataLength; i++) {
fprintf(stream, "%c", data[i]);
}
fprintf(stream, "\n");
Expand All @@ -352,8 +340,7 @@ void output_data(FILE * stream,
case LWM2M_CONTENT_SENML_JSON:
fprintf(stream, "application/senml+json:\r\n");
print_indent(stream, indent);
for (i = 0 ; i < dataLength ; i++)
{
for (size_t i = 0; i < dataLength; i++) {
fprintf(stream, "%c", data[i]);
}
fprintf(stream, "\n");
Expand All @@ -362,8 +349,7 @@ void output_data(FILE * stream,
case LWM2M_CONTENT_LINK:
fprintf(stream, "application/link-format:\r\n");
print_indent(stream, indent);
for (i = 0 ; i < dataLength ; i++)
{
for (size_t i = 0; i < dataLength; i++) {
fprintf(stream, "%c", data[i]);
}
fprintf(stream, "\n");
Expand Down
5 changes: 3 additions & 2 deletions examples/shared/commandline.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,9 @@ char* get_end_of_arg(char* buffer);
char * get_next_arg(char * buffer, char **end);
int check_end_of_args(char* buffer);

void output_buffer(FILE * stream, const uint8_t * buffer, int length, int indent);
void output_buffer(FILE *stream, const uint8_t *buffer, size_t length, int indent);
void output_tlv(FILE * stream, uint8_t * buffer, size_t buffer_len, int indent);
void dump_tlv(FILE * stream, int size, lwm2m_data_t * dataP, int indent);
void output_data(FILE * stream, block_info_t * block_info, lwm2m_media_type_t format, uint8_t * buffer, int length, int indent);
void output_data(FILE *stream, block_info_t *block_info, lwm2m_media_type_t format, uint8_t *buffer, size_t length,
int indent);
void print_status(FILE * stream, uint8_t status);
Loading

0 comments on commit df98c84

Please sign in to comment.