diff options
Diffstat (limited to '')
-rw-r--r-- | src/command.c | 41 |
1 files changed, 7 insertions, 34 deletions
diff --git a/src/command.c b/src/command.c index 5d6aa19..47280fe 100644 --- a/src/command.c +++ b/src/command.c @@ -145,9 +145,8 @@ static struct cmd_conn_ctx *make_conn_ctx(int fd, void *arg) return ctx; } -int cmd_dispatcher_handle_conn(int conn_fd, void *_dispatcher) +static int cmd_dispatcher_handle_conn_internal(int conn_fd, struct cmd_dispatcher *dispatcher) { - struct cmd_dispatcher *dispatcher = (struct cmd_dispatcher *)_dispatcher; struct msg *request = NULL, *response = NULL; int ret = 0; @@ -181,44 +180,18 @@ free_ctx: return ret; } +int cmd_dispatcher_handle_conn(int conn_fd, void *_dispatcher) +{ + return cmd_dispatcher_handle_conn_internal(conn_fd, (struct cmd_dispatcher *)_dispatcher); +} + int cmd_dispatcher_handle_event(UNUSED struct event_loop *loop, int fd, short revents, void *_dispatcher) { - struct cmd_dispatcher *dispatcher = (struct cmd_dispatcher *)_dispatcher; - struct msg *request = NULL, *response = NULL; - int ret = 0; - if (!(revents & POLLIN)) { log_err("Descriptor %d is not readable\n", fd); return -1; } - struct cmd_conn_ctx *new_ctx = make_conn_ctx(fd, dispatcher->ctx); - if (!new_ctx) - return -1; - - ret = msg_recv(fd, &request); - if (ret < 0) - goto free_ctx; - - ret = cmd_dispatcher_handle_internal(dispatcher, request, &response, new_ctx); - if (ret < 0) - goto free_response; - - if (response) { - ret = msg_send(fd, response); - if (ret < 0) - goto free_response; - } - -free_response: - if (response) - msg_free(response); - - msg_free(request); - -free_ctx: - free(new_ctx); - - return ret; + return cmd_dispatcher_handle_conn_internal(fd, (struct cmd_dispatcher *)_dispatcher); } |