| 59 | } |
| 60 | |
| 61 | static struct command_result *reckless_result(struct io_conn *conn, |
| 62 | struct reckless *reckless) |
| 63 | { |
| 64 | struct json_stream *response; |
| 65 | if (reckless->process_failed) { |
| 66 | response = jsonrpc_stream_fail(reckless->cmd, |
| 67 | PLUGIN_ERROR, |
| 68 | reckless->process_failed); |
| 69 | return command_finished(reckless->cmd, response); |
| 70 | } |
| 71 | const jsmntok_t *results, *result, *logs, *log; |
| 72 | size_t i; |
| 73 | jsmn_parser parser; |
| 74 | jsmntok_t *toks; |
| 75 | toks = tal_arr(reckless, jsmntok_t, 5000); |
| 76 | jsmn_init(&parser); |
| 77 | int res; |
| 78 | res = jsmn_parse(&parser, reckless->stdoutbuf, |
| 79 | strlen(reckless->stdoutbuf), toks, tal_count(toks)); |
| 80 | const char *err; |
| 81 | if (res == JSMN_ERROR_INVAL) |
| 82 | err = tal_fmt(tmpctx, "reckless returned invalid character in json " |
| 83 | "output"); |
| 84 | else if (res == JSMN_ERROR_PART) |
| 85 | err = tal_fmt(tmpctx, "reckless returned partial output"); |
| 86 | else if (res == JSMN_ERROR_NOMEM ) |
| 87 | err = tal_fmt(tmpctx, "insufficient tokens to parse " |
| 88 | "reckless output."); |
| 89 | else |
| 90 | err = NULL; |
| 91 | |
| 92 | if (err) { |
| 93 | plugin_log(plugin, LOG_UNUSUAL, "failed to parse json: %s", err); |
| 94 | response = jsonrpc_stream_fail(reckless->cmd, PLUGIN_ERROR, |
| 95 | err); |
| 96 | return command_finished(reckless->cmd, response); |
| 97 | } |
| 98 | |
| 99 | response = jsonrpc_stream_success(reckless->cmd); |
| 100 | json_array_start(response, "result"); |
| 101 | results = json_get_member(reckless->stdoutbuf, toks, "result"); |
| 102 | json_for_each_arr(i, result, results) { |
| 103 | json_add_string(response, |
| 104 | NULL, |
| 105 | json_strdup(reckless, reckless->stdoutbuf, |
| 106 | result)); |
| 107 | } |
| 108 | json_array_end(response); |
| 109 | json_array_start(response, "log"); |
| 110 | logs = json_get_member(reckless->stdoutbuf, toks, "log"); |
| 111 | json_for_each_arr(i, log, logs) { |
| 112 | json_add_string(response, |
| 113 | NULL, |
| 114 | json_strdup(reckless, reckless->stdoutbuf, |
| 115 | log)); |
| 116 | } |
| 117 | json_array_end(response); |
| 118 |
no test coverage detected