From c0ae25bbc58b68d726207b9056e0e30f7b90f897 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Wed, 6 Jan 2010 12:59:09 -0500 Subject: [PATCH] [#2522] Add basic SRTP attribute in sdp --- sflphone-common/src/sip/sdp.cpp | 33 +++++++++++++++++++++++++++++++++ sflphone-common/src/sip/sdp.h | 8 ++++++++ 2 files changed, 41 insertions(+) diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index c9cf1b6e97..66abc5ca75 100644 --- a/sflphone-common/src/sip/sdp.cpp +++ b/sflphone-common/src/sip/sdp.cpp @@ -130,6 +130,8 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med) _debug ("No hash specified"); } + // sdp_add_srtp_attribute (med); + *p_med = med; } @@ -360,6 +362,37 @@ void Sdp::sdp_add_media_description() } } + +void Sdp::sdp_add_srtp_attribute (pjmedia_sdp_media* media) +{ + + char tempbuf[256]; + + std::string crypto_suite = "AES_CM_128_HMAC_SHA1_32"; + std::string application = "srtp"; + std::string key = "inline:16/14/NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj/2^20/1:32"; + + pjmedia_sdp_attr *attribute = (pjmedia_sdp_attr*) pj_pool_zalloc(_pool, sizeof(pjmedia_sdp_attr)); + + attribute->name = pj_strdup3(_pool, "crypto"); + + int len = pj_ansi_snprintf(tempbuf, sizeof(tempbuf), + "%.*s %.*s %.*s", + (int)crypto_suite.size(), crypto_suite.c_str(), + (int)application.size(), application.c_str(), + (int)key.size(), key.c_str()); + + attribute->value.slen = len; + attribute->value.ptr = (char*) pj_pool_alloc (_pool, attribute->value.slen+1); + pj_memcpy (attribute->value.ptr, tempbuf, attribute->value.slen+1); + + if(pjmedia_sdp_media_add_attr(media, attribute) != PJ_SUCCESS) { + throw sdpException(); + } + +} + + void Sdp::sdp_add_zrtp_attribute (pjmedia_sdp_media* media, std::string hash) { pjmedia_sdp_attr *attribute; diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h index 9500fa3185..a2af3cd247 100644 --- a/sflphone-common/src/sip/sdp.h +++ b/sflphone-common/src/sip/sdp.h @@ -336,6 +336,14 @@ class Sdp { void get_remote_sdp_media_from_offer (const pjmedia_sdp_session* r_sdp, pjmedia_sdp_media** r_media); + + /* + * Adds a srtp attribute to the given media section. + * + * @param media The media to add the srtp attribute to + */ + void sdp_add_srtp_attribute(pjmedia_sdp_media* media); + /* * Adds a zrtp-hash attribute to * the given media section. The hello hash is -- GitLab