summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2013-03-24 15:24:06 -0700
committerDavid Schleef <ds@schleef.org>2013-03-24 15:24:06 -0700
commit7633efc92537c64429f260c7fbcad404b90ce908 (patch)
treeaec35de5a3e8c9fa6fe40b6f0850386d8ab117b4
parent2b32e581e48c248c80caa51213b264418ab9623e (diff)
config: convert to GObject
-rw-r--r--gst-streaming-server/gss-config.c83
-rw-r--r--gst-streaming-server/gss-config.h40
-rw-r--r--tools/gss-server.c2
-rw-r--r--tools/vts-server.c6
4 files changed, 116 insertions, 15 deletions
diff --git a/gst-streaming-server/gss-config.c b/gst-streaming-server/gss-config.c
index d4b6fc5..4041bcc 100644
--- a/gst-streaming-server/gss-config.c
+++ b/gst-streaming-server/gss-config.c
@@ -34,14 +34,80 @@
#define CONFIG_FILE "config"
+static void gss_config_finalize (GObject * object);
+static void gss_config_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gss_config_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+
+GssConfig *gss_config_global_config;
+
+G_DEFINE_TYPE (GssConfig, gss_config, G_TYPE_OBJECT);
+
+
+static void
+gss_config_init (GssConfig * config)
+{
+
+}
+
+static void
+gss_config_class_init (GssConfigClass * config_class)
+{
+ G_OBJECT_CLASS (config_class)->set_property = gss_config_set_property;
+ G_OBJECT_CLASS (config_class)->get_property = gss_config_get_property;
+ G_OBJECT_CLASS (config_class)->finalize = gss_config_finalize;
+
+}
+
+static void
+gss_config_finalize (GObject * object)
+{
+ GssConfig *config = GSS_CONFIG (object);
+
+ g_list_free (config->config_list);
+ config->config_list = NULL;
+
+ G_OBJECT_CLASS (gss_config_parent_class)->finalize (object);
+}
+
+static void
+gss_config_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GssConfig *config;
+
+ config = GSS_CONFIG (object);
+ (void) config;
+
+ switch (prop_id) {
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+}
+
+static void
+gss_config_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GssConfig *config;
+
+ config = GSS_CONFIG (object);
+ (void) config;
+
+ switch (prop_id) {
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+}
-GList *config_list;
void
-gss_config_free_all (void)
+_gss_config_init (void)
{
- g_list_free (config_list);
- config_list = NULL;
+ gss_config_global_config = g_object_new (GSS_TYPE_CONFIG, NULL);
}
void
@@ -49,7 +115,8 @@ gss_config_attach (GObject * object)
{
g_return_if_fail (G_IS_OBJECT (object));
- config_list = g_list_prepend (config_list, object);
+ gss_config_global_config->config_list =
+ g_list_prepend (gss_config_global_config->config_list, object);
}
@@ -460,7 +527,7 @@ gss_config_get_resource (GssTransaction * t)
g_string_append (s, "</thead>\n");
g_string_append (s, "<tbody>\n");
- for (g = config_list; g; g = g_list_next (g)) {
+ for (g = gss_config_global_config->config_list; g; g = g_list_next (g)) {
GObject *object = g->data;
GParamSpec **pspecs;
int n_properties;
@@ -628,7 +695,7 @@ gss_config_append_config_file (GString * s)
ns = xmlNewNs (doc->xmlRootNode,
(xmlChar *) "http://entropywave.com/oberon/1.0/", (xmlChar *) "ew");
- for (g = config_list; g; g = g_list_next (g)) {
+ for (g = gss_config_global_config->config_list; g; g = g_list_next (g)) {
GObject *object = g->data;
gss_config_dump_object (object, ns, doc->xmlRootNode);
@@ -723,7 +790,7 @@ static GObject *
gss_config_get (const char *name)
{
GList *g;
- for (g = config_list; g; g = g->next) {
+ for (g = gss_config_global_config->config_list; g; g = g->next) {
if (strcmp (GSS_OBJECT_NAME (g->data), name) == 0) {
return (GObject *) g->data;
}
diff --git a/gst-streaming-server/gss-config.h b/gst-streaming-server/gss-config.h
index befe476..be68322 100644
--- a/gst-streaming-server/gss-config.h
+++ b/gst-streaming-server/gss-config.h
@@ -22,6 +22,7 @@
#define _GSS_CONFIG_H_
#include <glib-object.h>
+#include <libxml/parser.h>
#include "gss-session.h"
#include "gss-transaction.h"
@@ -29,22 +30,53 @@
G_BEGIN_DECLS
+#define GSS_TYPE_CONFIG \
+ (gss_config_get_type())
+#define GSS_CONFIG(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GSS_TYPE_CONFIG,GssConfig))
+#define GSS_CONFIG_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GSS_TYPE_CONFIG,GssConfigClass))
+#define GSS_CONFIG_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), GSS_TYPE_CONFIG, GssConfigClass))
+#define GSS_IS_CONFIG(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GSS_TYPE_CONFIG))
+#define GSS_IS_CONFIG_CLASS(obj) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GSS_TYPE_CONFIG))
+
+
#define GSS_PARAM_SECURE (1<<27)
#define GSS_PARAM_MULTILINE (1<<28)
#define GSS_PARAM_HIDE (1<<29)
#define GSS_PARAM_FILE_UPLOAD (1<<30)
typedef struct _GssConfig GssConfig;
-
struct _GssConfig
{
- GObject *object;
+ GObject object;
+
+ xmlDocPtr doc;
+ GList *config_list;
+};
+
+typedef struct _GssConfigClass GssConfigClass;
+struct _GssConfigClass
+{
+ GObjectClass object_class;
};
+extern GssConfig *gss_config_global_config;
+
+GType gss_config_get_type (void);
+
+void _gss_config_init (void);
+
+GObject *gss_config_build_object (GssConfig *config, GType type);
+
void gss_config_attach (GObject *object);
-void gss_config_free_all (void);
+void gss_config_save_config_file (void);
+void gss_config_load_config_file (void);
void gss_config_append_config_block (GObject *object, GssTransaction *t,
gboolean show);
@@ -53,8 +85,6 @@ GHashTable * gss_config_get_post_hash (GssTransaction *t);
gboolean gss_config_handle_post_hash (GObject * object, GssTransaction * t,
GHashTable *hash);
void gss_config_add_server_resources (GssServer *server);
-void gss_config_save_config_file (void);
-void gss_config_load_config_file (void);
void gss_config_post_resource (GssTransaction * t);
diff --git a/tools/gss-server.c b/tools/gss-server.c
index 37ea523..74563be 100644
--- a/tools/gss-server.c
+++ b/tools/gss-server.c
@@ -151,6 +151,8 @@ main (int argc, char *argv[])
}
g_option_context_free (context);
+ _gss_config_init ();
+
server = gss_server_new ();
gss_object_set_name (GSS_OBJECT (server), "admin.server");
diff --git a/tools/vts-server.c b/tools/vts-server.c
index 4b622ee..f58fe7a 100644
--- a/tools/vts-server.c
+++ b/tools/vts-server.c
@@ -42,8 +42,8 @@
#undef USE_EW_CODECS
-#define STREAM_TYPE GSS_STREAM_TYPE_OGG_THEORA_VORBIS
-//#define STREAM_TYPE GSS_STREAM_TYPE_WEBM
+//#define STREAM_TYPE GSS_STREAM_TYPE_OGG_THEORA_VORBIS
+#define STREAM_TYPE GSS_STREAM_TYPE_WEBM
//#define STREAM_TYPE GSS_STREAM_TYPE_M2TS_H264BASE_AAC
@@ -162,6 +162,8 @@ main (int argc, char *argv[])
}
g_option_context_free (context);
+ _gss_config_init ();
+
server = gss_server_new ();
gss_object_set_name (GSS_OBJECT (server), "admin.server");