A tiny bit more compact and straightforward?
This commit is contained in:
parent
9e92c2b05b
commit
af4299f155
4 changed files with 62 additions and 92 deletions
|
@ -16,8 +16,6 @@ static int answer_phone_version_message(skipstone_message_service *service,
|
|||
1, 0xff, 0xff, 0xff, 0xff, 0x80, 0, 0, 0, 0, 0, 0, 0x32
|
||||
};
|
||||
|
||||
printf("Got message on endpoint %hu\n", id);
|
||||
|
||||
skipstone_message_service_queue(service, &response, sizeof(response), id);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -16,8 +16,6 @@ static int answer_phone_version_message(skipstone_message_service *service,
|
|||
1, 0xff, 0xff, 0xff, 0xff, 0x80, 0, 0, 0, 0, 0, 0, 0x32
|
||||
};
|
||||
|
||||
printf("Got message on endpoint %hu\n", id);
|
||||
|
||||
skipstone_message_service_queue(service, &response, sizeof(response), id);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -6,15 +6,7 @@
|
|||
#include <skipstone/queue.h>
|
||||
#include <skipstone/message.h>
|
||||
|
||||
enum part_type {
|
||||
SKIPSTONE_MESSAGE_PART_STRING,
|
||||
SKIPSTONE_MESSAGE_PART_UINT8,
|
||||
SKIPSTONE_MESSAGE_PART_UINT16
|
||||
};
|
||||
|
||||
struct part {
|
||||
enum part_type type;
|
||||
enum skipstone_message_endianness endianness;
|
||||
uint8_t size;
|
||||
};
|
||||
|
||||
|
@ -56,16 +48,13 @@ error_malloc_message:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static int append_part(skipstone_message *message,
|
||||
void *buf, uint8_t size, enum part_type type) {
|
||||
static int append_part(skipstone_message *message, void *buf, uint8_t size) {
|
||||
struct part *part;
|
||||
|
||||
if ((part = malloc(sizeof(*part) + size)) == NULL) {
|
||||
goto error_malloc_part;
|
||||
}
|
||||
|
||||
part->type = type;
|
||||
part->endianness = SKIPSTONE_MESSAGE_ENDIAN_LITTLE;
|
||||
part->size = size;
|
||||
|
||||
memcpy(part + 1, buf, size);
|
||||
|
@ -85,17 +74,35 @@ error_malloc_part:
|
|||
|
||||
int skipstone_message_append_string(skipstone_message *message,
|
||||
char *string, uint8_t size) {
|
||||
if (append_part(message, string, size, SKIPSTONE_MESSAGE_PART_STRING) < 0) {
|
||||
return -1;
|
||||
struct part *part;
|
||||
uint8_t bodysz = sizeof(size) + size;
|
||||
|
||||
if ((part = malloc(sizeof(*part) + bodysz)) == NULL) {
|
||||
goto error_malloc_part;
|
||||
}
|
||||
|
||||
message->size += sizeof(size) + size;
|
||||
part->size = bodysz;
|
||||
|
||||
memcpy(part + 1, &size, sizeof(size));
|
||||
memcpy(((uint8_t *)(part + 1)) + sizeof(size), string, size);
|
||||
|
||||
if (skipstone_queue_add(message->parts, part) < 0) {
|
||||
goto error_queue_add_part;
|
||||
}
|
||||
|
||||
message->size += bodysz;
|
||||
|
||||
return 0;
|
||||
|
||||
error_queue_add_part:
|
||||
free(part);
|
||||
|
||||
error_malloc_part:
|
||||
return -1;
|
||||
}
|
||||
|
||||
int skipstone_message_append_uint8(skipstone_message *message, uint8_t value) {
|
||||
if (append_part(message, &value, sizeof(value), SKIPSTONE_MESSAGE_PART_UINT8) < 0) {
|
||||
if (append_part(message, &value, sizeof(value)) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -105,7 +112,7 @@ int skipstone_message_append_uint8(skipstone_message *message, uint8_t value) {
|
|||
}
|
||||
|
||||
int skipstone_message_append_uint16(skipstone_message *message, uint16_t value) {
|
||||
if (append_part(message, &value, sizeof(value), SKIPSTONE_MESSAGE_PART_UINT16) < 0) {
|
||||
if (append_part(message, &value, sizeof(value)) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -120,34 +127,14 @@ int skipstone_message_pack(skipstone_message *message,
|
|||
|
||||
struct part *part;
|
||||
|
||||
if (message->size > SKIPSTONE_MESSAGE_MAX_PAYLOAD) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (skipstone_queue_remove(message->parts, (void **)&part)) {
|
||||
switch (part->type) {
|
||||
case SKIPSTONE_MESSAGE_PART_STRING: {
|
||||
((uint8_t *)buf)[offset] = part->size;
|
||||
memcpy(((uint8_t *)buf) + offset, part + 1, part->size);
|
||||
|
||||
memcpy((uint8_t *)buf + offset + sizeof(uint8_t), part + 1, part->size);
|
||||
|
||||
offset += sizeof(uint8_t) + part->size;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case SKIPSTONE_MESSAGE_PART_UINT8: {
|
||||
((uint8_t *)buf)[offset] = ((uint8_t *)(part + 1))[0];
|
||||
|
||||
offset += sizeof(uint8_t);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case SKIPSTONE_MESSAGE_PART_UINT16: {
|
||||
((uint16_t *)((uint8_t *)buf + offset))[0] = ((uint16_t *)(part + 1))[0];
|
||||
|
||||
offset += sizeof(uint16_t);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
offset += part->size;
|
||||
}
|
||||
|
||||
*size = offset;
|
||||
|
|
|
@ -6,15 +6,7 @@
|
|||
#include <skipstone/queue.h>
|
||||
#include <skipstone/message.h>
|
||||
|
||||
enum part_type {
|
||||
SKIPSTONE_MESSAGE_PART_STRING,
|
||||
SKIPSTONE_MESSAGE_PART_UINT8,
|
||||
SKIPSTONE_MESSAGE_PART_UINT16
|
||||
};
|
||||
|
||||
struct part {
|
||||
enum part_type type;
|
||||
enum skipstone_message_endianness endianness;
|
||||
uint8_t size;
|
||||
};
|
||||
|
||||
|
@ -56,16 +48,13 @@ error_malloc_message:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static int append_part(skipstone_message *message,
|
||||
void *buf, uint8_t size, enum part_type type) {
|
||||
static int append_part(skipstone_message *message, void *buf, uint8_t size) {
|
||||
struct part *part;
|
||||
|
||||
if ((part = malloc(sizeof(*part) + size)) == NULL) {
|
||||
goto error_malloc_part;
|
||||
}
|
||||
|
||||
part->type = type;
|
||||
part->endianness = SKIPSTONE_MESSAGE_ENDIAN_LITTLE;
|
||||
part->size = size;
|
||||
|
||||
memcpy(part + 1, buf, size);
|
||||
|
@ -85,17 +74,35 @@ error_malloc_part:
|
|||
|
||||
int skipstone_message_append_string(skipstone_message *message,
|
||||
char *string, uint8_t size) {
|
||||
if (append_part(message, string, size, SKIPSTONE_MESSAGE_PART_STRING) < 0) {
|
||||
return -1;
|
||||
struct part *part;
|
||||
uint8_t bodysz = sizeof(size) + size;
|
||||
|
||||
if ((part = malloc(sizeof(*part) + bodysz)) == NULL) {
|
||||
goto error_malloc_part;
|
||||
}
|
||||
|
||||
message->size += sizeof(size) + size;
|
||||
part->size = bodysz;
|
||||
|
||||
memcpy(part + 1, &size, sizeof(size));
|
||||
memcpy(((uint8_t *)(part + 1)) + sizeof(size), string, size);
|
||||
|
||||
if (skipstone_queue_add(message->parts, part) < 0) {
|
||||
goto error_queue_add_part;
|
||||
}
|
||||
|
||||
message->size += bodysz;
|
||||
|
||||
return 0;
|
||||
|
||||
error_queue_add_part:
|
||||
free(part);
|
||||
|
||||
error_malloc_part:
|
||||
return -1;
|
||||
}
|
||||
|
||||
int skipstone_message_append_uint8(skipstone_message *message, uint8_t value) {
|
||||
if (append_part(message, &value, sizeof(value), SKIPSTONE_MESSAGE_PART_UINT8) < 0) {
|
||||
if (append_part(message, &value, sizeof(value)) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -105,7 +112,7 @@ int skipstone_message_append_uint8(skipstone_message *message, uint8_t value) {
|
|||
}
|
||||
|
||||
int skipstone_message_append_uint16(skipstone_message *message, uint16_t value) {
|
||||
if (append_part(message, &value, sizeof(value), SKIPSTONE_MESSAGE_PART_UINT16) < 0) {
|
||||
if (append_part(message, &value, sizeof(value)) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -120,34 +127,14 @@ int skipstone_message_pack(skipstone_message *message,
|
|||
|
||||
struct part *part;
|
||||
|
||||
if (message->size > SKIPSTONE_MESSAGE_MAX_PAYLOAD) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (skipstone_queue_remove(message->parts, (void **)&part)) {
|
||||
switch (part->type) {
|
||||
case SKIPSTONE_MESSAGE_PART_STRING: {
|
||||
((uint8_t *)buf)[offset] = part->size;
|
||||
memcpy(((uint8_t *)buf) + offset, part + 1, part->size);
|
||||
|
||||
memcpy((uint8_t *)buf + offset + sizeof(uint8_t), part + 1, part->size);
|
||||
|
||||
offset += sizeof(uint8_t) + part->size;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case SKIPSTONE_MESSAGE_PART_UINT8: {
|
||||
((uint8_t *)buf)[offset] = ((uint8_t *)(part + 1))[0];
|
||||
|
||||
offset += sizeof(uint8_t);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case SKIPSTONE_MESSAGE_PART_UINT16: {
|
||||
((uint16_t *)((uint8_t *)buf + offset))[0] = ((uint16_t *)(part + 1))[0];
|
||||
|
||||
offset += sizeof(uint16_t);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
offset += part->size;
|
||||
}
|
||||
|
||||
*size = offset;
|
||||
|
|
Loading…
Add table
Reference in a new issue