#include "jsonrpc/impl/request.h" #include "jsonrpc/impl/error.h" #include struct jsonrpc_request { int id; jsonrpc_send_fn * send; void * user_data; }; bool jsonrpc_impl_is_request( json_t * message) { json_t * id = json_object_get(message, "id"); json_t * method = json_object_get(message, "method"); json_t * params = json_object_get(message, "params"); return (json_is_integer(id) && json_is_string(method) && (json_is_array(params) || json_is_object(params))); } struct jsonrpc_request * jsonrpc_impl_request_create( int id, jsonrpc_send_fn * send, void * user_data) { struct jsonrpc_request * request = malloc(sizeof(struct jsonrpc_request)); if (NULL != request) { request->id = id; request->send = send; request->user_data = user_data; } return request; } void jsonrpc_impl_request_dispose( struct jsonrpc_request * request) { free(request); } void * jsonrpc_impl_request_get_userdata( struct jsonrpc_request * request) { return request->user_data; } void jsonrpc_impl_respond( struct jsonrpc_request * request, json_t * result) { json_t * response = json_object(); json_object_set_new(response, "result", result); json_object_set_new(response, "id", json_integer(request->id)); request->send(response, request->user_data); json_decref(response); jsonrpc_impl_request_dispose(request); } void jsonrpc_impl_respond_error( struct jsonrpc_request * request, int code, char const * message) { json_t * response = json_object(); json_object_set_new(response, "error", jsonrpc_impl_error(code, message)); json_object_set_new(response, "id", json_integer(request->id)); request->send(response, request->user_data); json_decref(response); jsonrpc_impl_request_dispose(request); }