[gst-cvs] gst-plugins-ugly: realrtsp: add more headers

Wim Taymans wtay at kemper.freedesktop.org
Wed Mar 25 08:39:55 PDT 2009


Module: gst-plugins-ugly
Branch: master
Commit: 1731c58b9b7d021683bfc18a8dfbcc10b152e5e7
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-ugly/commit/?id=1731c58b9b7d021683bfc18a8dfbcc10b152e5e7

Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date:   Wed Mar 25 16:39:06 2009 +0100

realrtsp: add more headers

Parse the ETag from the describe method and pass the sessionid as the value for
the If-Match header is subsequent setup calls.
Fixes support for more RealMedia RTSP streams.

---

 gst/realmedia/rtspreal.c |   16 ++++++++++++++++
 gst/realmedia/rtspreal.h |    1 +
 2 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/gst/realmedia/rtspreal.c b/gst/realmedia/rtspreal.c
index 9de00a9..9b5228f 100644
--- a/gst/realmedia/rtspreal.c
+++ b/gst/realmedia/rtspreal.c
@@ -127,6 +127,8 @@ rtsp_ext_real_before_send (GstRTSPExtension * ext, GstRTSPMessage * request)
           "Linux_2.4_6.0.9.1235_play32_RN01_EN_586");
       gst_rtsp_message_add_header (request, GST_RTSP_HDR_MAX_ASM_WIDTH, "1");
       gst_rtsp_message_add_header (request, GST_RTSP_HDR_LANGUAGE, "en-US");
+      gst_rtsp_message_add_header (request, GST_RTSP_HDR_REQUIRE,
+          "com.real.retain-entity-for-setup");
       break;
     }
     case GST_RTSP_SETUP:
@@ -136,6 +138,7 @@ rtsp_ext_real_before_send (GstRTSPExtension * ext, GstRTSPMessage * request)
             g_strdup_printf ("%s, sd=%s", ctx->challenge2, ctx->checksum);
         gst_rtsp_message_add_header (request, GST_RTSP_HDR_REAL_CHALLENGE2,
             value);
+        gst_rtsp_message_add_header (request, GST_RTSP_HDR_IF_MATCH, ctx->etag);
         g_free (value);
       }
       break;
@@ -169,6 +172,19 @@ rtsp_ext_real_after_send (GstRTSPExtension * ext, GstRTSPMessage * req,
           ctx->checksum, challenge1);
       break;
     }
+    case GST_RTSP_DESCRIBE:
+    {
+      gchar *etag = NULL;
+      guint len;
+
+      gst_rtsp_message_get_header (resp, GST_RTSP_HDR_ETAG, &etag, 0);
+      if (etag) {
+        len = sizeof (ctx->etag);
+        strncpy (ctx->etag, etag, len);
+        ctx->etag[len - 1] = '\0';
+      }
+      break;
+    }
     default:
       break;
   }
diff --git a/gst/realmedia/rtspreal.h b/gst/realmedia/rtspreal.h
index 9f7dc42..6605f14 100644
--- a/gst/realmedia/rtspreal.h
+++ b/gst/realmedia/rtspreal.h
@@ -64,6 +64,7 @@ struct _GstRTSPReal {
 
   gchar checksum[34];
   gchar challenge2[64];
+  gchar etag[64];
   gboolean isreal;
 
   guint   n_streams;





More information about the Gstreamer-commits mailing list