Beispiel #1
0
static void
dispatch_message(SpiceVDAgent *agent)
{
    VDAgentdHeader *header = &agent->header;
    gpointer data = agent->data;
    gchar *type = NULL;
    GStrv types = NULL;
    gssize pos = 0;

    switch (header->type) {
    case VDAGENTD_MONITORS_CONFIG:
        g_warning("monitors config is not handled by agent anymore");
        break;
    case VDAGENTD_FILE_XFER_START:
    case VDAGENTD_FILE_XFER_STATUS:
    case VDAGENTD_FILE_XFER_DATA:
        g_warning("file-xfer is deprecated");
        break;
    case VDAGENTD_CLIPBOARD_REQUEST:
        type = str_from_data(data, header->size, &pos);
        vdagent_clipboard_request(agent, header->arg1, type);
        break;
    case VDAGENTD_CLIPBOARD_GRAB:
        types = strv_from_data(data, header->size, &pos);
        vdagent_clipboard_grab(agent, header->arg1, types);
        break;
    case VDAGENTD_CLIPBOARD_DATA:
        type = str_from_data(data, header->size, &pos);
        vdagent_clipboard_data(agent, header->arg1, type, data + pos, header->size - pos);
        break;
    case VDAGENTD_CLIPBOARD_RELEASE:
        vdagent_clipboard_release(agent, header->arg1);
        break;
    case VDAGENTD_VERSION:
        if (g_strcmp0(data, VERSION)) {
            g_message("vdagentd version mismatch: got %s expected %s", (gchar*)data, VERSION);
            gtk_main_quit();
            version_mismatch = TRUE;
        }
        break;
    case VDAGENTD_CLIENT_DISCONNECTED:
        vdagent_clipboard_release_all(agent);
        break;
    default:
        g_warning("Unknown message from vdagentd type: %d, ignoring", header->type);
    }

    g_free(type);
    g_strfreev(types);
}
Beispiel #2
0
str_t * _any_tostring(data_t *self, char *name, arguments_t *args) {
  str_t  *ret;
  int     ix;

  (void) self;
  (void) name;

  ret = str_from_data(arguments_get_arg(args, 0));
  for (ix = 1; ix < arguments_args_size(args); ix++) {
    str_append_chars(ret, arguments_arg_tostring(args, ix));
  }
  return ret;
}