diff options
author | David Schleef <ds@schleef.org> | 2013-03-24 15:24:06 -0700 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2013-03-24 15:24:06 -0700 |
commit | 7633efc92537c64429f260c7fbcad404b90ce908 (patch) | |
tree | aec35de5a3e8c9fa6fe40b6f0850386d8ab117b4 | |
parent | 2b32e581e48c248c80caa51213b264418ab9623e (diff) |
config: convert to GObject
-rw-r--r-- | gst-streaming-server/gss-config.c | 83 | ||||
-rw-r--r-- | gst-streaming-server/gss-config.h | 40 | ||||
-rw-r--r-- | tools/gss-server.c | 2 | ||||
-rw-r--r-- | tools/vts-server.c | 6 |
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"); |