Patchwork [06/20] monitor: Introduce 'info commands'

login
register
mail settings
Submitter Luiz Capitulino
Date Nov. 27, 2009, 12:58 a.m.
Message ID <1259283550-3597-7-git-send-email-lcapitulino@redhat.com>
Download mbox | patch
Permalink /patch/39597/
State New
Headers show

Comments

Luiz Capitulino - Nov. 27, 2009, 12:58 a.m.
List QMP available commands. Only valid in control mode, where
has to be used as 'query-commands.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
 monitor.c |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

Patch

diff --git a/monitor.c b/monitor.c
index 4c402e4..02dea2e 100644
--- a/monitor.c
+++ b/monitor.c
@@ -363,6 +363,35 @@  static void do_info_version(Monitor *mon, QObject **ret_data)
 }
 
 /**
+ * do_info_commands(): List QMP available commands
+ *
+ * Return a QList of QStrings.
+ */
+static void do_info_commands(Monitor *mon, QObject **ret_data)
+{
+    QList *cmd_list;
+    const mon_cmd_t *cmd;
+
+    cmd_list = qlist_new();
+
+    for (cmd = mon_cmds; cmd->name != NULL; cmd++) {
+        if (monitor_handler_ported(cmd) && !compare_cmd(cmd->name, "info")) {
+            qlist_append(cmd_list, qstring_from_str(cmd->name));
+        }
+    }
+
+    for (cmd = info_cmds; cmd->name != NULL; cmd++) {
+        if (monitor_handler_ported(cmd)) {
+            char buf[128];
+            snprintf(buf, sizeof(buf), "query-%s", cmd->name);
+            qlist_append(cmd_list, qstring_from_str(buf));
+        }
+    }
+
+    *ret_data = QOBJECT(cmd_list);
+}
+
+/**
  * do_info_name(): Show VM name
  *
  * Return a QString with the current VM name.
@@ -2047,6 +2076,14 @@  static const mon_cmd_t info_cmds[] = {
         .mhandler.info_new = do_info_version,
     },
     {
+        .name       = "commands",
+        .args_type  = "",
+        .params     = "",
+        .help       = "list QMP available commands",
+        .user_print = monitor_user_noop,
+        .mhandler.info_new = do_info_commands,
+    },
+    {
         .name       = "network",
         .args_type  = "",
         .params     = "",