From 56bb116ab97281b53131b6b59f6924b109368c6b Mon Sep 17 00:00:00 2001 From: damage Date: Sun, 21 Jan 2024 13:14:47 +0100 Subject: [PATCH] less magic numbers and generic send function --- command.c | 2 +- network.c | 36 ++++++++++++++++++------------------ network.h | 11 ++++++++--- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/command.c b/command.c index bb20b28..de35055 100644 --- a/command.c +++ b/command.c @@ -20,7 +20,7 @@ int main(int argc, char *argv[]) { } // send payload - if (sendCommand(xPlaneSocket, argv[1]) < 0) { + if (sendToXPlane(xPlaneSocket, "CMND", argv[1]) < 0) { exit(EXIT_FAILURE); } diff --git a/network.c b/network.c index 7f4d38e..0fdcff5 100644 --- a/network.c +++ b/network.c @@ -12,31 +12,31 @@ #include "network.h" -char* printable(char *str) { - char *ret = strdup(str); +const int DGRAM_MSG_START = 0; +const int DGRAM_PAYLOAD_START = DGRAM_MSG_START + DGRAM_MSG_LENGTH + DGRAM_NULL_LENGTH; - for (int i = strlen(ret); i >= 0; i--) { - if (ret[i] == '\r' || ret[i] == '\n') { - ret[i] = '\0'; - } +int sendToXPlane(int sock, char *msg, char *payload) { + char bytesToSend[SEND_BUFFER]; + memset(bytesToSend, 0, SEND_BUFFER); + + // msg is always 4 bytes long + if (strlen(msg) != DGRAM_MSG_LENGTH) { + return -10; } - return ret; -} + // payload shouldn't exceed buffer + if (strlen(payload) > (SEND_BUFFER - DGRAM_MSG_LENGTH - DGRAM_NULL_LENGTH)) { + return -11; + } -int sendCommand(int sock, char *cmd) { - char bytesToSend[COMMAND_BUFFER]; - memset(bytesToSend, 0, COMMAND_BUFFER); + strcpy(&bytesToSend[DGRAM_MSG_START], msg); + strcpy(&bytesToSend[DGRAM_PAYLOAD_START], payload); - strcpy(&bytesToSend[0], "CMND"); - strcpy(&bytesToSend[5], cmd); - - int numBytesSend = send(sock, bytesToSend, 5 + strlen(cmd), 0); + int numBytesSend = send(sock, bytesToSend, DGRAM_MSG_LENGTH + DGRAM_NULL_LENGTH + strlen(payload), 0); if (numBytesSend >= 0) { - //printf("Send %d bytes to %s:%d: %s\n", numBytesSend, SERVER, PORT, printable(bytesToSend)); return numBytesSend; } else { - fprintf(stderr, "Failed to send message to %s:%d (%d): %s", SERVER, PORT, errno, strerror(errno)); + fprintf(stderr, "Failed to send message (%d): %s", errno, strerror(errno)); return -1; } } @@ -62,7 +62,7 @@ int connectXPlane(char *addr, int port) { // connect to xPlane err = connect(xPlaneSocket, (struct sockaddr *)&xPlaneAddress, sizeof(xPlaneAddress)); if (err) { - fprintf(stderr, "Error connecting %s:%d (%d): %s\n", SERVER, PORT, err, gai_strerror(err)); + fprintf(stderr, "Error connecting %s:%d (%d): %s\n", addr, port, err, gai_strerror(err)); return -1; } diff --git a/network.h b/network.h index 5b80f1f..5bb6047 100644 --- a/network.h +++ b/network.h @@ -1,9 +1,14 @@ #define SERVER "::1" #define PORT 49000 -#define COMMAND_BUFFER 256 +#define SEND_BUFFER 256 -char* printable(char *str); -int sendCommand(int sock, char *cmd); +#define DGRAM_MSG_LENGTH 4 +#define DGRAM_NULL_LENGTH 1 + +extern const int DGRAM_MSG_START; +extern const int DGRAM_PAYLOAD_START; + +int sendToXPlane(int sock, char *msg, char *payload); int connectXPlane(char *addr, int port); int disconnectXPlane(int sock);