qmp: De-duplicate error response building
All callers of qmp_build_error_object() duplicate the code to wrap it in a response object. Replace it by qmp_error_response() that captures the duplicated code, including error_free(). Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20180703085358.13941-23-armbru@redhat.com>
This commit is contained in:
parent
a193352ff9
commit
cee32796ca
@ -47,7 +47,7 @@ void qmp_enable_command(QmpCommandList *cmds, const char *name);
|
|||||||
bool qmp_command_is_enabled(const QmpCommand *cmd);
|
bool qmp_command_is_enabled(const QmpCommand *cmd);
|
||||||
const char *qmp_command_name(const QmpCommand *cmd);
|
const char *qmp_command_name(const QmpCommand *cmd);
|
||||||
bool qmp_has_success_response(const QmpCommand *cmd);
|
bool qmp_has_success_response(const QmpCommand *cmd);
|
||||||
QObject *qmp_build_error_object(Error *err);
|
QDict *qmp_error_response(Error *err);
|
||||||
QObject *qmp_dispatch(QmpCommandList *cmds, QObject *request,
|
QObject *qmp_dispatch(QmpCommandList *cmds, QObject *request,
|
||||||
bool allow_oob);
|
bool allow_oob);
|
||||||
bool qmp_is_oob(QDict *dict);
|
bool qmp_is_oob(QDict *dict);
|
||||||
|
@ -4107,14 +4107,9 @@ static int monitor_can_read(void *opaque)
|
|||||||
static void monitor_qmp_respond(Monitor *mon, QObject *rsp,
|
static void monitor_qmp_respond(Monitor *mon, QObject *rsp,
|
||||||
Error *err, QObject *id)
|
Error *err, QObject *id)
|
||||||
{
|
{
|
||||||
QDict *qdict = NULL;
|
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
assert(!rsp);
|
assert(!rsp);
|
||||||
qdict = qdict_new();
|
rsp = QOBJECT(qmp_error_response(err));
|
||||||
qdict_put_obj(qdict, "error", qmp_build_error_object(err));
|
|
||||||
error_free(err);
|
|
||||||
rsp = QOBJECT(qdict);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rsp) {
|
if (rsp) {
|
||||||
|
@ -141,11 +141,15 @@ static QObject *do_qmp_dispatch(QmpCommandList *cmds, QObject *request,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
QObject *qmp_build_error_object(Error *err)
|
QDict *qmp_error_response(Error *err)
|
||||||
{
|
{
|
||||||
return qobject_from_jsonf("{ 'class': %s, 'desc': %s }",
|
QDict *rsp;
|
||||||
QapiErrorClass_str(error_get_class(err)),
|
|
||||||
error_get_pretty(err));
|
rsp = qdict_from_jsonf_nofail("{ 'error': { 'class': %s, 'desc': %s } }",
|
||||||
|
QapiErrorClass_str(error_get_class(err)),
|
||||||
|
error_get_pretty(err));
|
||||||
|
error_free(err);
|
||||||
|
return rsp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -166,15 +170,13 @@ QObject *qmp_dispatch(QmpCommandList *cmds, QObject *request,
|
|||||||
|
|
||||||
ret = do_qmp_dispatch(cmds, request, allow_oob, &err);
|
ret = do_qmp_dispatch(cmds, request, allow_oob, &err);
|
||||||
|
|
||||||
rsp = qdict_new();
|
|
||||||
if (err) {
|
if (err) {
|
||||||
qdict_put_obj(rsp, "error", qmp_build_error_object(err));
|
rsp = qmp_error_response(err);
|
||||||
error_free(err);
|
|
||||||
} else if (ret) {
|
} else if (ret) {
|
||||||
|
rsp = qdict_new();
|
||||||
qdict_put_obj(rsp, "return", ret);
|
qdict_put_obj(rsp, "return", ret);
|
||||||
} else {
|
} else {
|
||||||
qobject_unref(rsp);
|
rsp = NULL;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return QOBJECT(rsp);
|
return QOBJECT(rsp);
|
||||||
|
@ -610,15 +610,13 @@ static void process_event(JSONMessageParser *parser, GQueue *tokens)
|
|||||||
qdict = qobject_to(QDict, json_parser_parse_err(tokens, NULL, &err));
|
qdict = qobject_to(QDict, json_parser_parse_err(tokens, NULL, &err));
|
||||||
if (err || !qdict) {
|
if (err || !qdict) {
|
||||||
qobject_unref(qdict);
|
qobject_unref(qdict);
|
||||||
qdict = qdict_new();
|
|
||||||
if (!err) {
|
if (!err) {
|
||||||
g_warning("failed to parse event: unknown error");
|
g_warning("failed to parse event: unknown error");
|
||||||
error_setg(&err, QERR_JSON_PARSING);
|
error_setg(&err, QERR_JSON_PARSING);
|
||||||
} else {
|
} else {
|
||||||
g_warning("failed to parse event: %s", error_get_pretty(err));
|
g_warning("failed to parse event: %s", error_get_pretty(err));
|
||||||
}
|
}
|
||||||
qdict_put_obj(qdict, "error", qmp_build_error_object(err));
|
qdict = qmp_error_response(err);
|
||||||
error_free(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* handle host->guest commands */
|
/* handle host->guest commands */
|
||||||
@ -627,11 +625,9 @@ static void process_event(JSONMessageParser *parser, GQueue *tokens)
|
|||||||
} else {
|
} else {
|
||||||
if (!qdict_haskey(qdict, "error")) {
|
if (!qdict_haskey(qdict, "error")) {
|
||||||
qobject_unref(qdict);
|
qobject_unref(qdict);
|
||||||
qdict = qdict_new();
|
|
||||||
g_warning("unrecognized payload format");
|
g_warning("unrecognized payload format");
|
||||||
error_setg(&err, QERR_UNSUPPORTED);
|
error_setg(&err, QERR_UNSUPPORTED);
|
||||||
qdict_put_obj(qdict, "error", qmp_build_error_object(err));
|
qdict = qmp_error_response(err);
|
||||||
error_free(err);
|
|
||||||
}
|
}
|
||||||
ret = send_response(s, QOBJECT(qdict));
|
ret = send_response(s, QOBJECT(qdict));
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user