diff options
author | Olivier CrĂȘte <olivier.crete@collabora.com> | 2013-02-18 19:49:07 -0500 |
---|---|---|
committer | Wim Taymans <wim.taymans@collabora.co.uk> | 2013-03-11 10:41:00 +0100 |
commit | aef8de337cb9ca2f186db1746d550369055b82d0 (patch) | |
tree | 57b1de1897ef168cbc99eb2aa19edf2b174c3c26 | |
parent | cd1f9ec9927ad57714f8b8b351d6603faef2cb10 (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.c | 45 | ||||
-rw-r--r-- | gst-libs/gst/rtsp/gstrtspconnection.h | 3 |
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 */ /** |