1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

Merge pull request #9305 from haukepetersen/opt_emcute_usebyteorder

net/emcute: use global byteorder functions
This commit is contained in:
Cenk Gündoğan 2018-06-07 12:23:14 +02:00 committed by GitHub
commit 5ab519c7fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -24,6 +24,7 @@
#include "mutex.h"
#include "sched.h"
#include "xtimer.h"
#include "byteorder.h"
#include "thread_flags.h"
#include "net/emcute.h"
@ -59,26 +60,6 @@ static volatile uint8_t waiton = 0xff;
static volatile uint16_t waitonid = 0;
static volatile int result;
static inline uint16_t get_u16(const uint8_t *buf)
{
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
return (uint16_t)((buf[0] << 8) | buf[1]);
#else
return (uint16_t)((buf[1] << 8) | buf[0]);
#endif
}
static inline void set_u16(uint8_t *buf, uint16_t val)
{
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
buf[0] = (uint8_t)(val >> 8);
buf[1] = (uint8_t)(val & 0xff);
#else
buf[0] = (uint8_t)(val & 0xff);
buf[1] = (uint8_t)(val >> 8);
#endif
}
static size_t set_len(uint8_t *buf, size_t len)
{
if (len < (0xff - 7)) {
@ -87,7 +68,7 @@ static size_t set_len(uint8_t *buf, size_t len)
}
else {
buf[0] = 0x01;
set_u16(&tbuf[1], (uint16_t)(len + 3));
byteorder_htolebufs(&tbuf[1], (uint16_t)(len + 3));
return 3;
}
}
@ -99,7 +80,7 @@ static size_t get_len(uint8_t *buf, uint16_t *len)
return 1;
}
else {
*len = get_u16(&buf[1]);
*len = byteorder_lebuftohs(&buf[1]);
return 3;
}
}
@ -151,12 +132,13 @@ static void on_disconnect(void)
static void on_ack(uint8_t type, int id_pos, int ret_pos, int res_pos)
{
if ((waiton == type) && (!id_pos || (waitonid == get_u16(&rbuf[id_pos])))) {
if ((waiton == type) &&
(!id_pos || (waitonid == byteorder_lebuftohs(&rbuf[id_pos])))) {
if (!ret_pos || (rbuf[ret_pos] == ACCEPT)) {
if (res_pos == 0) {
result = EMCUTE_OK;
} else {
result = (int)get_u16(&rbuf[res_pos]);
result = (int)byteorder_lebuftohs(&rbuf[res_pos]);
}
} else {
result = EMCUTE_REJECT;
@ -173,7 +155,7 @@ static void on_publish(size_t len, size_t pos)
}
emcute_sub_t *sub;
uint16_t tid = get_u16(&rbuf[pos + 2]);
uint16_t tid = byteorder_lebuftohs(&rbuf[pos + 2]);
/* allocate a response packet */
uint8_t buf[7] = { 7, PUBACK, 0, 0, 0, 0, ACCEPT };
@ -255,7 +237,7 @@ int emcute_con(sock_udp_ep_t *remote, bool clean, const char *will_topic,
tbuf[1] = CONNECT;
tbuf[2] = flags;
tbuf[3] = PROTOCOL_VERSION;
set_u16(&tbuf[4], EMCUTE_KEEPALIVE);
byteorder_htolebufs(&tbuf[4], EMCUTE_KEEPALIVE);
memcpy(&tbuf[6], cli_id, strlen(cli_id));
/* configure 'state machine' and send the connection request */
@ -329,8 +311,8 @@ int emcute_reg(emcute_topic_t *topic)
tbuf[0] = (strlen(topic->name) + 6);
tbuf[1] = REGISTER;
set_u16(&tbuf[2], 0);
set_u16(&tbuf[4], id_next);
byteorder_htolebufs(&tbuf[2], 0);
byteorder_htolebufs(&tbuf[4], id_next);
waitonid = id_next++;
memcpy(&tbuf[6], topic->name, strlen(topic->name));
@ -365,9 +347,9 @@ int emcute_pub(emcute_topic_t *topic, const void *data, size_t len,
len += (pos + 6);
tbuf[pos++] = PUBLISH;
tbuf[pos++] = flags;
set_u16(&tbuf[pos], topic->id);
byteorder_htolebufs(&tbuf[pos], topic->id);
pos += 2;
set_u16(&tbuf[pos], id_next);
byteorder_htolebufs(&tbuf[pos], id_next);
waitonid = id_next++;
pos += 2;
memcpy(&tbuf[pos], data, len);
@ -399,7 +381,7 @@ int emcute_sub(emcute_sub_t *sub, unsigned flags)
tbuf[0] = (strlen(sub->topic.name) + 5);
tbuf[1] = SUBSCRIBE;
tbuf[2] = flags;
set_u16(&tbuf[3], id_next);
byteorder_htolebufs(&tbuf[3], id_next);
waitonid = id_next++;
memcpy(&tbuf[5], sub->topic.name, strlen(sub->topic.name));
@ -435,7 +417,7 @@ int emcute_unsub(emcute_sub_t *sub)
tbuf[0] = (strlen(sub->topic.name) + 5);
tbuf[1] = UNSUBSCRIBE;
tbuf[2] = 0;
set_u16(&tbuf[3], id_next);
byteorder_htolebufs(&tbuf[3], id_next);
waitonid = id_next++;
memcpy(&tbuf[5], sub->topic.name, strlen(sub->topic.name));