From 49bd0fb8c9f6c55b41c3394b7c688bbf6a351e96 Mon Sep 17 00:00:00 2001 From: Hyunjun Date: Wed, 1 Apr 2015 18:28:17 +0900 Subject: [PATCH] 1. Pause/Resume trigger method implementation 2. Fix to send keep-alive message Change-Id: Ie684813eb50c0b7e6472f35f4df944696b1b4723 --- gst/rtsp-server/rtsp-client-wfd.c | 92 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 3 deletions(-) diff --git a/gst/rtsp-server/rtsp-client-wfd.c b/gst/rtsp-server/rtsp-client-wfd.c index 97d5fba..27607ef 100644 --- a/gst/rtsp-server/rtsp-client-wfd.c +++ b/gst/rtsp-server/rtsp-client-wfd.c @@ -1153,6 +1153,8 @@ typedef enum M4_RES_MSG, M5_REQ_MSG, TEARDOWN_TRIGGER, + PLAY_TRIGGER, + PAUSE_TRIGGER, } GstWFDMessageType; static gboolean @@ -1462,6 +1464,16 @@ _set_wfd_message_body (GstRTSPWFDClient * client, GstWFDMessageType msg_type, g_string_append (buf, "\r\n"); *len = buf->len; *data = g_string_free (buf, FALSE); + } else if (msg_type == PLAY_TRIGGER) { + g_string_append (buf, "wfd_trigger_method: PLAY"); + g_string_append (buf, "\r\n"); + *len = buf->len; + *data = g_string_free (buf, FALSE); + } else if (msg_type == PAUSE_TRIGGER) { + g_string_append (buf, "wfd_trigger_method: PAUSE"); + g_string_append (buf, "\r\n"); + *len = buf->len; + *data = g_string_free (buf, FALSE); } else { return; } @@ -1701,6 +1713,80 @@ prepare_trigger_request (GstRTSPWFDClient * client, GstRTSPMessage * request, g_free (msg); break; } + case WFD_TRIGGER_PLAY:{ + gchar *msg; + guint msglen = 0; + GString *msglength; + + /* add content type */ + res = + gst_rtsp_message_add_header (request, GST_RTSP_HDR_CONTENT_TYPE, + "text/parameters"); + if (res != GST_RTSP_OK) { + GST_ERROR_OBJECT (client, "Failed to add header to rtsp request..."); + goto error; + } + + _set_wfd_message_body (client, PLAY_TRIGGER, &msg, &msglen); + msglength = g_string_new (""); + g_string_append_printf (msglength, "%d", msglen); + GST_DEBUG ("Trigger PLAY server side message body: %s", msg); + + /* add content-length type */ + res = + gst_rtsp_message_add_header (request, GST_RTSP_HDR_CONTENT_LENGTH, + g_string_free (msglength, FALSE)); + if (res != GST_RTSP_OK) { + GST_ERROR_OBJECT (client, "Failed to add header to rtsp message..."); + goto error; + } + + res = gst_rtsp_message_set_body (request, (guint8 *) msg, msglen); + if (res != GST_RTSP_OK) { + GST_ERROR_OBJECT (client, "Failed to add header to rtsp message..."); + goto error; + } + + g_free (msg); + break; + } + case WFD_TRIGGER_PAUSE:{ + gchar *msg; + guint msglen = 0; + GString *msglength; + + /* add content type */ + res = + gst_rtsp_message_add_header (request, GST_RTSP_HDR_CONTENT_TYPE, + "text/parameters"); + if (res != GST_RTSP_OK) { + GST_ERROR_OBJECT (client, "Failed to add header to rtsp request..."); + goto error; + } + + _set_wfd_message_body (client, PAUSE_TRIGGER, &msg, &msglen); + msglength = g_string_new (""); + g_string_append_printf (msglength, "%d", msglen); + GST_DEBUG ("Trigger PAUSE server side message body: %s", msg); + + /* add content-length type */ + res = + gst_rtsp_message_add_header (request, GST_RTSP_HDR_CONTENT_LENGTH, + g_string_free (msglength, FALSE)); + if (res != GST_RTSP_OK) { + GST_ERROR_OBJECT (client, "Failed to add header to rtsp message..."); + goto error; + } + + res = gst_rtsp_message_set_body (request, (guint8 *) msg, msglen); + if (res != GST_RTSP_OK) { + GST_ERROR_OBJECT (client, "Failed to add header to rtsp message..."); + goto error; + } + + g_free (msg); + break; + } /* TODO-WFD: implement to handle other trigger type */ default:{ } @@ -2065,14 +2151,14 @@ keep_alive_condition(gpointer userdata) GST_DEBUG("sending keep alive message"); res = handle_M16_message(client); - if(res) { + if(res == GST_RTSP_OK) { priv->keep_alive_flag = FALSE; - } - else { + } else { GST_ERROR_OBJECT (client, "Failed to send Keep Alive Message"); g_mutex_unlock(&priv->keep_alive_lock); return FALSE; } + g_mutex_unlock(&priv->keep_alive_lock); return TRUE; } -- 2.7.4