rtsp: update for MIKEY API changes

This commit is contained in:
Wim Taymans 2014-04-04 17:39:36 +02:00
parent 0d22b798ae
commit 248db04720
2 changed files with 22 additions and 9 deletions

View file

@ -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 */

View file

@ -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);