From 248db047207e7a8eaf37f19a6c00e027eb350181 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 4 Apr 2014 17:39:36 +0200 Subject: [PATCH] rtsp: update for MIKEY API changes --- gst/rtsp-server/rtsp-client.c | 12 ++++++++---- gst/rtsp-server/rtsp-sdp.c | 19 ++++++++++++++----- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/gst/rtsp-server/rtsp-client.c b/gst/rtsp-server/rtsp-client.c index 12589bef56..30c6b4dd33 100644 --- a/gst/rtsp-server/rtsp-client.c +++ b/gst/rtsp-server/rtsp-client.c @@ -1484,13 +1484,14 @@ handle_mikey_data (GstRTSPClient * client, GstRTSPContext * ctx, guint i, n_cs; GstCaps *caps = NULL; GstMIKEYPayloadKEMAC *kemac; + const GstMIKEYPayloadKeyData *pkd; GstBuffer *key; /* the MIKEY message contains a CSB or crypto session bundle. It is a * set of Crypto Sessions protected with the same master key. * In the context of SRTP, an RTP and its RTCP stream is part of a * crypto session */ - if ((msg = gst_mikey_message_new_from_data (data, size)) == NULL) + if ((msg = gst_mikey_message_new_from_data (data, size, NULL, NULL)) == NULL) goto parse_failed; /* we can only handle SRTP crypto sessions for now */ @@ -1513,10 +1514,13 @@ handle_mikey_data (GstRTSPClient * client, GstRTSPContext * ctx, || kemac->mac_alg != GST_MIKEY_MAC_NULL) goto unsupported_encryption; - /* FIXME get Key data sub-payload */ + /* get Key data sub-payload */ + pkd = (const GstMIKEYPayloadKeyData *) + gst_mikey_payload_kemac_get_sub (&kemac->pt, 0); + key = - gst_buffer_new_wrapped (g_memdup (kemac->enc_data, kemac->enc_len), - kemac->enc_len); + gst_buffer_new_wrapped (g_memdup (pkd->key_data, pkd->key_len), + pkd->key_len); /* go over all crypto sessions and create the security policy for each * SSRC */ diff --git a/gst/rtsp-server/rtsp-sdp.c b/gst/rtsp-server/rtsp-sdp.c index fa8bd6536e..13af74d4cd 100644 --- a/gst/rtsp-server/rtsp-sdp.c +++ b/gst/rtsp-server/rtsp-sdp.c @@ -180,7 +180,7 @@ make_media (GstSDPMessage * sdp, GstSDPInfo * info, GstRTSPMedia * media, const GValue *val; const gchar *srtpcipher, *srtpauth, *srtcpcipher, *srtcpauth; GstMIKEYMessage *msg; - GstMIKEYPayload *payload; + GstMIKEYPayload *payload, *pkd; GBytes *bytes; GstMapInfo info; const guint8 *data; @@ -239,14 +239,23 @@ make_media (GstSDPMessage * sdp, GstSDPInfo * info, GstRTSPMedia * media, &byte); gst_mikey_message_add_payload (msg, payload); - /* add the key in KEMAC */ + /* make unencrypted KEMAC */ + payload = gst_mikey_payload_new (GST_MIKEY_PT_KEMAC); + gst_mikey_payload_kemac_set (payload, GST_MIKEY_ENC_NULL, + GST_MIKEY_MAC_NULL); + + /* add the key in key data */ + pkd = gst_mikey_payload_new (GST_MIKEY_PT_KEY_DATA); gst_buffer_map (srtpkey, &info, GST_MAP_READ); - gst_mikey_message_add_kemac (msg, GST_MIKEY_ENC_NULL, info.size, info.data, - GST_MIKEY_MAC_NULL, NULL); + gst_mikey_payload_key_data_set_key (pkd, GST_MIKEY_KD_TEK, info.size, + info.data); gst_buffer_unmap (srtpkey, &info); + /* add key data to KEMAC */ + gst_mikey_payload_kemac_add_sub (payload, pkd); + gst_mikey_message_add_payload (msg, payload); /* now serialize this to bytes */ - bytes = gst_mikey_message_to_bytes (msg); + bytes = gst_mikey_message_to_bytes (msg, NULL, NULL); gst_mikey_message_free (msg); /* and make it into base64 */ data = g_bytes_get_data (bytes, &size);