summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleix Conchillo FlaquƩ <aconchillo@gmail.com>2016-04-15 00:18:50 -0700
committerJosep Torra <n770galaxy@gmail.com>2016-04-19 17:43:43 +0200
commit5fee1d166b7eb987ba3b94167bef1a587e17e6cb (patch)
treead4f11fa4a4b014d9d534f8368e191728838ead2
parent4921231787b39fd9cde469974378a5abeeb41c58 (diff)
downloadgstreamer-plugins-base-5fee1d166b7eb987ba3b94167bef1a587e17e6cb.tar.gz
sdpmessage: new gst_sdp_media_parse_keymgmt/gst_sdp_media_parse_keymgmt
We add a couple of new functions gst_sdp_media_parse_keymgmt and gst_sdp_media_parse_keymgmt. We also implement gst_sdp_message_attributes_to_caps and gst_sdp_media_attributes_to_caps in terms of these new functions and also gst_mikey_message_to_caps.
-rw-r--r--gst-libs/gst/sdp/gstsdpmessage.c104
-rw-r--r--gst-libs/gst/sdp/gstsdpmessage.h4
2 files changed, 93 insertions, 15 deletions
diff --git a/gst-libs/gst/sdp/gstsdpmessage.c b/gst-libs/gst/sdp/gstsdpmessage.c
index 17fa6c406..a0685f884 100644
--- a/gst-libs/gst/sdp/gstsdpmessage.c
+++ b/gst-libs/gst/sdp/gstsdpmessage.c
@@ -64,7 +64,6 @@
#include <gst/rtp/gstrtppayloads.h>
#include "gstsdpmessage.h"
-#include "gstmikey.h"
#define FREE_STRING(field) g_free (field); (field) = NULL
#define REPLACE_STRING(field, val) FREE_STRING(field); (field) = g_strdup (val)
@@ -3620,12 +3619,10 @@ gst_sdp_make_keymgmt (const gchar * uri, const gchar * base64)
}
static gboolean
-gst_sdp_parse_keymgmt (const gchar * keymgmt, GstCaps * caps)
+gst_sdp_parse_keymgmt (const gchar * keymgmt, GstMIKEYMessage ** mikey)
{
- gboolean res = FALSE;
gsize size;
guchar *data;
- GstMIKEYMessage *msg;
gchar *orig_value;
gchar *p, *kmpid;
@@ -3648,19 +3645,76 @@ gst_sdp_parse_keymgmt (const gchar * keymgmt, GstCaps * caps)
if (data == NULL)
return FALSE;
- msg = gst_mikey_message_new_from_data (data, size, NULL, NULL);
+ *mikey = gst_mikey_message_new_from_data (data, size, NULL, NULL);
g_free (data);
- if (msg == NULL)
- return FALSE;
- res = gst_mikey_message_to_caps (msg, caps);
- gst_mikey_message_unref (msg);
+ return (*mikey != NULL);
+}
+
+static GstSDPResult
+sdp_add_attributes_to_keymgmt (GArray * attributes, GstMIKEYMessage ** mikey)
+{
+ GstSDPResult res = GST_SDP_OK;
+
+ if (attributes->len > 0) {
+ guint i;
+ for (i = 0; i < attributes->len; i++) {
+ GstSDPAttribute *attr = &g_array_index (attributes, GstSDPAttribute, i);
+
+ if (g_str_equal (attr->key, "key-mgmt")) {
+ res = gst_sdp_parse_keymgmt (attr->value, mikey);
+ break;
+ }
+ }
+ }
return res;
}
+/**
+ * gst_sdp_message_parse_keymgmt:
+ * @msg: a #GstSDPMessage
+ * @mikey: (out) (transfer full): pointer to new #GstMIKEYMessage
+ *
+ * Creates a new #GstMIKEYMessage after parsing the key-mgmt attribute
+ * from a #GstSDPMessage.
+ *
+ * Returns: a #GstSDPResult.
+ *
+ * Since: 1.10
+ */
+GstSDPResult
+gst_sdp_message_parse_keymgmt (const GstSDPMessage * msg,
+ GstMIKEYMessage ** mikey)
+{
+ g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
+
+ return sdp_add_attributes_to_keymgmt (msg->attributes, mikey);
+}
+
+/**
+ * gst_sdp_media_parse_keymgmt:
+ * @media: a #GstSDPMedia
+ * @mikey: (out) (transfer full): pointer to new #GstMIKEYMessage
+ *
+ * Creates a new #GstMIKEYMessage after parsing the key-mgmt attribute
+ * from a #GstSDPMedia.
+ *
+ * Returns: a #GstSDPResult.
+ *
+ * Since: 1.10
+ */
+GstSDPResult
+gst_sdp_media_parse_keymgmt (const GstSDPMedia * media,
+ GstMIKEYMessage ** mikey)
+{
+ g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
+
+ return sdp_add_attributes_to_keymgmt (media->attributes, mikey);
+}
+
static GstSDPResult
-sdp_addtributes_to_caps (GArray * attributes, GstCaps * caps)
+sdp_add_attributes_to_caps (GArray * attributes, GstCaps * caps)
{
if (attributes->len > 0) {
GstStructure *s;
@@ -3685,10 +3739,8 @@ sdp_addtributes_to_caps (GArray * attributes, GstCaps * caps)
continue;
if (!strcmp (key, "framesize"))
continue;
- if (g_str_equal (key, "key-mgmt")) {
- gst_sdp_parse_keymgmt (attr->value, caps);
+ if (!strcmp (key, "key-mgmt"))
continue;
- }
/* string must be valid UTF8 */
if (!g_utf8_validate (attr->value, -1, NULL))
@@ -3722,10 +3774,21 @@ sdp_addtributes_to_caps (GArray * attributes, GstCaps * caps)
GstSDPResult
gst_sdp_message_attributes_to_caps (const GstSDPMessage * msg, GstCaps * caps)
{
+ GstSDPResult res;
+ GstMIKEYMessage *mikey = NULL;
+
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (caps != NULL && GST_IS_CAPS (caps), GST_SDP_EINVAL);
- return sdp_addtributes_to_caps (msg->attributes, caps);
+ res = gst_sdp_message_parse_keymgmt (msg, &mikey);
+ if (mikey) {
+ res = GST_SDP_EINVAL;
+ if (gst_mikey_message_to_caps (mikey, caps))
+ res = sdp_add_attributes_to_caps (msg->attributes, caps);
+ gst_mikey_message_unref (mikey);
+ }
+
+ return res;
}
/**
@@ -3742,8 +3805,19 @@ gst_sdp_message_attributes_to_caps (const GstSDPMessage * msg, GstCaps * caps)
GstSDPResult
gst_sdp_media_attributes_to_caps (const GstSDPMedia * media, GstCaps * caps)
{
+ GstSDPResult res;
+ GstMIKEYMessage *mikey = NULL;
+
g_return_val_if_fail (media != NULL, GST_SDP_EINVAL);
g_return_val_if_fail (caps != NULL && GST_IS_CAPS (caps), GST_SDP_EINVAL);
- return sdp_addtributes_to_caps (media->attributes, caps);
+ res = gst_sdp_media_parse_keymgmt (media, &mikey);
+ if (mikey) {
+ res = GST_SDP_EINVAL;
+ if (gst_mikey_message_to_caps (mikey, caps))
+ res = sdp_add_attributes_to_caps (media->attributes, caps);
+ gst_mikey_message_unref (mikey);
+ }
+
+ return res;
}
diff --git a/gst-libs/gst/sdp/gstsdpmessage.h b/gst-libs/gst/sdp/gstsdpmessage.h
index deffb4cb6..15ae60ab7 100644
--- a/gst-libs/gst/sdp/gstsdpmessage.h
+++ b/gst-libs/gst/sdp/gstsdpmessage.h
@@ -43,6 +43,8 @@
#ifndef __GST_SDP_MESSAGE_H__
#define __GST_SDP_MESSAGE_H__
+#include "gstmikey.h"
+
#include <glib.h>
#include <gst/gst.h>
#include <gst/sdp/gstsdp.h>
@@ -504,6 +506,8 @@ GstSDPResult gst_sdp_media_add_attribute (GstSDPMedia *media,
GstCaps* gst_sdp_media_get_caps_from_media (const GstSDPMedia *media, gint pt);
GstSDPResult gst_sdp_media_set_media_from_caps (const GstCaps* caps, GstSDPMedia *media);
gchar * gst_sdp_make_keymgmt (const gchar *uri, const gchar *base64);
+GstSDPResult gst_sdp_message_parse_keymgmt (const GstSDPMessage *msg, GstMIKEYMessage **mikey);
+GstSDPResult gst_sdp_media_parse_keymgmt (const GstSDPMedia *media, GstMIKEYMessage **mikey);
GstSDPResult gst_sdp_message_attributes_to_caps (const GstSDPMessage *msg, GstCaps *caps);
GstSDPResult gst_sdp_media_attributes_to_caps (const GstSDPMedia *media, GstCaps *caps);