Move public declaration (stream_device_connect) from char-device.h
to a new stream-device.h.
Add type declaration for StreamDevice.
This allows to use the type outside the implementation file and
make easier to extend the interface without changing char-device.h
header.

Signed-off-by: Frediano Ziglio <fzig...@redhat.com>
---
 server/Makefile.am     |  1 +
 server/char-device.h   |  1 -
 server/reds.c          |  3 ++-
 server/stream-device.c | 20 ++++----------------
 server/stream-device.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 56 insertions(+), 18 deletions(-)
 create mode 100644 server/stream-device.h

diff --git a/server/Makefile.am b/server/Makefile.am
index 38c346c2..a7f6e2a5 100644
--- a/server/Makefile.am
+++ b/server/Makefile.am
@@ -168,6 +168,7 @@ libserver_la_SOURCES =                              \
        stream-channel.c                        \
        stream-channel.h                        \
        stream-device.c                         \
+       stream-device.h                         \
        sw-canvas.c                             \
        tree.c                                  \
        tree.h                                  \
diff --git a/server/char-device.h b/server/char-device.h
index 54a1ef93..dccd576d 100644
--- a/server/char-device.h
+++ b/server/char-device.h
@@ -236,7 +236,6 @@ RedCharDevice *spicevmc_device_connect(RedsState *reds,
                                        uint8_t channel_type);
 void spicevmc_device_disconnect(RedsState *reds,
                                 SpiceCharDeviceInstance *char_device);
-RedCharDevice *stream_device_connect(RedsState *reds, SpiceCharDeviceInstance 
*sin);
 
 SpiceCharDeviceInterface 
*spice_char_device_get_interface(SpiceCharDeviceInstance *instance);
 
diff --git a/server/reds.c b/server/reds.c
index a31ed4e9..9660476c 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -74,6 +74,7 @@
 #include "red-client.h"
 #include "glib-compat.h"
 #include "net-utils.h"
+#include "stream-device.h"
 
 #define REDS_MAX_STAT_NODES 100
 
@@ -3108,7 +3109,7 @@ static int 
spice_server_char_device_add_interface(SpiceServer *reds,
         if (strcmp(char_device->portname, "org.spice-space.webdav.0") == 0) {
             dev_state = spicevmc_device_connect(reds, char_device, 
SPICE_CHANNEL_WEBDAV);
         } else if (strcmp(char_device->portname, "com.redhat.stream.0") == 0) {
-            dev_state = stream_device_connect(reds, char_device);
+            dev_state = RED_CHAR_DEVICE(stream_device_connect(reds, 
char_device));
         } else {
             dev_state = spicevmc_device_connect(reds, char_device, 
SPICE_CHANNEL_PORT);
         }
diff --git a/server/stream-device.c b/server/stream-device.c
index dc58dce6..fd73e784 100644
--- a/server/stream-device.c
+++ b/server/stream-device.c
@@ -19,25 +19,14 @@
 #include <config.h>
 #endif
 
+#include "stream-device.h"
+
 #include <spice/stream-device.h>
 
-#include "char-device.h"
 #include "stream-channel.h"
 #include "cursor-channel.h"
 #include "reds.h"
 
-#define TYPE_STREAM_DEVICE stream_device_get_type()
-
-#define STREAM_DEVICE(obj) \
-    (G_TYPE_CHECK_INSTANCE_CAST((obj), TYPE_STREAM_DEVICE, StreamDevice))
-#define STREAM_DEVICE_CLASS(klass) \
-    (G_TYPE_CHECK_CLASS_CAST((klass), TYPE_STREAM_DEVICE, StreamDeviceClass))
-#define STREAM_DEVICE_GET_CLASS(obj) \
-    (G_TYPE_INSTANCE_GET_CLASS((obj), TYPE_STREAM_DEVICE, StreamDeviceClass))
-
-typedef struct StreamDevice StreamDevice;
-typedef struct StreamDeviceClass StreamDeviceClass;
-
 struct StreamDevice {
     RedCharDevice parent;
 
@@ -64,7 +53,6 @@ struct StreamDeviceClass {
     RedCharDeviceClass parent_class;
 };
 
-static GType stream_device_get_type(void) G_GNUC_CONST;
 static StreamDevice *stream_device_new(SpiceCharDeviceInstance *sin, RedsState 
*reds);
 
 G_DEFINE_TYPE(StreamDevice, stream_device, RED_TYPE_CHAR_DEVICE)
@@ -504,7 +492,7 @@ stream_device_stream_queue_stat(void *opaque, const 
StreamQueueStat *stats G_GNU
     }
 }
 
-RedCharDevice *
+StreamDevice *
 stream_device_connect(RedsState *reds, SpiceCharDeviceInstance *sin)
 {
     SpiceCharDeviceInterface *sif;
@@ -516,7 +504,7 @@ stream_device_connect(RedsState *reds, 
SpiceCharDeviceInstance *sin)
         sif->state(sin, 1);
     }
 
-    return RED_CHAR_DEVICE(dev);
+    return dev;
 }
 
 static void
diff --git a/server/stream-device.h b/server/stream-device.h
new file mode 100644
index 00000000..501629c1
--- /dev/null
+++ b/server/stream-device.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/*
+   Copyright (C) 2018 Red Hat, Inc.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef STREAM_DEVICE_H
+#define STREAM_DEVICE_H
+
+#include "char-device.h"
+
+G_BEGIN_DECLS
+
+/**
+ * This type it's a RedCharDevice class.
+ * A pointer to StreamDevice can be converted to a RedCharDevice.
+ */
+typedef struct StreamDevice StreamDevice;
+typedef struct StreamDeviceClass StreamDeviceClass;
+
+#define TYPE_STREAM_DEVICE stream_device_get_type()
+
+#define STREAM_DEVICE(obj) \
+    (G_TYPE_CHECK_INSTANCE_CAST((obj), TYPE_STREAM_DEVICE, StreamDevice))
+#define STREAM_DEVICE_CLASS(klass) \
+    (G_TYPE_CHECK_CLASS_CAST((klass), TYPE_STREAM_DEVICE, StreamDeviceClass))
+#define IS_STREAM_DEVICE(obj) \
+    (G_TYPE_CHECK_INSTANCE_TYPE((obj), TYPE_STREAM_DEVICE))
+#define STREAM_DEVICE_GET_CLASS(obj) \
+    (G_TYPE_INSTANCE_GET_CLASS((obj), TYPE_STREAM_DEVICE, StreamDeviceClass))
+
+GType stream_device_get_type(void) G_GNUC_CONST;
+StreamDevice *stream_device_connect(RedsState *reds, SpiceCharDeviceInstance 
*sin);
+
+G_END_DECLS
+
+#endif /* STREAM_DEVICE_H */
-- 
2.14.3

_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to