diff options
author | Hans de Goede <hdegoede@redhat.com> | 2010-09-28 10:11:16 +0200 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2010-09-28 17:18:50 +0200 |
commit | 653a2ac191dd699de7e9dd322e4bb41aa8798430 (patch) | |
tree | 9585d9b4b1cae6d4fa3dfbb3c1d37f248e210268 /vdagent-virtio-port.c | |
parent | c4767f205720239dcb6c07f374774fbd30e292ad (diff) |
Add support for copy paste commands to vdagentd
Diffstat (limited to 'vdagent-virtio-port.c')
-rw-r--r-- | vdagent-virtio-port.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/vdagent-virtio-port.c b/vdagent-virtio-port.c index 454cb04..645aa32 100644 --- a/vdagent-virtio-port.c +++ b/vdagent-virtio-port.c @@ -135,25 +135,22 @@ void vdagent_virtio_port_handle_fds(struct vdagent_virtio_port **portp, int vdagent_virtio_port_write( struct vdagent_virtio_port *port, - VDIChunkHeader *chunk_header, - VDAgentMessage *message_header, - uint8_t *data) + uint32_t port_nr, + uint32_t message_type, + uint32_t message_opaque, + uint8_t *data, + uint32_t data_size) { struct vdagent_virtio_port_buf *wbuf, *new_wbuf; - - if (message_header->size != - (chunk_header->size - sizeof(*message_header))) { - fprintf(stderr, "write: chunk vs message header size mismatch\n"); - return -1; - } + VDIChunkHeader chunk_header; + VDAgentMessage message_header; new_wbuf = malloc(sizeof(*new_wbuf)); if (!new_wbuf) return -1; new_wbuf->pos = 0; - new_wbuf->size = sizeof(*chunk_header) + sizeof(*message_header) + - message_header->size; + new_wbuf->size = sizeof(chunk_header) + sizeof(message_header) + data_size; new_wbuf->next = NULL; new_wbuf->buf = malloc(new_wbuf->size); if (!new_wbuf->buf) { @@ -161,11 +158,18 @@ int vdagent_virtio_port_write( return -1; } - memcpy(new_wbuf->buf, chunk_header, sizeof(*chunk_header)); - memcpy(new_wbuf->buf + sizeof(*chunk_header), message_header, - sizeof(*message_header)); - memcpy(new_wbuf->buf + sizeof(*chunk_header) + sizeof(*message_header), - data, message_header->size); + chunk_header.port = port_nr; + chunk_header.size = sizeof(message_header) + data_size; + message_header.protocol = VD_AGENT_PROTOCOL; + message_header.type = message_type; + message_header.opaque = message_opaque; + message_header.size = data_size; + + memcpy(new_wbuf->buf, &chunk_header, sizeof(chunk_header)); + memcpy(new_wbuf->buf + sizeof(chunk_header), &message_header, + sizeof(message_header)); + memcpy(new_wbuf->buf + sizeof(chunk_header) + sizeof(message_header), + data, data_size); if (!port->write_buf) { port->write_buf = new_wbuf; |