Compare commits
No commits in common. "4236a4943a89dc8e1c1c2d30c31f09f80164ec17" and "5854ed1b32be470b2ca9c126681fa4b417b94d37" have entirely different histories.
4236a4943a
...
5854ed1b32
@ -113,7 +113,8 @@ foreach (page ${project_MAN_PAGES})
|
||||
endforeach (page)
|
||||
|
||||
# CPack
|
||||
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "A shell for JSON-RPC 2.0")
|
||||
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY
|
||||
"A shell for running JSON-RPC 2.0 queries")
|
||||
set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch")
|
||||
set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")
|
||||
set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
|
||||
|
16
README.adoc
16
README.adoc
@ -2,25 +2,23 @@ json-rpc-shell
|
||||
==============
|
||||
:compact-option:
|
||||
|
||||
'json-rpc-shell' is a shell for running JSON-RPC 2.0 queries.
|
||||
'json-rpc-shell' is a simple shell for running JSON-RPC 2.0 queries.
|
||||
|
||||
This software was originally created as a replacement for
|
||||
http://software.dzhuvinov.com/json-rpc-2.0-shell.html[a different one] made by
|
||||
Vladimir Dzhuvinov, in order to avoid Java, but has evolved since.
|
||||
This software has been created as a replacement for the following shell, which
|
||||
is written in Java: http://software.dzhuvinov.com/json-rpc-2.0-shell.html
|
||||
|
||||
Features
|
||||
--------
|
||||
In addition to most of the features provided by its predecessor, you will get
|
||||
the following niceties:
|
||||
In addition to most of the features provided by Vladimir Dzhuvinov's shell
|
||||
you get the following niceties:
|
||||
|
||||
- configurable JSON syntax highlight, which with prettyprinting turned on
|
||||
helps you make sense of the results significantly
|
||||
- ability to pipe output through a shell command, so that you can view the
|
||||
results in your favourite editor or redirect them to a file
|
||||
- ability to edit the input line in your favourite editor as well with Alt+E
|
||||
- WebSocket (RFC 6455) can also be used as a transport rather than HTTP
|
||||
- even Language Server Protocol servers may be launched as a slave command
|
||||
- support for method name tab completion using OpenRPC discovery or file input
|
||||
- WebSockets (RFC 6455) can also be used as a transport rather than HTTP
|
||||
- support for method name tab completion using OpenRPC discovery
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
@ -6,11 +6,11 @@ json-rpc-shell(1)
|
||||
|
||||
Name
|
||||
----
|
||||
json-rpc-shell - a shell for JSON-RPC 2.0
|
||||
json-rpc-shell - a simple JSON-RPC 2.0 shell
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
*json-rpc-shell* [_OPTION_]... { _ENDPOINT_ | _COMMAND_ [_ARG_]... }
|
||||
*json-rpc-shell* [_OPTION_]... _ENDPOINT_
|
||||
|
||||
Description
|
||||
-----------
|
||||
@ -80,11 +80,6 @@ Protocol
|
||||
Call "rpc.discover" upon start-up in order to pull in OpenRPC data for
|
||||
tab completion of method names. If a path is given, it is read from a file.
|
||||
|
||||
*-e*, *--execute*::
|
||||
Rather than an _ENDPOINT_, accept a command line to execute and communicate
|
||||
with using the JSON-RPC 2.0 protocol variation used in the Language Server
|
||||
Protocol.
|
||||
|
||||
Program information
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
*-h*, *--help*::
|
||||
@ -116,11 +111,11 @@ requests, it is often convenient or even necessary to run a full text editor
|
||||
in order to construct complex objects or arrays, and may even be used to import
|
||||
data from elsewhere. You can launch an editor for the current request using
|
||||
the M-e key combination. Both *readline*(3) and *editline*(7) also support
|
||||
multiline editing natively, press either M-Enter or C-v C-j in order to insert
|
||||
multiline editing natively, though you need to press C-v C-j in order to insert
|
||||
newlines.
|
||||
|
||||
WebSocket
|
||||
~~~~~~~~~
|
||||
WebSockets
|
||||
~~~~~~~~~~
|
||||
The JSON-RPC 2.0 specification doesn't say almost anything about underlying
|
||||
transports. The way it's implemented here is that every request is sent as
|
||||
a single text message. If it has an "id" field, i.e., it's not just
|
||||
|
880
json-rpc-shell.c
880
json-rpc-shell.c
File diff suppressed because it is too large
Load Diff
@ -525,11 +525,11 @@ fcgi_muxer_push (struct fcgi_muxer *self, const void *data, size_t len)
|
||||
}
|
||||
|
||||
/// @}
|
||||
// --- WebSocket ---------------------------------------------------------------
|
||||
/// @defgroup WebSocket
|
||||
// --- WebSockets --------------------------------------------------------------
|
||||
/// @defgroup WebSockets
|
||||
/// @{
|
||||
|
||||
// WebSocket isn't CGI-compatible, therefore we must handle the initial HTTP
|
||||
// WebSockets aren't CGI-compatible, therefore we must handle the initial HTTP
|
||||
// handshake ourselves. Luckily it's not too much of a bother with http-parser.
|
||||
// Typically there will be a normal HTTP server in front of us, proxying the
|
||||
// requests based on the URI.
|
||||
@ -537,7 +537,7 @@ fcgi_muxer_push (struct fcgi_muxer *self, const void *data, size_t len)
|
||||
enum ws_handler_state
|
||||
{
|
||||
WS_HANDLER_CONNECTING, ///< Parsing HTTP
|
||||
WS_HANDLER_OPEN, ///< Parsing WebSocket frames
|
||||
WS_HANDLER_OPEN, ///< Parsing WebSockets frames
|
||||
WS_HANDLER_CLOSING, ///< Partial closure by us
|
||||
WS_HANDLER_FLUSHING, ///< Just waiting for client EOF
|
||||
WS_HANDLER_CLOSED ///< Dead, both sides closed
|
||||
@ -1110,7 +1110,7 @@ ws_handler_finish_handshake (struct ws_handler *self)
|
||||
if (!connection || strcasecmp_ascii (connection, "Upgrade"))
|
||||
FAIL_HANDSHAKE (HTTP_400_BAD_REQUEST);
|
||||
|
||||
// Check if we can actually upgrade the protocol to WebSocket
|
||||
// Check if we can actually upgrade the protocol to WebSockets
|
||||
const char *upgrade = str_map_find (&self->headers, "Upgrade");
|
||||
struct http_protocol *offered_upgrades = NULL;
|
||||
bool can_upgrade = false;
|
||||
@ -1286,7 +1286,7 @@ static struct simple_config_item g_config_table[] =
|
||||
{ "bind_host", NULL, "Address of the server" },
|
||||
{ "port_fastcgi", "9000", "Port to bind for FastCGI" },
|
||||
{ "port_scgi", NULL, "Port to bind for SCGI" },
|
||||
{ "port_ws", NULL, "Port to bind for WebSocket" },
|
||||
{ "port_ws", NULL, "Port to bind for WebSockets" },
|
||||
{ "pid_file", NULL, "Full path for the PID file" },
|
||||
// XXX: here belongs something like a web SPA that interfaces with us
|
||||
{ "static_root", NULL, "The root for static content" },
|
||||
@ -2452,12 +2452,12 @@ client_scgi_create (EV_P_ int sock_fd)
|
||||
return &self->client;
|
||||
}
|
||||
|
||||
// --- WebSocket client handler ------------------------------------------------
|
||||
// --- WebSockets client handler -----------------------------------------------
|
||||
|
||||
struct client_ws
|
||||
{
|
||||
struct client client; ///< Parent class
|
||||
struct ws_handler handler; ///< WebSocket connection handler
|
||||
struct ws_handler handler; ///< WebSockets connection handler
|
||||
};
|
||||
|
||||
static bool
|
||||
|
Loading…
x
Reference in New Issue
Block a user