1
0
mirror of https://github.com/lxsang/antd-tunnel-plugin synced 2024-11-16 09:48:21 +01:00

use network byte order in message

This commit is contained in:
Dany LE 2021-11-27 12:29:28 +01:00
parent 6a4682c571
commit 14e37aa77a
3 changed files with 28 additions and 11 deletions

View File

@ -1,5 +1,5 @@
# initialise autoconf and set up some basic information about the program were packaging # initialise autoconf and set up some basic information about the program were packaging
AC_INIT([tunnel], [0.1.1b], [xsang.le@gmail.com]) AC_INIT([tunnel], [0.1.3b], [xsang.le@gmail.com])
# Were going to use automake for this project # Were going to use automake for this project
# [subdir-objects] if needed # [subdir-objects] if needed

BIN
dist/tunnel-0.1.3b.tar.gz vendored Normal file

Binary file not shown.

View File

@ -18,6 +18,7 @@
#include <time.h> #include <time.h>
#include <fcntl.h> #include <fcntl.h>
#include <sys/time.h> #include <sys/time.h>
#include <netinet/in.h>
#define MAX_CHANNEL_NAME 64 #define MAX_CHANNEL_NAME 64
#define HOT_LINE_SOCKET "antd_hotline.sock" #define HOT_LINE_SOCKET "antd_hotline.sock"
@ -171,6 +172,7 @@ static int msg_check_number(int fd, uint16_t number)
ERROR("Unable to read integer value on socket %d: %s", fd, strerror(errno)); ERROR("Unable to read integer value on socket %d: %s", fd, strerror(errno));
return -1; return -1;
} }
value = ntohs(value);
if (number != value) if (number != value)
{ {
ERROR("Value mismatches: 0x%02X, expected 0x%02X", value, number); ERROR("Value mismatches: 0x%02X, expected 0x%02X", value, number);
@ -209,6 +211,7 @@ static uint8_t *msg_read_payload(int fd, uint32_t *size)
ERROR("Unable to read payload data size: %s", strerror(errno)); ERROR("Unable to read payload data size: %s", strerror(errno));
return NULL; return NULL;
} }
*size = ntohl(*size);
if (*size <= 0) if (*size <= 0)
{ {
return NULL; return NULL;
@ -252,11 +255,13 @@ static int msg_read(int fd, antd_tunnel_msg_t *msg)
ERROR("Unable to read msg channel id"); ERROR("Unable to read msg channel id");
return -1; return -1;
} }
msg->header.channel_id = ntohs(msg->header.channel_id);
if (guard_read(fd, &msg->header.client_id, sizeof(msg->header.client_id)) == -1) if (guard_read(fd, &msg->header.client_id, sizeof(msg->header.client_id)) == -1)
{ {
ERROR("Unable to read msg client id"); ERROR("Unable to read msg client id");
return -1; return -1;
} }
msg->header.client_id = ntohs(msg->header.client_id);
if ((msg->data = msg_read_payload(fd, &msg->header.size)) == NULL && msg->header.size != 0) if ((msg->data = msg_read_payload(fd, &msg->header.size)) == NULL && msg->header.size != 0)
{ {
ERROR("Unable to read msg payload data"); ERROR("Unable to read msg payload data");
@ -276,9 +281,11 @@ static int msg_read(int fd, antd_tunnel_msg_t *msg)
static int msg_write(int fd, antd_tunnel_msg_t *msg) static int msg_write(int fd, antd_tunnel_msg_t *msg)
{ {
uint16_t net16;
uint32_t net32;
// write begin magic number // write begin magic number
uint16_t number = MSG_MAGIC_BEGIN; net16 = htons(MSG_MAGIC_BEGIN);
if (guard_write(fd, &number, sizeof(number)) == -1) if (guard_write(fd, &net16, sizeof(net16)) == -1)
{ {
ERROR("Unable to write begin magic number: %s", strerror(errno)); ERROR("Unable to write begin magic number: %s", strerror(errno));
return -1; return -1;
@ -290,19 +297,22 @@ static int msg_write(int fd, antd_tunnel_msg_t *msg)
return -1; return -1;
} }
// write channel id // write channel id
if (guard_write(fd, &msg->header.channel_id, sizeof(msg->header.channel_id)) == -1) net16 = htons(msg->header.channel_id);
if (guard_write(fd, &net16, sizeof(msg->header.channel_id)) == -1)
{ {
ERROR("Unable to write msg channel id: %s", strerror(errno)); ERROR("Unable to write msg channel id: %s", strerror(errno));
return -1; return -1;
} }
//write client id //write client id
if (guard_write(fd, &msg->header.client_id, sizeof(msg->header.client_id)) == -1) net16 = htons(msg->header.client_id);
if (guard_write(fd, &net16, sizeof(msg->header.client_id)) == -1)
{ {
ERROR("Unable to write msg client id: %s", strerror(errno)); ERROR("Unable to write msg client id: %s", strerror(errno));
return -1; return -1;
} }
// write payload len // write payload len
if (guard_write(fd, &msg->header.size, sizeof(msg->header.size)) == -1) net32 = htonl(msg->header.size);
if (guard_write(fd, &net32, sizeof(msg->header.size)) == -1)
{ {
ERROR("Unable to write msg payload length: %s", strerror(errno)); ERROR("Unable to write msg payload length: %s", strerror(errno));
return -1; return -1;
@ -316,8 +326,8 @@ static int msg_write(int fd, antd_tunnel_msg_t *msg)
return -1; return -1;
} }
} }
number = MSG_MAGIC_END; net16 = htons(MSG_MAGIC_END);
if (guard_write(fd, &number, sizeof(number)) == -1) if (guard_write(fd, &net16, sizeof(net16)) == -1)
{ {
ERROR("Unable to write end magic number: %s", strerror(errno)); ERROR("Unable to write end magic number: %s", strerror(errno));
return -1; return -1;
@ -329,6 +339,7 @@ static int write_msg_to_client(antd_tunnel_msg_t *msg, antd_client_t *client)
uint8_t *buffer; uint8_t *buffer;
int offset = 0; int offset = 0;
int ret; int ret;
uint16_t net16;
buffer = (uint8_t *)malloc(msg->header.size + buffer = (uint8_t *)malloc(msg->header.size +
sizeof(msg->header.type) + sizeof(msg->header.type) +
sizeof(msg->header.channel_id) + sizeof(msg->header.channel_id) +
@ -342,10 +353,12 @@ static int write_msg_to_client(antd_tunnel_msg_t *msg, antd_client_t *client)
(void)memcpy(buffer, &msg->header.type, sizeof(msg->header.type)); (void)memcpy(buffer, &msg->header.type, sizeof(msg->header.type));
offset += sizeof(msg->header.type); offset += sizeof(msg->header.type);
// channel id // channel id
(void)memcpy(buffer + offset, &msg->header.channel_id, sizeof(msg->header.channel_id)); net16 = htons(msg->header.channel_id);
(void)memcpy(buffer + offset, &net16, sizeof(msg->header.channel_id));
offset += sizeof(msg->header.channel_id); offset += sizeof(msg->header.channel_id);
// client id // client id
(void)memcpy(buffer + offset, &msg->header.client_id, sizeof(msg->header.client_id)); net16 = htons(msg->header.client_id);
(void)memcpy(buffer + offset, &net16, sizeof(msg->header.client_id));
offset += sizeof(msg->header.client_id); offset += sizeof(msg->header.client_id);
// payload // payload
(void)memcpy(buffer + offset, msg->data, msg->header.size); (void)memcpy(buffer + offset, msg->data, msg->header.size);
@ -821,6 +834,7 @@ static void process_client_message(antd_tunnel_msg_t *msg, antd_client_t *client
bst_node_t *node; bst_node_t *node;
antd_tunnel_channel_t *channel; antd_tunnel_channel_t *channel;
int hash_val; int hash_val;
uint16_t net16;
// let send it to the correct channel // let send it to the correct channel
switch (msg->header.type) switch (msg->header.type)
{ {
@ -890,7 +904,8 @@ static void process_client_message(antd_tunnel_msg_t *msg, antd_client_t *client
msg->header.type = CHANNEL_OK; msg->header.type = CHANNEL_OK;
msg->header.channel_id = hash_val; msg->header.channel_id = hash_val;
msg->header.size = sizeof(g_tunnel.id_allocator); msg->header.size = sizeof(g_tunnel.id_allocator);
(void)memcpy(buff, &g_tunnel.id_allocator, sizeof(g_tunnel.id_allocator)); net16 = htons(g_tunnel.id_allocator);
(void)memcpy(buff, &net16, sizeof(g_tunnel.id_allocator));
msg->data = (uint8_t *)buff; msg->data = (uint8_t *)buff;
if (write_msg_to_client(msg, client) != 0) if (write_msg_to_client(msg, client) != 0)
{ {
@ -1147,10 +1162,12 @@ void *handle(void *rq_data)
// channel id // channel id
(void)memcpy(&msg.header.channel_id, buffer + offset, sizeof(msg.header.channel_id)); (void)memcpy(&msg.header.channel_id, buffer + offset, sizeof(msg.header.channel_id));
msg.header.channel_id = ntohs(msg.header.channel_id);
offset += sizeof(msg.header.channel_id); offset += sizeof(msg.header.channel_id);
// client id // client id
(void)memcpy(&msg.header.client_id, buffer + offset, sizeof(msg.header.client_id)); (void)memcpy(&msg.header.client_id, buffer + offset, sizeof(msg.header.client_id));
msg.header.client_id = ntohs(msg.header.client_id);
offset += sizeof(msg.header.client_id); offset += sizeof(msg.header.client_id);
if (offset > (int)ws_msg_len) if (offset > (int)ws_msg_len)