From b6d48ea5d51f09c6dd91a9f64f8e46bafab19a2a Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Tue, 23 Aug 2022 23:01:32 +0200 Subject: cmd -> msg This I feel better conveys the meaning. --- src/CMakeLists.txt | 4 +- src/client.c | 6 +- src/cmd.c | 192 ----------------------------------------------------- src/cmd.h | 21 ------ src/msg.c | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/msg.h | 21 ++++++ src/server.c | 10 +-- 7 files changed, 223 insertions(+), 223 deletions(-) delete mode 100644 src/cmd.c delete mode 100644 src/cmd.h create mode 100644 src/msg.c create mode 100644 src/msg.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 61fdfa6..dcf1ba1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -12,5 +12,5 @@ add_compile_definitions(_GNU_SOURCE) add_compile_definitions(VERSION="${PROJECT_VERSION}") -add_executable(server server_main.c server.c cmd.c net.c) -add_executable(client client_main.c client.c cmd.c net.c) +add_executable(server server_main.c server.c msg.c net.c) +add_executable(client client_main.c client.c msg.c net.c) diff --git a/src/client.c b/src/client.c index 644cb13..0391784 100644 --- a/src/client.c +++ b/src/client.c @@ -1,5 +1,5 @@ #include "client.h" -#include "cmd.h" +#include "msg.h" #include "net.h" #include @@ -21,9 +21,9 @@ void client_destroy(const struct client *client) int client_main(const struct client *client, int argc, char *argv[]) { int result, ret = 0; - struct cmd cmd = {argc, argv}; + struct msg msg = {argc, argv}; - ret = cmd_send_and_wait_for_result(client->fd, &cmd, &result); + ret = msg_send_and_wait_for_result(client->fd, &msg, &result); if (ret < 0) return ret; diff --git a/src/cmd.c b/src/cmd.c deleted file mode 100644 index 3a235db..0000000 --- a/src/cmd.c +++ /dev/null @@ -1,192 +0,0 @@ -#include "cmd.h" -#include "log.h" -#include "net.h" - -#include -#include - -int cmd_from_argv(struct cmd *cmd, const char *argv[]) -{ - int argc = 0; - - for (const char **s = argv; *s; ++s) - ++argc; - - cmd->argc = argc; - cmd->argv = calloc(argc, sizeof(char *)); - - if (!cmd->argv) { - print_errno("calloc"); - return -1; - } - - for (int i = 0; i < argc; ++i) { - cmd->argv[i] = strdup(argv[i]); - if (!cmd->argv[i]) { - print_errno("strdup"); - goto free; - } - } - - return 0; - -free: - for (int i = 0; i < argc; ++i) - if (cmd->argv[i]) - free(cmd->argv[i]); - else - break; - - free(cmd->argv); - return -1; -} - -static size_t calc_buf_len(int argc, char **argv) -{ - size_t len = 0; - for (int i = 0; i < argc; ++i) - len += strlen(argv[i]) + 1; - return len; -} - -static int calc_arr_len(const void *buf, size_t len) -{ - int argc = 0; - for (const char *it = buf; it < (const char *)buf + len; it += strlen(it) + 1) - ++argc; - return argc; -} - -static void arr_pack(char *dest, int argc, char **argv) -{ - for (int i = 0; i < argc; ++i) { - strcpy(dest, argv[i]); - dest += strlen(argv[i]) + 1; - } -} - -static int arr_unpack(char **argv, int argc, const char *src) -{ - for (int i = 0; i < argc; ++i) { - size_t len = strlen(src); - - argv[i] = malloc(len); - if (!argv[i]) { - print_errno("malloc"); - goto free; - } - - strcpy(argv[i], src); - src += len + 1; - } - - return 0; - -free: - for (int i = 0; i < argc; ++i) - if (argv[i]) - free(argv[i]); - else - break; - - return -1; -} - -int cmd_send(int fd, const struct cmd *cmd) -{ - int ret = 0; - - size_t len = calc_buf_len(cmd->argc, cmd->argv); - char *buf = malloc(len); - if (!buf) { - print_errno("malloc"); - return -1; - } - arr_pack(buf, cmd->argc, cmd->argv); - - ret = send_buf(fd, buf, len); - if (ret < 0) - goto free_buf; - -free_buf: - free(buf); - - return ret; -} - -int cmd_send_and_wait_for_result(int fd, const struct cmd *cmd, int *result) -{ - int ret = 0; - - ret = cmd_send(fd, cmd); - if (ret < 0) - return ret; - - ret = recv_static(fd, result, sizeof(*result)); - if (ret < 0) - return ret; - - return ret; -} - -int cmd_recv(int fd, struct cmd *cmd) -{ - void *buf; - size_t len; - int ret = 0; - - ret = recv_buf(fd, &buf, &len); - if (ret < 0) - return ret; - - cmd->argc = calc_arr_len(buf, len); - cmd->argv = calloc(cmd->argc, sizeof(char *)); - if (!cmd->argv) { - print_errno("calloc"); - ret = -1; - goto free_buf; - } - - ret = arr_unpack(cmd->argv, cmd->argc, buf); - if (ret < 0) - goto free_argv; - - goto free_buf; - -free_argv: - free(cmd->argv); - -free_buf: - free(buf); - - return ret; -} - -int cmd_recv_and_send_result(int fd, cmd_handler handler, void *arg) -{ - struct cmd cmd; - int result; - int ret = 0; - - ret = cmd_recv(fd, &cmd); - if (ret < 0) - return ret; - - result = handler(&cmd, arg); - - ret = send_buf(fd, &result, sizeof(result)); - if (ret < 0) - goto free_cmd; - -free_cmd: - cmd_free(&cmd); - - return ret; -} - -void cmd_free(const struct cmd *cmd) -{ - for (int i = 0; i < cmd->argc; ++i) - free(cmd->argv[i]); - free(cmd->argv); -} diff --git a/src/cmd.h b/src/cmd.h deleted file mode 100644 index 9f519f6..0000000 --- a/src/cmd.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __CMD_H__ -#define __CMD_H__ - -struct cmd { - int argc; - char **argv; -}; - -int cmd_from_argv(struct cmd *, const char *argv[]); - -int cmd_send(int fd, const struct cmd *); -int cmd_send_and_wait_for_result(int fd, const struct cmd *, int *result); - -typedef int (*cmd_handler)(const struct cmd *, void *arg); - -int cmd_recv(int fd, struct cmd *); -int cmd_recv_and_send_result(int fd, cmd_handler, void *arg); - -void cmd_free(const struct cmd *); - -#endif diff --git a/src/msg.c b/src/msg.c new file mode 100644 index 0000000..ba6c474 --- /dev/null +++ b/src/msg.c @@ -0,0 +1,192 @@ +#include "msg.h" +#include "log.h" +#include "net.h" + +#include +#include + +int msg_from_argv(struct msg *msg, const char *argv[]) +{ + int argc = 0; + + for (const char **s = argv; *s; ++s) + ++argc; + + msg->argc = argc; + msg->argv = calloc(argc, sizeof(char *)); + + if (!msg->argv) { + print_errno("calloc"); + return -1; + } + + for (int i = 0; i < argc; ++i) { + msg->argv[i] = strdup(argv[i]); + if (!msg->argv[i]) { + print_errno("strdup"); + goto free; + } + } + + return 0; + +free: + for (int i = 0; i < argc; ++i) + if (msg->argv[i]) + free(msg->argv[i]); + else + break; + + free(msg->argv); + return -1; +} + +static size_t calc_buf_len(int argc, char **argv) +{ + size_t len = 0; + for (int i = 0; i < argc; ++i) + len += strlen(argv[i]) + 1; + return len; +} + +static int calc_arr_len(const void *buf, size_t len) +{ + int argc = 0; + for (const char *it = buf; it < (const char *)buf + len; it += strlen(it) + 1) + ++argc; + return argc; +} + +static void arr_pack(char *dest, int argc, char **argv) +{ + for (int i = 0; i < argc; ++i) { + strcpy(dest, argv[i]); + dest += strlen(argv[i]) + 1; + } +} + +static int arr_unpack(char **argv, int argc, const char *src) +{ + for (int i = 0; i < argc; ++i) { + size_t len = strlen(src); + + argv[i] = malloc(len); + if (!argv[i]) { + print_errno("malloc"); + goto free; + } + + strcpy(argv[i], src); + src += len + 1; + } + + return 0; + +free: + for (int i = 0; i < argc; ++i) + if (argv[i]) + free(argv[i]); + else + break; + + return -1; +} + +int msg_send(int fd, const struct msg *msg) +{ + int ret = 0; + + size_t len = calc_buf_len(msg->argc, msg->argv); + char *buf = malloc(len); + if (!buf) { + print_errno("malloc"); + return -1; + } + arr_pack(buf, msg->argc, msg->argv); + + ret = send_buf(fd, buf, len); + if (ret < 0) + goto free_buf; + +free_buf: + free(buf); + + return ret; +} + +int msg_send_and_wait_for_result(int fd, const struct msg *msg, int *result) +{ + int ret = 0; + + ret = msg_send(fd, msg); + if (ret < 0) + return ret; + + ret = recv_static(fd, result, sizeof(*result)); + if (ret < 0) + return ret; + + return ret; +} + +int msg_recv(int fd, struct msg *msg) +{ + void *buf; + size_t len; + int ret = 0; + + ret = recv_buf(fd, &buf, &len); + if (ret < 0) + return ret; + + msg->argc = calc_arr_len(buf, len); + msg->argv = calloc(msg->argc, sizeof(char *)); + if (!msg->argv) { + print_errno("calloc"); + ret = -1; + goto free_buf; + } + + ret = arr_unpack(msg->argv, msg->argc, buf); + if (ret < 0) + goto free_argv; + + goto free_buf; + +free_argv: + free(msg->argv); + +free_buf: + free(buf); + + return ret; +} + +int msg_recv_and_send_result(int fd, msg_handler handler, void *arg) +{ + struct msg msg; + int result; + int ret = 0; + + ret = msg_recv(fd, &msg); + if (ret < 0) + return ret; + + result = handler(&msg, arg); + + ret = send_buf(fd, &result, sizeof(result)); + if (ret < 0) + goto free_msg; + +free_msg: + msg_free(&msg); + + return ret; +} + +void msg_free(const struct msg *msg) +{ + for (int i = 0; i < msg->argc; ++i) + free(msg->argv[i]); + free(msg->argv); +} diff --git a/src/msg.h b/src/msg.h new file mode 100644 index 0000000..028aaa0 --- /dev/null +++ b/src/msg.h @@ -0,0 +1,21 @@ +#ifndef __MSG_H__ +#define __MSG_H__ + +struct msg { + int argc; + char **argv; +}; + +int msg_from_argv(struct msg *, const char *argv[]); + +int msg_send(int fd, const struct msg *); +int msg_send_and_wait_for_result(int fd, const struct msg *, int *result); + +typedef int (*msg_handler)(const struct msg *, void *arg); + +int msg_recv(int fd, struct msg *); +int msg_recv_and_send_result(int fd, msg_handler, void *arg); + +void msg_free(const struct msg *); + +#endif diff --git a/src/server.c b/src/server.c index 91f3924..035adbe 100644 --- a/src/server.c +++ b/src/server.c @@ -1,5 +1,5 @@ #include "server.h" -#include "cmd.h" +#include "msg.h" #include "net.h" #include @@ -19,16 +19,16 @@ void server_destroy(const struct server *server) close(server->fd); } -static int cmd_handle(const struct cmd *cmd, void *) +static int msg_handle(const struct msg *msg, void *) { - for (int i = 0; i < cmd->argc; ++i) - printf("cmd[%d]: %s\n", i, cmd->argv[i]); + for (int i = 0; i < msg->argc; ++i) + printf("msg[%d]: %s\n", i, msg->argv[i]); return 0; } static int server_handle(int fd, void *) { - return cmd_recv_and_send_result(fd, cmd_handle, NULL); + return msg_recv_and_send_result(fd, msg_handle, NULL); } static int server_accept(const struct server *server) -- cgit v1.2.3