[Spice-devel] [PATCH v5 2/6] server/dispatcher: add extra_dispatcher, hack for red_record

Frediano Ziglio fziglio at redhat.com
Fri Aug 21 01:46:04 PDT 2015


From: Alon Levy <alon at pobox.com>

Signed-off-by: Alon Levy <alon at pobox.com>
---
 server/dispatcher.c | 10 ++++++++++
 server/dispatcher.h | 12 ++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/server/dispatcher.c b/server/dispatcher.c
index 298f5f9..d6c03ca 100644
--- a/server/dispatcher.c
+++ b/server/dispatcher.c
@@ -135,6 +135,9 @@ static int dispatcher_handle_single_read(Dispatcher *dispatcher)
         /* TODO: close socketpair? */
         return 0;
     }
+    if (dispatcher->any_handler) {
+        dispatcher->any_handler(dispatcher->opaque, type, payload);
+    }
     if (msg->handler) {
         msg->handler(dispatcher->opaque, (void *)payload);
     } else {
@@ -223,6 +226,13 @@ void dispatcher_register_handler(Dispatcher *dispatcher, uint32_t message_type,
     }
 }
 
+void dispatcher_register_universal_handler(
+                               Dispatcher *dispatcher,
+                               dispatcher_handle_any_message any_handler)
+{
+    dispatcher->any_handler = any_handler;
+}
+
 #ifdef DEBUG_DISPATCHER
 static void dummy_handler(int bla)
 {
diff --git a/server/dispatcher.h b/server/dispatcher.h
index 1b389bd..8cfa1d4 100644
--- a/server/dispatcher.h
+++ b/server/dispatcher.h
@@ -8,6 +8,10 @@ typedef struct Dispatcher Dispatcher;
 typedef void (*dispatcher_handle_message)(void *opaque,
                                           void *payload);
 
+typedef void (*dispatcher_handle_any_message)(void *opaque,
+                                              uint32_t message_type,
+                                              void *payload);
+
 typedef void (*dispatcher_handle_async_done)(void *opaque,
                                              uint32_t message_type,
                                              void *payload);
@@ -32,6 +36,7 @@ struct Dispatcher {
     size_t payload_size; /* used to track realloc calls */
     void *opaque;
     dispatcher_handle_async_done handle_async_done;
+    dispatcher_handle_any_message any_handler;
 };
 
 /*
@@ -85,6 +90,13 @@ void dispatcher_register_async_done_callback(
                                     dispatcher_handle_async_done handler);
 
 /*
+ * Hack to allow red_record to see the message being sent so it can record
+ * it to file.
+ */
+void dispatcher_register_universal_handler(Dispatcher *dispatcher,
+                                    dispatcher_handle_any_message handler);
+
+/*
  *  dispatcher_handle_recv_read
  *  @dispatcher: Dispatcher instance
  */
-- 
2.4.3



More information about the Spice-devel mailing list