summaryrefslogtreecommitdiff
path: root/cethcan/rpc.c
diff options
context:
space:
mode:
Diffstat (limited to 'cethcan/rpc.c')
-rw-r--r--cethcan/rpc.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/cethcan/rpc.c b/cethcan/rpc.c
new file mode 100644
index 0000000..57cb117
--- /dev/null
+++ b/cethcan/rpc.c
@@ -0,0 +1,31 @@
+#include "cethcan.h"
+
+#include <event2/buffer.h>
+#include "jsonrpc/jsonrpc.h"
+
+static int rpc_ping(void *apparg, json_t *json_params, json_t **result)
+{
+ *result = json_string("pong");
+ return 0;
+}
+
+struct jsonrpc_method_entry_t method_table[] = {
+ { "ping", rpc_ping, "" },
+ { NULL, NULL, NULL },
+};
+
+void rpc_perform(struct evbuffer *request,
+ void (*response_handler)(void *arg, struct evbuffer *data),
+ void *handler_arg)
+{
+ size_t len = evbuffer_get_length(request);
+ char *data = (char *)evbuffer_pullup(request, len);
+ struct evbuffer *outbuf = evbuffer_new();
+
+ /* TODO: asynchronous calls */
+ char *output = jsonrpc_handler(NULL, data, len, method_table);
+ if (output)
+ evbuffer_add(outbuf, output, strlen(output));
+ response_handler(handler_arg, outbuf);
+ evbuffer_free(outbuf);
+}