From efb5d035b11f97f1d83302147e5f691f81439a3a Mon Sep 17 00:00:00 2001 From: Gediminas Jakutis Date: Fri, 27 Apr 2018 13:53:13 +0300 Subject: server: fix an offset error. --- src/server/main.c | 4 ++-- src/server/net.c | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) (limited to 'src/server') diff --git a/src/server/main.c b/src/server/main.c index ec096c1..5c0628a 100644 --- a/src/server/main.c +++ b/src/server/main.c @@ -113,8 +113,8 @@ static void draw_busy(const char * const data) memcpy(&sequence, data + 2, sizeof(sequence)); memcpy(&thermistor_data, data + 6, sizeof(thermistor_data)); temp = digest_temp(thermistor_data); - memcpy(&thermistor_data, data + 10, sizeof(thermistor_data)); - memcpy(&voltage, data + 12, sizeof(voltage)); + memcpy(&thermistor_data, data + 8, sizeof(thermistor_data)); + memcpy(&voltage, data + 10, sizeof(voltage)); move(0, 0); clrtoeol(); diff --git a/src/server/net.c b/src/server/net.c index 5441be4..1325da0 100644 --- a/src/server/net.c +++ b/src/server/net.c @@ -37,7 +37,7 @@ struct netstate_internal { }; static int dolisten(char * const data, struct netstate_internal * const state); -static int getpacket(char *data, size_t buffsize, int sock, struct sockaddr_in *sender); +static int getpacket(char *data, size_t buffsize, ssize_t *recvbufsize, int sock, struct sockaddr_in *sender); static int getlastdata_internal(char * const data, struct netstate * const state); struct netstate *net_init(const unsigned int port) @@ -78,11 +78,12 @@ static int dolisten(char * const data, struct netstate_internal * const state) struct timespec wait = {0, 25 * 1000 * 1000}; struct sockaddr_in clientaddr; size_t i = 10; + ssize_t recvbufsize; int ret; do { clock_gettime(CLOCK_MONOTONIC_RAW, &now); - ret = getpacket(buff, sizeof(buff), state->sock, &clientaddr); + ret = getpacket(buff, sizeof(buff), &recvbufsize, state->sock, &clientaddr); switch (ret) { case NET_OK: @@ -95,7 +96,7 @@ static int dolisten(char * const data, struct netstate_internal * const state) ret = NET_NONEWDATA; /* consume packet and lie about it */ continue; } else { - memcpy(data, buff, 14); + memcpy(data, buff, recvbufsize); } break; default: @@ -115,7 +116,7 @@ static int dolisten(char * const data, struct netstate_internal * const state) return ret; } -static int getpacket(char *data, size_t buffsize, int sock, struct sockaddr_in *sender) +static int getpacket(char *data, size_t buffsize, ssize_t *recvbufsize, int sock, struct sockaddr_in *sender) { static struct pollfd pfd = {0}; int ret; @@ -133,7 +134,7 @@ static int getpacket(char *data, size_t buffsize, int sock, struct sockaddr_in * } else if (!ret) { ret = NET_NONEWDATA; } else if (pfd.revents & POLLIN) { - recvfrom(sock, data, buffsize, MSG_DONTWAIT, (struct sockaddr *) sender, &sender_len); + *recvbufsize = recvfrom(sock, data, buffsize, MSG_DONTWAIT, (struct sockaddr *) sender, &sender_len); ret = NET_OK; } else { ret = NET_NONEWDATA; -- cgit v1.2.3