static void handle_qmp_command(JSONMessageParser *parser, QList *tokens)

{

    Error *local_err = NULL;

    QObject *obj, *data;

    QDict *input, *args;

    const mon_cmd_t *cmd;

    const char *cmd_name;

    Monitor *mon = cur_mon;



    args = input = NULL;

    data = NULL;



    obj = json_parser_parse(tokens, NULL);

    if (!obj) {

        // FIXME: should be triggered in json_parser_parse()

        qerror_report(QERR_JSON_PARSING);

        goto err_out;

    }



    input = qmp_check_input_obj(obj, &local_err);

    if (!input) {

        qerror_report_err(local_err);

        qobject_decref(obj);

        goto err_out;

    }



    mon->mc->id = qdict_get(input, "id");

    qobject_incref(mon->mc->id);



    cmd_name = qdict_get_str(input, "execute");

    trace_handle_qmp_command(mon, cmd_name);

    cmd = qmp_find_cmd(cmd_name);

    if (!cmd) {

        qerror_report(ERROR_CLASS_COMMAND_NOT_FOUND,

                      "The command %s has not been found", cmd_name);

        goto err_out;

    }

    if (invalid_qmp_mode(mon, cmd)) {

        goto err_out;

    }



    obj = qdict_get(input, "arguments");

    if (!obj) {

        args = qdict_new();

    } else {

        args = qobject_to_qdict(obj);

        QINCREF(args);

    }



    qmp_check_client_args(cmd, args, &local_err);

    if (local_err) {

        qerror_report_err(local_err);

        goto err_out;

    }



    if (cmd->mhandler.cmd_new(mon, args, &data)) {

        /* Command failed... */

        if (!monitor_has_error(mon)) {

            /* ... without setting an error, so make one up */

            qerror_report(QERR_UNDEFINED_ERROR);

        }

    }



err_out:

    monitor_protocol_emitter(mon, data);

    qobject_decref(data);

    QDECREF(input);

    QDECREF(args);

}

static void handle_qmp_command(JSONMessageParser *parser, QList *tokens)

{

    Error *local_err = NULL;

    QObject *obj, *data;

    QDict *input, *args;

    const mon_cmd_t *cmd;

    const char *cmd_name;

    Monitor *mon = cur_mon;



    args = input = NULL;

    data = NULL;



    obj = json_parser_parse(tokens, NULL);

    if (!obj) {

        

        qerror_report(QERR_JSON_PARSING);

        goto err_out;

    }



    input = qmp_check_input_obj(obj, &local_err);

    if (!input) {

        qerror_report_err(local_err);

        qobject_decref(obj);

        goto err_out;

    }



    mon->mc->id = qdict_get(input, "id");

    qobject_incref(mon->mc->id);



    cmd_name = qdict_get_str(input, "execute");

    trace_handle_qmp_command(mon, cmd_name);

    cmd = qmp_find_cmd(cmd_name);

    if (!cmd) {

        qerror_report(ERROR_CLASS_COMMAND_NOT_FOUND,

                      "The command %s has not been found", cmd_name);

        goto err_out;

    }

    if (invalid_qmp_mode(mon, cmd)) {

        goto err_out;

    }



    obj = qdict_get(input, "arguments");

    if (!obj) {

        args = qdict_new();

    } else {

        args = qobject_to_qdict(obj);

        QINCREF(args);

    }



    qmp_check_client_args(cmd, args, &local_err);

    if (local_err) {

        qerror_report_err(local_err);

        goto err_out;

    }



    if (cmd->mhandler.cmd_new(mon, args, &data)) {

        

        if (!monitor_has_error(mon)) {

            

            qerror_report(QERR_UNDEFINED_ERROR);

        }

    }



err_out:

    monitor_protocol_emitter(mon, data);

    qobject_decref(data);

    QDECREF(input);

    QDECREF(args);

}

static void FUNC_0(JSONMessageParser *VAR_0, QList *VAR_1)

{

    Error *local_err = NULL;

    QObject *obj, *data;

    QDict *input, *args;

    const mon_cmd_t *VAR_2;

    const char *VAR_3;

    Monitor *mon = cur_mon;



    args = input = NULL;

    data = NULL;



    obj = json_parser_parse(VAR_1, NULL);

    if (!obj) {

        

        qerror_report(QERR_JSON_PARSING);

        goto err_out;

    }



    input = qmp_check_input_obj(obj, &local_err);

    if (!input) {

        qerror_report_err(local_err);

        qobject_decref(obj);

        goto err_out;

    }



    mon->mc->id = qdict_get(input, "id");

    qobject_incref(mon->mc->id);



    VAR_3 = qdict_get_str(input, "execute");

    trace_handle_qmp_command(mon, VAR_3);

    VAR_2 = qmp_find_cmd(VAR_3);

    if (!VAR_2) {

        qerror_report(ERROR_CLASS_COMMAND_NOT_FOUND,

                      "The command %s has not been found", VAR_3);

        goto err_out;

    }

    if (invalid_qmp_mode(mon, VAR_2)) {

        goto err_out;

    }



    obj = qdict_get(input, "arguments");

    if (!obj) {

        args = qdict_new();

    } else {

        args = qobject_to_qdict(obj);

        QINCREF(args);

    }



    qmp_check_client_args(VAR_2, args, &local_err);

    if (local_err) {

        qerror_report_err(local_err);

        goto err_out;

    }



    if (VAR_2->mhandler.cmd_new(mon, args, &data)) {

        

        if (!monitor_has_error(mon)) {

            

            qerror_report(QERR_UNDEFINED_ERROR);

        }

    }



err_out:

    monitor_protocol_emitter(mon, data);

    qobject_decref(data);

    QDECREF(input);

    QDECREF(args);

}

static void FUNC_0(JSONMessageParser *VAR_0, QList *VAR_1)
{ Error *local_err = NULL; QObject *obj, *data; QDict *input, *args; const mon_cmd_t *VAR_2; const char *VAR_3; Monitor *mon = cur_mon; args = input = NULL; data = NULL; obj = json_parser_parse(VAR_1, NULL); if (!obj) { qerror_report(QERR_JSON_PARSING); goto err_out; } input = qmp_check_input_obj(obj, &local_err); if (!input) { qerror_report_err(local_err); qobject_decref(obj); goto err_out; } mon->mc->id = qdict_get(input, "id"); qobject_incref(mon->mc->id); VAR_3 = qdict_get_str(input, "execute"); trace_handle_qmp_command(mon, VAR_3); VAR_2 = qmp_find_cmd(VAR_3); if (!VAR_2) { qerror_report(ERROR_CLASS_COMMAND_NOT_FOUND,
"The command %s has not been found", VAR_3); goto err_out; } if (invalid_qmp_mode(mon, VAR_2)) { goto err_out; } obj = qdict_get(input, "arguments"); if (!obj) { args = qdict_new(); } else { args = qobject_to_qdict(obj); QINCREF(args); } qmp_check_client_args(VAR_2, args, &local_err); if (local_err) { qerror_report_err(local_err); goto err_out; } if (VAR_2->mhandler.cmd_new(mon, args, &data)) { if (!monitor_has_error(mon)) { qerror_report(QERR_UNDEFINED_ERROR); } } err_out:
monitor_protocol_emitter(mon, data); qobject_decref(data); QDECREF(input); QDECREF(args); }