#include <mon_internal.h>
-// Monitoring request decoders
+/* Monitoring request decoders */
/**
* Decode a single option
&opt) != MON_SUCCESS) {
return MON_NOPARSE;
}
- mon_req_add_option(req, opt.type);
+ if (MON_SUCCESS != mon_req_add_option(req, opt.type)){
+ return MON_NOPARSE;
+ }
}
return MON_SUCCESS;
}
/**
- * Parse JSON for a request
+ * Parse a JSON string into a request
*/
-static json_t *mon_req_parse(const char *input)
+MON_REQ *mon_req_parse(TALLOC_CTX *mem_ctx, const char *input)
{
json_t *parsed_json = NULL;
json_error_t json_error;
parsed_json = json_loads(input, JSON_REJECT_DUPLICATES, &json_error);
- return parsed_json;
+ return mon_req_decode(mem_ctx, parsed_json);
}
/**
*
* (options are optional)
*
- * Caller must free the return value with MON_REQ_free().
+ * Caller must free the return value with mon_req_free().
*
* @param mem_ctx talloc context for the returned struct
* @param req_json reference to JSON request object
* @return decoded request struct or NULL on failure
*/
-MON_REQ *mon_req_decode(TALLOC_CTX *mem_ctx, const char *req_str)
+MON_REQ *mon_req_decode(TALLOC_CTX *mem_ctx, json_t *req_json)
{
TALLOC_CTX *tmp_ctx = talloc_new(NULL);
MON_REQ *req = NULL;
- json_t *req_json = NULL;
json_t *jval = NULL;
json_t *opts_json = NULL;
MON_CMD cmd = MON_CMD_UNKNOWN;
- req_json = mon_req_parse(req_str); // TODO: Check errors
-
if (! json_is_object(req_json))
goto cleanup;
cleanup:
talloc_free(tmp_ctx);
- if (req_json)
- json_decref(req_json);
return req;
}