diff --git a/gst/rtsp-server/rtsp-client.c b/gst/rtsp-server/rtsp-client.c index 542c44dbfb..6af4058125 100644 --- a/gst/rtsp-server/rtsp-client.c +++ b/gst/rtsp-server/rtsp-client.c @@ -1780,6 +1780,22 @@ client_session_finalized (GstRTSPClient * client, GstRTSPSession * session) } } +static GPrivate state_key; + +/** + * gst_rtsp_client_state_get_current: + * + * Get the current #GstRTSPClientState. This object is retrieved from the + * current thread that is handling the request for a client. + * + * Returns: a #GstRTSPClientState + */ +GstRTSPClientState * +gst_rtsp_client_state_get_current (void) +{ + return g_private_get (&state_key); +} + static void handle_request (GstRTSPClient * client, GstRTSPMessage * request) { @@ -1794,8 +1810,11 @@ handle_request (GstRTSPClient * client, GstRTSPMessage * request) GstRTSPMessage response = { 0 }; gchar *sessid; + state.client = client; state.request = request; state.response = &response; + state.auth = priv->auth; + g_private_set (&state_key, &state); if (gst_debug_category_get_threshold (rtsp_client_debug) >= GST_LEVEL_LOG) { gst_rtsp_message_dump (request); @@ -1883,6 +1902,7 @@ handle_request (GstRTSPClient * client, GstRTSPMessage * request) } done: + g_private_set (&state_key, NULL); if (session) g_object_unref (session); if (uri) diff --git a/gst/rtsp-server/rtsp-client.h b/gst/rtsp-server/rtsp-client.h index d772b389df..a7311c234b 100644 --- a/gst/rtsp-server/rtsp-client.h +++ b/gst/rtsp-server/rtsp-client.h @@ -49,6 +49,7 @@ typedef struct _GstRTSPClientPrivate GstRTSPClientPrivate; /** * GstRTSPClientState: + * @client: the client * @request: the complete request * @uri: the complete url parsed from @request * @method: the parsed method of @uri @@ -64,6 +65,7 @@ typedef struct _GstRTSPClientPrivate GstRTSPClientPrivate; * Information passed around containing the client state of a request. */ struct _GstRTSPClientState { + GstRTSPClient *client; GstRTSPMessage *request; GstRTSPUrl *uri; GstRTSPMethod method; @@ -77,6 +79,8 @@ struct _GstRTSPClientState { GstRTSPMessage *response; }; +GstRTSPClientState * gst_rtsp_client_state_get_current (void); + /** * GstRTSPClientSendFunc: * @client: a #GstRTSPClient