From 12d5caf6a6af5cb4870d375e185341909fc61b7e Mon Sep 17 00:00:00 2001 From: OpenGnSys Support Team Date: Fri, 21 Jun 2024 14:10:13 +0200 Subject: rest: add retcode to shell/output Add retcode field to specify return code of shell invocation. --- src/client.c | 11 +++++++++-- src/core.c | 2 +- src/rest.c | 3 ++- src/rest.h | 5 ++++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/client.c b/src/client.c index 9989462..46baab8 100644 --- a/src/client.c +++ b/src/client.c @@ -172,6 +172,7 @@ static int og_resp_probe(struct og_client *cli, json_t *data) static int og_resp_shell_run(struct og_client *cli, json_t *data) { const char *output = NULL; + uint32_t retcode; const char *key; json_t *value; int err = -1; @@ -184,7 +185,12 @@ static int og_resp_shell_run(struct og_client *cli, json_t *data) err = og_json_parse_string(value, &output); if (err < 0) return err; + } else if (!strcmp(key, "retcode")) { + err = og_json_parse_uint(value, &retcode); + if (err < 0) + return err; } + } if (!output) { @@ -193,8 +199,9 @@ static int og_resp_shell_run(struct og_client *cli, json_t *data) return -1; } - free((void *)cli->shell_output); - cli->shell_output = strdup(output); + free((void *)cli->shell.output); + cli->shell.output = strdup(output); + cli->shell.retcode = retcode; return 0; } diff --git a/src/core.c b/src/core.c index 24fee79..eaed6bb 100644 --- a/src/core.c +++ b/src/core.c @@ -32,7 +32,7 @@ static void og_client_release(struct ev_loop *loop, struct og_client *cli) ev_timer_stop(loop, &cli->timer); ev_io_stop(loop, &cli->io); close(cli->io.fd); - free((void *)cli->shell_output); + free((void *)cli->shell.output); free(cli); } diff --git a/src/rest.c b/src/rest.c index d8bb773..e61add0 100644 --- a/src/rest.c +++ b/src/rest.c @@ -797,13 +797,14 @@ static int og_cmd_run_get(json_t *element, struct og_msg_params *params, } json_object_set_new(object, "addr", addr); - output = json_string(cli->shell_output); + output = json_string(cli->shell.output); if (!output) { json_decref(object); json_decref(array); return -1; } json_object_set_new(object, "output", output); + json_object_set_new(object, "retcode", json_integer(cli->shell.retcode)); json_array_append_new(array, object); } diff --git a/src/rest.h b/src/rest.h index 4880c6a..0fb1776 100644 --- a/src/rest.h +++ b/src/rest.h @@ -71,7 +71,10 @@ struct og_client { bool autorun; uint32_t speed; uint32_t seq; - const char *shell_output; + struct { + const char *output; + uint32_t retcode; + } shell; }; void og_client_add(struct og_client *cli); -- cgit v1.2.3-18-g5258