diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp index c9cf1b6e97bf2d281f2d207cc7bbb54f567e71e5..66abc5ca75a719606d2615573907ac6c855f06e8 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 9500fa318539b7185742747d1d6103398cd3c2f8..a2af3cd24774eba7ee0ab87b46150d37b606d665 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