diff options
author | Alon Levy <alevy@redhat.com> | 2010-11-08 01:48:42 +0200 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2011-03-02 17:27:50 +0200 |
commit | 111cf51103b1f3aa6820fac9f50da6c6be41f711 (patch) | |
tree | 31e3513113e12c33d51f6382af4a58cd99a855f1 /server | |
parent | f7a99f858efd484ec890eebd24c8f92002722e9b (diff) | |
download | spice-111cf51103b1f3aa6820fac9f50da6c6be41f711.tar.gz spice-111cf51103b1f3aa6820fac9f50da6c6be41f711.tar.xz spice-111cf51103b1f3aa6820fac9f50da6c6be41f711.zip |
server/red_worker: add send_item
Diffstat (limited to 'server')
-rw-r--r-- | server/red_worker.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/server/red_worker.c b/server/red_worker.c index ef457dc2..3af59242 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -350,6 +350,7 @@ typedef struct LocalCursor { typedef struct RedChannel RedChannel; typedef void (*channel_disconnect_proc)(RedChannel *channel); typedef void (*channel_hold_pipe_item_proc)(RedChannel *channel, PipeItem *item); +typedef void (*channel_send_pipe_item_proc)(RedChannel *channel, PipeItem *item); typedef void (*channel_release_pipe_item_proc)(RedChannel *channel, PipeItem *item, int item_pushed); typedef int (*channel_handle_parsed_proc)(RedChannel *channel, uint32_t size, uint16_t type, void *message); @@ -389,6 +390,9 @@ struct RedChannel { channel_hold_pipe_item_proc hold_item; channel_release_pipe_item_proc release_item; channel_handle_parsed_proc handle_parsed; + channel_send_pipe_item_proc send_item; + + int during_send; #ifdef RED_STATISTICS struct { @@ -8412,9 +8416,9 @@ static void display_channel_push(RedWorker *worker) } } -static void cursor_channel_send_item(CursorChannel *cursor_channel, PipeItem *pipe_item) +static void cursor_channel_send_item(RedChannel *channel, PipeItem *pipe_item) { - RedChannel *channel = &cursor_channel->common.base; + CursorChannel *cursor_channel = SPICE_CONTAINEROF(channel, CursorChannel, common.base); red_ref_channel(channel); red_channel_reset_send_data(channel); @@ -8463,7 +8467,7 @@ static void cursor_channel_push(RedWorker *worker) PipeItem *pipe_item; while ((pipe_item = red_channel_pipe_get((RedChannel *)worker->cursor_channel))) { - cursor_channel_send_item(worker->cursor_channel, pipe_item); + cursor_channel_send_item(&worker->cursor_channel->common.base, pipe_item); } } @@ -9355,6 +9359,7 @@ static RedChannel *__new_channel(RedWorker *worker, int size, uint32_t channel_i RedsStream *stream, int migrate, event_listener_action_proc handler, channel_disconnect_proc disconnect, + channel_send_pipe_item_proc send_item, channel_hold_pipe_item_proc hold_item, channel_release_pipe_item_proc release_item, channel_handle_parsed_proc handle_parsed) @@ -9390,6 +9395,7 @@ static RedChannel *__new_channel(RedWorker *worker, int size, uint32_t channel_i common->listener.action = handler; common->listener.free = free_common_channel_from_listener; channel->disconnect = disconnect; + channel->send_item = send_item; channel->hold_item = hold_item; channel->release_item = release_item; channel->handle_parsed = handle_parsed; @@ -9496,6 +9502,7 @@ static void handle_new_display_channel(RedWorker *worker, RedsStream *stream, in SPICE_CHANNEL_DISPLAY, stream, migrate, handle_channel_events, red_disconnect_display, + display_channel_send_item, display_channel_hold_pipe_item, display_channel_release_item, display_channel_handle_message))) { @@ -9622,6 +9629,7 @@ static void red_connect_cursor(RedWorker *worker, RedsStream *stream, int migrat SPICE_CHANNEL_CURSOR, stream, migrate, handle_channel_events, red_disconnect_cursor, + cursor_channel_send_item, cursor_channel_hold_pipe_item, cursor_channel_release_item, red_channel_handle_message))) { |