aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2020-10-13 21:06:03 +0200
committerPřemysl Eric Janouch <p@janouch.name>2020-10-13 21:07:40 +0200
commit63c8a794793e2118912ee4b10579f60008549f21 (patch)
treeb875bd60a2d3719a3663ff94e2e3b13f04ec8229
parentd489362a28395f47baff248fdd4170acb79c4cdb (diff)
downloadjson-rpc-shell-63c8a794793e2118912ee4b10579f60008549f21.tar.gz
json-rpc-shell-63c8a794793e2118912ee4b10579f60008549f21.tar.xz
json-rpc-shell-63c8a794793e2118912ee4b10579f60008549f21.zip
Factor out init_backend()
The main() function is still way too long.
-rw-r--r--json-rpc-shell.c58
1 files changed, 31 insertions, 27 deletions
diff --git a/json-rpc-shell.c b/json-rpc-shell.c
index adcf310..44e2598 100644
--- a/json-rpc-shell.c
+++ b/json-rpc-shell.c
@@ -3536,7 +3536,7 @@ init_watchers (struct app_context *ctx)
static void
parse_program_arguments (struct app_context *ctx, int argc, char **argv,
- char **origin, char **endpoint)
+ const char **origin, const char **endpoint)
{
static const struct opt opts[] =
{
@@ -3618,27 +3618,9 @@ parse_program_arguments (struct app_context *ctx, int argc, char **argv,
opt_handler_free (&oh);
}
-int
-main (int argc, char *argv[])
+static void
+init_backend (struct app_context *ctx, const char *origin, const char *endpoint)
{
- g_ctx.config = config_make ();
- register_config_modules (&g_ctx);
- config_load (&g_ctx.config, config_item_object ());
-
- char *origin = NULL;
- char *endpoint = NULL;
- parse_program_arguments (&g_ctx, argc, argv, &origin, &endpoint);
-
- g_ctx.input = input_new ();
- g_ctx.input->user_data = &g_ctx;
- g_ctx.input->on_input = process_input;
- g_ctx.input->on_run_editor = run_editor;
- g_ctx.input->complete_start_word = complete_method_name;
-
- g_ctx.methods = str_map_make (NULL);
- init_colors (&g_ctx);
- load_configuration (&g_ctx);
-
struct http_parser_url url;
if (http_parser_parse_url (endpoint, strlen (endpoint), false, &url))
exit_fatal ("invalid endpoint address");
@@ -3649,23 +3631,45 @@ main (int argc, char *argv[])
url.field_data[UF_SCHEMA].off,
url.field_data[UF_SCHEMA].len);
- // TODO: try to avoid the need to pass application context to backends
+ // TODO: try to avoid the need to pass the application context to backends
if (!strcasecmp_ascii (url_schema, "http")
|| !strcasecmp_ascii (url_schema, "https"))
- g_ctx.backend = backend_curl_new (&g_ctx, endpoint);
+ ctx->backend = backend_curl_new (ctx, endpoint);
else if (!strcasecmp_ascii (url_schema, "ws")
|| !strcasecmp_ascii (url_schema, "wss"))
- g_ctx.backend = backend_ws_new (&g_ctx, endpoint, &url);
+ ctx->backend = backend_ws_new (ctx, endpoint, &url);
else
exit_fatal ("unsupported protocol");
free (url_schema);
if (origin)
{
- origin = xstrdup_printf ("Origin: %s", origin);
- g_ctx.backend->vtable->add_header (g_ctx.backend, origin);
+ char *header = xstrdup_printf ("Origin: %s", origin);
+ g_ctx.backend->vtable->add_header (g_ctx.backend, header);
+ free (header);
}
- free (origin);
+}
+
+int
+main (int argc, char *argv[])
+{
+ g_ctx.config = config_make ();
+ register_config_modules (&g_ctx);
+ config_load (&g_ctx.config, config_item_object ());
+
+ const char *origin = NULL, *endpoint = NULL;
+ parse_program_arguments (&g_ctx, argc, argv, &origin, &endpoint);
+
+ g_ctx.input = input_new ();
+ g_ctx.input->user_data = &g_ctx;
+ g_ctx.input->on_input = process_input;
+ g_ctx.input->on_run_editor = run_editor;
+ g_ctx.input->complete_start_word = complete_method_name;
+
+ g_ctx.methods = str_map_make (NULL);
+ init_colors (&g_ctx);
+ load_configuration (&g_ctx);
+ init_backend (&g_ctx, origin, endpoint);
// We only need to convert to and from the terminal encoding
setlocale (LC_CTYPE, "");