summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2010-03-09 14:14:02 +0100
committerAlexander Larsson <alexl@redhat.com>2010-03-09 14:14:02 +0100
commit232dbd8710dc75328c9991d84b323e0cac601562 (patch)
tree35e2c820b059fc35a9f52d2a726f4d377112b09c
parent34e6a0a0d539fb49a03ec01bf11be505c88fcaa1 (diff)
downloadspice-232dbd8710dc75328c9991d84b323e0cac601562.tar.gz
spice-232dbd8710dc75328c9991d84b323e0cac601562.tar.xz
spice-232dbd8710dc75328c9991d84b323e0cac601562.zip
new libspice api: alloc, initi and free spice server instances.
The implementation can't handle multiple spice server instances at the same time right now. The API allows this though, so if we fixup the implementation some day we don't have to change the API.
-rw-r--r--server/reds.c38
-rw-r--r--server/spice.h8
2 files changed, 40 insertions, 6 deletions
diff --git a/server/reds.c b/server/reds.c
index 3375bf1c..8e5f935d 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -5388,7 +5388,7 @@ static void init_vd_agent_resources()
const char *version_string = VERSION;
-void __attribute__ ((visibility ("default"))) spice_init(CoreInterface *core_interface)
+static void do_spice_init(CoreInterface *core_interface)
{
VDInterface *interface = NULL;
@@ -5405,10 +5405,6 @@ void __attribute__ ((visibility ("default"))) spice_init(CoreInterface *core_int
if (core_interface->base.minor_version > 1) {
log_proc = core->log;
}
- if (!(reds = malloc(sizeof(RedsState)))) {
- red_error("reds alloc failed");
- }
- memset(reds, 0, sizeof(RedsState));
reds->listen_socket = -1;
reds->secure_listen_socket = -1;
reds->peer = NULL;
@@ -5476,3 +5472,35 @@ void __attribute__ ((visibility ("default"))) spice_init(CoreInterface *core_int
atexit(reds_exit);
}
+void __attribute__ ((visibility ("default"))) spice_init(CoreInterface *core_interface)
+{
+ spice_server_new();
+ do_spice_init(core_interface);
+}
+
+/* new interface */
+SpiceServer *spice_server_new(void)
+{
+ /* we can't handle multiple instances (yet) */
+ ASSERT(reds == NULL);
+
+ if (!(reds = malloc(sizeof(RedsState)))) {
+ red_error("reds alloc failed");
+ }
+ memset(reds, 0, sizeof(RedsState));
+ return reds;
+}
+
+int spice_server_init(SpiceServer *s, CoreInterface *core)
+{
+ ASSERT(reds == s);
+ do_spice_init(core);
+ red_dispatcher_add_renderer("cairo");
+ return 0;
+}
+
+void spice_server_destroy(SpiceServer *s)
+{
+ ASSERT(reds == s);
+ reds_exit();
+}
diff --git a/server/spice.h b/server/spice.h
index 26de4f73..49a52a8d 100644
--- a/server/spice.h
+++ b/server/spice.h
@@ -20,10 +20,16 @@
#include "vd_interface.h"
+/* old interface */
extern const char *spice_usage_str[];
int spice_parse_args(const char *args);
void spice_init(CoreInterface *core);
-#endif
+/* new interface */
+typedef struct RedsState SpiceServer;
+SpiceServer *spice_server_new(void);
+int spice_server_init(SpiceServer *s, CoreInterface *core);
+void spice_server_destroy(SpiceServer *s);
+#endif