diff options
-rw-r--r-- | src/client.c | 11 | ||||
-rw-r--r-- | src/core.c | 2 | ||||
-rw-r--r-- | src/rest.c | 3 | ||||
-rw-r--r-- | 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; } @@ -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); } @@ -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); } @@ -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); |