static int eval_request(struct jrpc_server *server, struct jrpc_connection * conn, cJSON *root) { cJSON *method, *params, *id; method = cJSON_GetObjectItem(root, "method"); if (method != NULL && method->type == cJSON_String) { params = cJSON_GetObjectItem(root, "params"); if (params == NULL|| params->type == cJSON_Array || params->type == cJSON_Object) { id = cJSON_GetObjectItem(root, "id"); if (id == NULL|| id->type == cJSON_String || id->type == cJSON_Number) { //We have to copy ID because using it on the reply and deleting the response Object will also delete ID cJSON * id_copy = NULL; if (id != NULL) id_copy = (id->type == cJSON_String) ? cJSON_CreateString( id->valuestring) : cJSON_CreateNumber(id->valueint); if (server->debug_level) printf("Method Invoked: %s\n", method->valuestring); return invoke_procedure(server, conn, method->valuestring, params, id_copy); } } } send_error(conn, JRPC_INVALID_REQUEST, strdup("The JSON sent is not a valid Request object."), NULL); return -1; }
static int invoke_procedure_id(struct jrpc_server *server, struct json *method, struct jrpc_connection *conn, struct json *id, struct json *params) { //We have to copy ID because using it on the reply and deleting the response Object will also delete ID struct json *id_copy = NULL; if (id != NULL) id_copy = (id->type == JSON_T_STRING) ? json_create_string(id->valuestring) : json_create_number(id->valueint); if (server->debug_level) dlog("Method Invoked: %s\n", method->valuestring); return invoke_procedure(server, conn, method->valuestring, params, id_copy); }