static void spicevmc_port_send_event(RedChannelClient *rcc, uint8_t event) { PortEventPipeItem *item = spice_malloc(sizeof(PortEventPipeItem)); red_channel_pipe_item_init(rcc->channel, &item->base, PIPE_ITEM_TYPE_PORT_EVENT); item->event = event; red_channel_client_pipe_add_push(rcc, &item->base); }
static void spicevmc_chardev_send_msg_to_client(SpiceCharDeviceMsgToClient *msg, RedClient *client, void *opaque) { SpiceVmcState *state = opaque; SpiceVmcPipeItem *vmc_msg = msg; spice_assert(state->rcc->client == client); spicevmc_pipe_item_ref(vmc_msg); red_channel_client_pipe_add_push(state->rcc, &vmc_msg->base); }
static void spicevmc_port_send_init(RedChannelClient *rcc) { SpiceVmcState *state = SPICE_CONTAINEROF(rcc->channel, SpiceVmcState, channel); SpiceCharDeviceInstance *sin = state->chardev_sin; PortInitPipeItem *item = spice_malloc(sizeof(PortInitPipeItem)); red_channel_pipe_item_init(rcc->channel, &item->base, PIPE_ITEM_TYPE_PORT_INIT); item->name = strdup(sin->portname); item->opened = state->port_opened; red_channel_client_pipe_add_push(rcc, &item->base); }
/* this is called from both device input and client input. since the device is * a usb device, the context is still the main thread (kvm_main_loop, timers) * so no mutex is required. */ static void smartcard_channel_client_pipe_add_push(RedChannelClient *rcc, PipeItem *item) { red_channel_client_pipe_add_push(rcc, item); }