qemu-ga: switch to the new error format on the wire
IMPORTANT: this BREAKS qemu-ga compatibility for the error response.
Instead of returning something like:
{ "error": { "class": "InvalidParameterValue",
             "data": {"name": "mode", "expected": "halt|powerdown|reboot" } } }
qemu-ga now returns:
 { "error": { "class": "GenericError",
              "desc": "Parameter 'mode' expects halt|powerdown|reboot" } }
Notice that this is also a bug fix, as qemu-ga wasn't returning the
human message.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									de253f1491
								
							
						
					
					
						commit
						93b91c59db
					
				| @ -211,6 +211,7 @@ common-obj-$(CONFIG_SMARTCARD_NSS) += $(libcacard-y) | ||||
| # qapi
 | ||||
| 
 | ||||
| qapi-obj-y = qapi/ | ||||
| qapi-obj-y += qapi-types.o qapi-visit.o | ||||
| 
 | ||||
| common-obj-y += qmp-marshal.o qapi-visit.o qapi-types.o | ||||
| common-obj-y += qmp.o hmp.o | ||||
|  | ||||
| @ -49,6 +49,7 @@ void qmp_disable_command(const char *name); | ||||
| void qmp_enable_command(const char *name); | ||||
| bool qmp_command_is_enabled(const char *name); | ||||
| char **qmp_get_command_list(void); | ||||
| QObject *qmp_build_error_object(Error *errp); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -14,6 +14,7 @@ | ||||
| #include "qemu-objects.h" | ||||
| #include "qapi/qmp-core.h" | ||||
| #include "json-parser.h" | ||||
| #include "qapi-types.h" | ||||
| #include "error.h" | ||||
| #include "error_int.h" | ||||
| #include "qerror.h" | ||||
| @ -109,6 +110,13 @@ static QObject *do_qmp_dispatch(QObject *request, Error **errp) | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| QObject *qmp_build_error_object(Error *errp) | ||||
| { | ||||
|     return qobject_from_jsonf("{ 'class': %s, 'desc': %s }", | ||||
|                               ErrorClass_lookup[error_get_class(errp)], | ||||
|                               error_get_pretty(errp)); | ||||
| } | ||||
| 
 | ||||
| QObject *qmp_dispatch(QObject *request) | ||||
| { | ||||
|     Error *err = NULL; | ||||
| @ -119,7 +127,7 @@ QObject *qmp_dispatch(QObject *request) | ||||
| 
 | ||||
|     rsp = qdict_new(); | ||||
|     if (err) { | ||||
|         qdict_put_obj(rsp, "error", error_get_qobject(err)); | ||||
|         qdict_put_obj(rsp, "error", qmp_build_error_object(err)); | ||||
|         error_free(err); | ||||
|     } else if (ret) { | ||||
|         qdict_put_obj(rsp, "return", ret); | ||||
|  | ||||
| @ -515,7 +515,7 @@ static void process_event(JSONMessageParser *parser, QList *tokens) | ||||
|         } else { | ||||
|             g_warning("failed to parse event: %s", error_get_pretty(err)); | ||||
|         } | ||||
|         qdict_put_obj(qdict, "error", error_get_qobject(err)); | ||||
|         qdict_put_obj(qdict, "error", qmp_build_error_object(err)); | ||||
|         error_free(err); | ||||
|     } else { | ||||
|         qdict = qobject_to_qdict(obj); | ||||
| @ -532,7 +532,7 @@ static void process_event(JSONMessageParser *parser, QList *tokens) | ||||
|             qdict = qdict_new(); | ||||
|             g_warning("unrecognized payload format"); | ||||
|             error_set(&err, QERR_UNSUPPORTED); | ||||
|             qdict_put_obj(qdict, "error", error_get_qobject(err)); | ||||
|             qdict_put_obj(qdict, "error", qmp_build_error_object(err)); | ||||
|             error_free(err); | ||||
|         } | ||||
|         ret = send_response(s, QOBJECT(qdict)); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Luiz Capitulino
						Luiz Capitulino