summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2012-06-06 11:52:53 +0300
committerJonathon Jongsma <jjongsma@redhat.com>2015-01-09 14:21:13 -0600
commit8f5427110088e82ecd039c3f3184ed076a68295c (patch)
treebc747dee11fe22dd07ddd4fd22a58733e9fff76c
parentb3b499c5eb1ca211f0ec10f03ef2ebe230e3970a (diff)
downloadspice-8f5427110088e82ecd039c3f3184ed076a68295c.tar.gz
spice-8f5427110088e82ecd039c3f3184ed076a68295c.tar.xz
spice-8f5427110088e82ecd039c3f3184ed076a68295c.zip
server/dispatcher: add extra_dispatcher, hack for red_record
-rw-r--r--server/dispatcher.c10
-rw-r--r--server/dispatcher.h8
2 files changed, 18 insertions, 0 deletions
diff --git a/server/dispatcher.c b/server/dispatcher.c
index ad9726b2..e0fda1d4 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->extra_handler) {
+ dispatcher->extra_handler(dispatcher->opaque, type, (void *)payload);
+ }
if (msg->handler) {
msg->handler(dispatcher->opaque, type, (void *)payload);
} else {
@@ -223,6 +226,13 @@ void dispatcher_register_handler(Dispatcher *dispatcher, uint32_t message_type,
}
}
+void dispatcher_register_extra_handler(
+ Dispatcher *dispatcher,
+ dispatcher_handle_message extra_handler)
+{
+ dispatcher->extra_handler = extra_handler;
+}
+
#ifdef DEBUG_DISPATCHER
static void dummy_handler(int bla)
{
diff --git a/server/dispatcher.h b/server/dispatcher.h
index 85cbd26a..edf6babe 100644
--- a/server/dispatcher.h
+++ b/server/dispatcher.h
@@ -33,6 +33,7 @@ struct Dispatcher {
size_t payload_size; /* used to track realloc calls */
void *opaque;
dispatcher_handle_async_done handle_async_done;
+ dispatcher_handle_message extra_handler;
};
/*
@@ -86,6 +87,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_extra_handler(Dispatcher *dispatcher,
+ dispatcher_handle_message handler);
+
+/*
* dispatcher_handle_recv_read
* @dispatcher: Dispatcher instance
*/