From: Olivier CrĂȘte Date: Tue, 19 Feb 2013 00:49:07 +0000 (-0500) Subject: rtspconnection: Add API to disable session ID caching in the connection X-Git-Tag: 1.1.1~290 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=aef8de337cb9ca2f186db1746d550369055b82d0;p=platform%2Fupstream%2Fgst-plugins-base.git 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() --- diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c index aed3b26..84d79b5 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 ab81de9..5073c3e 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 */ /**