diff options
author | Alon Levy <alevy@redhat.com> | 2011-10-31 17:35:30 +0200 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2011-11-08 16:23:10 +0200 |
commit | 8e049ce3b03c5e0034702d2a4b49b7ca36aaff92 (patch) | |
tree | d4f2032d649bcfb2c053f1808a0cf01ab4c5db51 /server/red_dispatcher.h | |
parent | ca5776f40e60f5bf5c0bf19c242492c2082d3dfc (diff) | |
download | spice-8e049ce3b03c5e0034702d2a4b49b7ca36aaff92.tar.gz spice-8e049ce3b03c5e0034702d2a4b49b7ca36aaff92.tar.xz spice-8e049ce3b03c5e0034702d2a4b49b7ca36aaff92.zip |
server/red_worker: reuse dispatcher
This patch reuses Dispatcher in RedDispatcher. It adds two helpers
to red_worker to keep RedWorker opaque to the outside. The dispatcher is
abused in three places that use the underlying socket directly:
once sending a READY after red_init completes
once for each channel creation, replying with the RedChannel instance
for cursor and display.
FDO Bugzilla: 42463
rfc->v1:
* move callbacks to red_worker.c including registration (Yonit)
* rename dispatcher to red_dispatcher in red_worker.c and red_dispatcher.c
* add accessor red_dispatcher_get_dispatcher
* s/dispatcher_handle_recv/dispatcher_handle_recv_read/ and change sig to
just Dispatcher *dispatcher (was the SpiceCoreInterface one)
* remove SpiceCoreInterface parameter from dispatcher_init (Yonit)
* main_dispatcher needed it for channel_event so it has it in
struct MainDispatcher
* add dispatcher_get_recv_fd for red_worker
Diffstat (limited to 'server/red_dispatcher.h')
-rw-r--r-- | server/red_dispatcher.h | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/server/red_dispatcher.h b/server/red_dispatcher.h index c2582f43..7417aac1 100644 --- a/server/red_dispatcher.h +++ b/server/red_dispatcher.h @@ -32,5 +32,154 @@ int red_dispatcher_add_renderer(const char *name); uint32_t red_dispatcher_qxl_ram_size(void); int red_dispatcher_qxl_count(void); void red_dispatcher_async_complete(struct RedDispatcher *, AsyncCommand *); +struct Dispatcher *red_dispatcher_get_dispatcher(struct RedDispatcher *); + +typedef struct RedWorkerMessageDisplayConnect { + RedClient * client; + RedsStream * stream; + int migration; +} RedWorkerMessageDisplayConnect; + +typedef struct RedWorkerMessageDisplayDisconnect { + RedChannelClient *rcc; +} RedWorkerMessageDisplayDisconnect; + +typedef struct RedWorkerMessageDisplayMigrate { + RedChannelClient *rcc; +} RedWorkerMessageDisplayMigrate; + +typedef struct RedWorkerMessageCursorConnect { + RedClient *client; + RedsStream *stream; + int migration; +} RedWorkerMessageCursorConnect; + +typedef struct RedWorkerMessageCursorDisconnect { + RedChannelClient *rcc; +} RedWorkerMessageCursorDisconnect; + +typedef struct RedWorkerMessageCursorMigrate { + RedChannelClient *rcc; +} RedWorkerMessageCursorMigrate; + +typedef struct RedWorkerMessageUpdate { + uint32_t surface_id; + QXLRect * qxl_area; + QXLRect * qxl_dirty_rects; + uint32_t num_dirty_rects; + uint32_t clear_dirty_region; +} RedWorkerMessageUpdate; + +typedef struct RedWorkerMessageAsync { + AsyncCommand *cmd; +} RedWorkerMessageAsync; + +typedef struct RedWorkerMessageUpdateAsync { + RedWorkerMessageAsync base; + uint32_t surface_id; + QXLRect qxl_area; + uint32_t clear_dirty_region; +} RedWorkerMessageUpdateAsync; + +typedef struct RedWorkerMessageAddMemslot { + QXLDevMemSlot mem_slot; +} RedWorkerMessageAddMemslot; + +typedef struct RedWorkerMessageAddMemslotAsync { + RedWorkerMessageAsync base; + QXLDevMemSlot mem_slot; +} RedWorkerMessageAddMemslotAsync; + +typedef struct RedWorkerMessageDelMemslot { + uint32_t slot_group_id; + uint32_t slot_id; +} RedWorkerMessageDelMemslot; + +typedef struct RedWorkerMessageDestroySurfaces { +} RedWorkerMessageDestroySurfaces; + +typedef struct RedWorkerMessageDestroySurfacesAsync { + RedWorkerMessageAsync base; +} RedWorkerMessageDestroySurfacesAsync; + + +typedef struct RedWorkerMessageDestroyPrimarySurface { + uint32_t surface_id; +} RedWorkerMessageDestroyPrimarySurface; + +typedef struct RedWorkerMessageDestroyPrimarySurfaceAsync { + RedWorkerMessageAsync base; + uint32_t surface_id; +} RedWorkerMessageDestroyPrimarySurfaceAsync; + +typedef struct RedWorkerMessageCreatePrimarySurfaceAsync { + RedWorkerMessageAsync base; + uint32_t surface_id; + QXLDevSurfaceCreate surface; +} RedWorkerMessageCreatePrimarySurfaceAsync; + +typedef struct RedWorkerMessageCreatePrimarySurface { + uint32_t surface_id; + QXLDevSurfaceCreate surface; +} RedWorkerMessageCreatePrimarySurface; + +typedef struct RedWorkerMessageResetImageCache { +} RedWorkerMessageResetImageCache; + +typedef struct RedWorkerMessageResetCursor { +} RedWorkerMessageResetCursor; + +typedef struct RedWorkerMessageWakeup { +} RedWorkerMessageWakeup; + +typedef struct RedWorkerMessageOom { +} RedWorkerMessageOom; + +typedef struct RedWorkerMessageStart { +} RedWorkerMessageStart; + +typedef struct RedWorkerMessageFlushSurfacesAsync { + RedWorkerMessageAsync base; +} RedWorkerMessageFlushSurfacesAsync; + +typedef struct RedWorkerMessageStop { +} RedWorkerMessageStop; + +/* this command is sync, so it's ok to pass a pointer */ +typedef struct RedWorkerMessageLoadvmCommands { + uint32_t count; + QXLCommandExt *ext; +} RedWorkerMessageLoadvmCommands; + +typedef struct RedWorkerMessageSetCompression { + spice_image_compression_t image_compression; +} RedWorkerMessageSetCompression; + +typedef struct RedWorkerMessageSetStreamingVideo { + uint32_t streaming_video; +} RedWorkerMessageSetStreamingVideo; + +typedef struct RedWorkerMessageSetMouseMode { + uint32_t mode; +} RedWorkerMessageSetMouseMode; + +typedef struct RedWorkerMessageDisplayChannelCreate { +} RedWorkerMessageDisplayChannelCreate; + +typedef struct RedWorkerMessageCursorChannelCreate { +} RedWorkerMessageCursorChannelCreate; + +typedef struct RedWorkerMessageDestroySurfaceWait { + uint32_t surface_id; +} RedWorkerMessageDestroySurfaceWait; + +typedef struct RedWorkerMessageDestroySurfaceWaitAsync { + RedWorkerMessageAsync base; + uint32_t surface_id; +} RedWorkerMessageDestroySurfaceWaitAsync; + +typedef struct RedWorkerMessageResetMemslots { +} RedWorkerMessageResetMemslots; + #endif |