summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2013-02-18 19:49:07 -0500
committerWim Taymans <wim.taymans@collabora.co.uk>2013-03-11 10:41:00 +0100
commitaef8de337cb9ca2f186db1746d550369055b82d0 (patch)
tree57b1de1897ef168cbc99eb2aa19edf2b174c3c26
parentcd1f9ec9927ad57714f8b8b351d6603faef2cb10 (diff)
rtspconnection: Add API to disable session ID caching in the connection
This is necessary to allow having more than one session in the same connection. API: gst_rtsp_connection_set_remember_session_id() API: gst_rtsp_connection_get_remember_session_id()
-rw-r--r--gst-libs/gst/rtsp/gstrtspconnection.c45
-rw-r--r--gst-libs/gst/rtsp/gstrtspconnection.h3
2 files changed, 46 insertions, 2 deletions
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c
index aed3b2670..84d79b5f0 100644
--- a/gst-libs/gst/rtsp/gstrtspconnection.c
+++ b/gst-libs/gst/rtsp/gstrtspconnection.c
@@ -126,6 +126,8 @@ struct _GstRTSPConnection
gchar *initial_buffer;
gsize initial_buffer_offset;
+ gboolean remember_session_id; /* remember the session id or not */
+
/* Session state */
gint cseq; /* sequence number */
gchar session_id[512]; /* session id */
@@ -211,6 +213,8 @@ gst_rtsp_connection_create (const GstRTSPUrl * url, GstRTSPConnection ** conn)
newconn->timeout = 60;
newconn->cseq = 1;
+ newconn->remember_session_id = TRUE;
+
newconn->auth_method = GST_RTSP_AUTH_NONE;
newconn->username = NULL;
newconn->passwd = NULL;
@@ -1864,8 +1868,10 @@ build_next (GstRTSPBuilder * builder, GstRTSPMessage * message,
}
/* make sure to not overflow */
- strncpy (conn->session_id, session_id, maxlen);
- conn->session_id[maxlen] = '\0';
+ if (conn->remember_session_id) {
+ strncpy (conn->session_id, session_id, maxlen);
+ conn->session_id[maxlen] = '\0';
+ }
}
res = builder->status;
goto done;
@@ -2844,6 +2850,41 @@ gst_rtsp_connection_do_tunnel (GstRTSPConnection * conn,
return GST_RTSP_OK;
}
+/**
+ * gst_rtsp_connection_set_remember_session_id:
+ * @conn: a #GstRTSPConnection
+ * @remember: %TRUE if the connection should remember the session id
+ *
+ * Sets if the #GstRTSPConnection should remember the session id from the last
+ * response received and force it onto any further requests.
+ *
+ * The default value is %TRUE
+ */
+
+void
+gst_rtsp_connection_set_remember_session_id (GstRTSPConnection * conn,
+ gboolean remember)
+{
+ conn->remember_session_id = remember;
+ if (!remember)
+ conn->session_id[0] = '\0';
+}
+
+/**
+ * gst_rtsp_connection_get_remember_session_id:
+ * @conn: a #GstRTSPConnection
+ *
+ * Returns: %TRUE if the #GstRTSPConnection remembers the session id in the
+ * last response to set it on any further request.
+ */
+
+gboolean
+gst_rtsp_connection_get_remember_session_id (GstRTSPConnection * conn)
+{
+ return conn->remember_session_id;
+}
+
+
#define READ_ERR (G_IO_HUP | G_IO_ERR | G_IO_NVAL)
#define READ_COND (G_IO_IN | READ_ERR)
#define WRITE_ERR (G_IO_HUP | G_IO_ERR | G_IO_NVAL)
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.h b/gst-libs/gst/rtsp/gstrtspconnection.h
index ab81de9fc..5073c3e76 100644
--- a/gst-libs/gst/rtsp/gstrtspconnection.h
+++ b/gst-libs/gst/rtsp/gstrtspconnection.h
@@ -131,6 +131,9 @@ gboolean gst_rtsp_connection_is_tunneled (const GstRTSPConnection *
const gchar * gst_rtsp_connection_get_tunnelid (const GstRTSPConnection *conn);
GstRTSPResult gst_rtsp_connection_do_tunnel (GstRTSPConnection *conn, GstRTSPConnection *conn2);
+void gst_rtsp_connection_set_remember_session_id (GstRTSPConnection *conn, gboolean remember);
+gboolean gst_rtsp_connection_get_remember_session_id (GstRTSPConnection *conn);
+
/* async IO */
/**