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); }
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; }