aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2020-10-13 04:33:12 +0200
committerPřemysl Eric Janouch <p@janouch.name>2020-10-13 04:35:32 +0200
commit222182876398915f204e5949f5fde4f8e77a3dfc (patch)
tree1b104472fb84c3a536bc4fdb5cf1312650fe44d1
parentc2a00511c06e8276e766948a80c35ed5b396ca21 (diff)
downloadjson-rpc-shell-222182876398915f204e5949f5fde4f8e77a3dfc.tar.gz
json-rpc-shell-222182876398915f204e5949f5fde4f8e77a3dfc.tar.xz
json-rpc-shell-222182876398915f204e5949f5fde4f8e77a3dfc.zip
OpenRPC: avoid eating HTTP/transport errors
-rw-r--r--json-rpc-shell.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/json-rpc-shell.c b/json-rpc-shell.c
index 00b5820..b7c99a9 100644
--- a/json-rpc-shell.c
+++ b/json-rpc-shell.c
@@ -3225,24 +3225,16 @@ fail:
// --- OpenRPC information extraction ------------------------------------------
static void
-init_openrpc (struct app_context *ctx)
+parse_rpc_discover (struct app_context *ctx, struct str *buf, struct error **e)
{
- if (!ctx->openrpc)
- return;
-
- json_t *id = json_integer (ctx->next_id++);
- struct str buf = str_make ();
- struct error *e = json_rpc_call_raw (ctx, "rpc.discover", id, NULL, &buf);
- json_decref (id);
-
// Just optimistically punch through, I don't have time for this shit
json_error_t error;
json_t *response = NULL, *result = NULL, *value = NULL;
- if (!e && !(response = json_loadb (buf.str, buf.len, 0, &error)))
- error_set (&e, "parse failure: %s", error.text);
+ if (!(response = json_loadb (buf->str, buf->len, 0, &error)))
+ error_set (e, "parse failure: %s", error.text);
else if (!(result = json_object_get (response, "result"))
|| !(result = json_object_get (result, "methods")))
- error_set (&e, "unsupported");
+ error_set (e, "unsupported");
else
{
const char *name = NULL;
@@ -3252,10 +3244,25 @@ init_openrpc (struct app_context *ctx)
str_map_set (&ctx->methods, name, (void *) 1);
}
json_decref (response);
- if (e)
+}
+
+static void
+init_openrpc (struct app_context *ctx)
+{
+ if (!ctx->openrpc)
+ return;
+
+ json_t *id = json_integer (ctx->next_id++);
+ struct str buf = str_make ();
+ struct error *error;
+ if (!(error = json_rpc_call_raw (ctx, "rpc.discover", id, NULL, &buf)))
+ parse_rpc_discover (ctx, &buf, &error);
+ json_decref (id);
+
+ if (error)
{
- print_error ("OpenRPC: %s", e->message);
- error_free (e);
+ print_error ("OpenRPC: %s", error->message);
+ error_free (error);
}
str_free (&buf);
}