From 8b4c9570fa1dcce2e0fd0b4e0db531e1f82394a5 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 11 Jul 2013 16:28:09 +0200 Subject: [PATCH] session-pool: make vmethod to create a session Make a vmethod to create a sessions so that subclasses can create custom session objects --- gst/rtsp-server/rtsp-session-pool.c | 14 +++++++++++++- gst/rtsp-server/rtsp-session-pool.h | 7 ++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/gst/rtsp-server/rtsp-session-pool.c b/gst/rtsp-server/rtsp-session-pool.c index f0b65dc..393ce65 100644 --- a/gst/rtsp-server/rtsp-session-pool.c +++ b/gst/rtsp-server/rtsp-session-pool.c @@ -56,6 +56,8 @@ static void gst_rtsp_session_pool_set_property (GObject * object, guint propid, static void gst_rtsp_session_pool_finalize (GObject * object); static gchar *create_session_id (GstRTSPSessionPool * pool); +static GstRTSPSession *create_session (GstRTSPSessionPool * pool, + const gchar * id); G_DEFINE_TYPE (GstRTSPSessionPool, gst_rtsp_session_pool, G_TYPE_OBJECT); @@ -79,6 +81,7 @@ gst_rtsp_session_pool_class_init (GstRTSPSessionPoolClass * klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); klass->create_session_id = create_session_id; + klass->create_session = create_session; GST_DEBUG_CATEGORY_INIT (rtsp_session_debug, "rtspsessionpool", 0, "GstRTSPSessionPool"); @@ -279,6 +282,12 @@ create_session_id (GstRTSPSessionPool * pool) return g_strndup (id, 16); } +static GstRTSPSession * +create_session (GstRTSPSessionPool * pool, const gchar * id) +{ + return gst_rtsp_session_new (id); +} + /** * gst_rtsp_session_pool_create: * @pool: a #GstRTSPSessionPool @@ -330,7 +339,10 @@ gst_rtsp_session_pool_create (GstRTSPSessionPool * pool) goto collision; } else { /* not found, create session and insert it in the pool */ - result = gst_rtsp_session_new (id); + if (klass->create_session) + result = create_session (pool, id); + if (result == NULL) + goto too_many_sessions; /* take additional ref for the pool */ g_object_ref (result); g_hash_table_insert (priv->sessions, diff --git a/gst/rtsp-server/rtsp-session-pool.h b/gst/rtsp-server/rtsp-session-pool.h index 5132562..82468b1 100644 --- a/gst/rtsp-server/rtsp-session-pool.h +++ b/gst/rtsp-server/rtsp-session-pool.h @@ -22,7 +22,6 @@ #ifndef __GST_RTSP_SESSION_POOL_H__ #define __GST_RTSP_SESSION_POOL_H__ - G_BEGIN_DECLS typedef struct _GstRTSPSessionPool GstRTSPSessionPool; @@ -57,11 +56,13 @@ struct _GstRTSPSessionPool { * GstRTSPSessionPoolClass: * @create_session_id: create a new random session id. Subclasses can create * custom session ids and should not check if the session exists. + * @create_session: make a new session object. */ struct _GstRTSPSessionPoolClass { GObjectClass parent_class; - gchar * (*create_session_id) (GstRTSPSessionPool *pool); + gchar * (*create_session_id) (GstRTSPSessionPool *pool); + GstRTSPSession * (*create_session) (GstRTSPSessionPool *pool, const gchar *id); }; /** @@ -108,7 +109,7 @@ GType gst_rtsp_session_pool_get_type (void); /* creating a session pool */ GstRTSPSessionPool * gst_rtsp_session_pool_new (void); -/* counting sessionss */ +/* counting sessions */ void gst_rtsp_session_pool_set_max_sessions (GstRTSPSessionPool *pool, guint max); guint gst_rtsp_session_pool_get_max_sessions (GstRTSPSessionPool *pool); -- 2.7.4