Skip to content
  • Marc-André Lureau's avatar
    qapi: add conditions to VNC type/commands/events on the schema · 05eb4a25
    Marc-André Lureau authored
    
    
    Add #if defined(CONFIG_VNC) in generated code, and adjust the
    qmp/hmp code accordingly.
    
    query-qmp-schema no longer reports the command/events etc as
    available when disabled at compile.
    
    Commands made conditional:
    
    * query-vnc, query-vnc-servers, change-vnc-password
    
      Before the patch, the commands for !CONFIG_VNC are stubs that fail
      like this:
    
        {"error": {"class": "GenericError",
                   "desc": "The feature 'vnc' is not enabled"}}
    
      Afterwards, they fail like this:
    
        {"error": {"class": "CommandNotFound",
                   "desc": "The command FOO has not been found"}}
    
      I call that an improvement, because it lets clients distinguish
      between command unavailable (class CommandNotFound) and command failed
      (class GenericError).
    
    Events made conditional:
    
    * VNC_CONNECTED, VNC_INITIALIZED, VNC_DISCONNECTED
    
    HMP change:
    
    * info vnc
    
      Will return "unknown command: 'info vnc'" when VNC is compiled
      out (same as error for spice when --disable-spice)
    
    Occurrences of VNC (case insensitive) in the schema that aren't
    covered by this change:
    
    * add_client
    
      Command has other uses, including "socket bases character devices".
      These are unconditional as far as I can tell.
    
    * set_password, expire_password
    
      In theory, these commands could be used for managing any service's
      password.  In practice, they're used for VNC and SPICE services.
      They're documented for "remote display session" / "remote display
      server".
    
      The service is selected by argument @protocol.  The code special-cases
      protocol-specific argument checking, then calls a protocol-specific
      function to do the work.  If it fails, the command fails with "Could
      not set password".  It does when the service isn't compiled in (it's a
      stub then).
    
      We could make these commands conditional on the conjunction of all
      services [currently: defined(CONFIG_VNC) || defined(CONFIG_SPICE)],
      but I doubt it's worthwhile.
    
    * change
    
      Command has other uses, namely changing media.
      This patch inlines a stub; no functional change.
    
    Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
    Reviewed-by: default avatarGerd Hoffmann <kraxel@redhat.com>
    Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Message-Id: <20180703155648.11933-14-marcandre.lureau@redhat.com>
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    05eb4a25