Module: kamailio Branch: 5.1 Commit: 654aa457ecec7d35061dbb151fd786a303cba473 URL: https://github.com/kamailio/kamailio/commit/654aa457ecec7d35061dbb151fd786a3...
Author: Jerzy Ptak jerzy.ptak@bbitg.co.uk Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2018-03-01T10:28:34+01:00
rtpengine: added support for DTLS transports
- added ability to explicitly request DTLS transports: UDP/TLS/RTP/SAVP and UDP/TLS/RTP/SAVPF
(cherry picked from commit 99695c2827d0ff6e3d25f144678f07548016415d)
---
Modified: src/modules/rtpengine/doc/rtpengine_admin.xml Modified: src/modules/rtpengine/rtpengine.c
---
Diff: https://github.com/kamailio/kamailio/commit/654aa457ecec7d35061dbb151fd786a3... Patch: https://github.com/kamailio/kamailio/commit/654aa457ecec7d35061dbb151fd786a3...
---
diff --git a/src/modules/rtpengine/doc/rtpengine_admin.xml b/src/modules/rtpengine/doc/rtpengine_admin.xml index 4133eb93c2..9ae72a58bd 100644 --- a/src/modules/rtpengine/doc/rtpengine_admin.xml +++ b/src/modules/rtpengine/doc/rtpengine_admin.xml @@ -2159,7 +2159,7 @@ rtpengine_offer(); &sdp; substitutions (c=, m=, etc) are unaffected by this flag. </para></listitem> <listitem><para> - <emphasis>RTP, SRTP, AVP, AVPF</emphasis> - These flags control the &rtp; + <emphasis>RTP, SRTP, DTLS, AVP, AVPF</emphasis> - These flags control the &rtp; transport protocol that should be used towards the recipient of the &sdp;. If none of them are specified, the protocol given in the &sdp; is left untouched. Otherwise, the <quote>SRTP</quote> flag indicates that @@ -2169,8 +2169,8 @@ rtpengine_offer(); should be used. See also the next set of flags below. </para></listitem> <listitem><para> - <emphasis>RTP/AVP, RTP/SAVP, RTP/AVPF, RTP/SAVPF</emphasis> - these serve as - an alternative, more explicit way to select between the different &rtp; protocols + <emphasis>RTP/AVP, RTP/SAVP, UDP/TLS/RTP/SAVP, RTP/AVPF, RTP/SAVPF, UDP/TLS/RTP/SAVPF</emphasis> - these + serve as an alternative, more explicit way to select between the different &rtp; protocols and profiles supported by the &rtp; proxy. For example, giving the flag <quote>RTP/SAVPF</quote> has the same effect as giving the two flags <quote>SRTP AVPF</quote>. diff --git a/src/modules/rtpengine/rtpengine.c b/src/modules/rtpengine/rtpengine.c index 1b3429d3cd..3d4d17718a 100644 --- a/src/modules/rtpengine/rtpengine.c +++ b/src/modules/rtpengine/rtpengine.c @@ -1871,6 +1871,8 @@ static const char *transports[] = { [0x01] = "RTP/SAVP", [0x02] = "RTP/AVPF", [0x03] = "RTP/SAVPF", + [0x04] = "UDP/TLS/RTP/SAVP", + [0x06] = "UDP/TLS/RTP/SAVPF", };
static int parse_flags(struct ng_flags_parse *ng_flags, struct sip_msg *msg, enum rtpe_operation *op, @@ -1946,6 +1948,8 @@ static int parse_flags(struct ng_flags_parse *ng_flags, struct sip_msg *msg, enu ng_flags->transport |= 0x101; else if (str_eq(&key, "AVPF")) ng_flags->transport |= 0x102; + else if (str_eq(&key, "DTLS")) + ng_flags->transport |= 0x104; else goto generic; goto next; @@ -2048,6 +2052,23 @@ static int parse_flags(struct ng_flags_parse *ng_flags, struct sip_msg *msg, enu goto next; } break; + + case 16: + if (str_eq(&key, "UDP/TLS/RTP/SAVP")) + ng_flags->transport = 0x104; + else + goto generic; + goto next; + break; + + case 17: + if (str_eq(&key, "UDP/TLS/RTP/SAVPF")) + ng_flags->transport = 0x106; + else + goto generic; + goto next; + break; + }
generic: @@ -2148,7 +2169,7 @@ static bencode_item_t *rtpp_function_call(bencode_buffer_t *bencbuf, struct sip_ bencode_dictionary_add(ng_flags.dict, "replace", ng_flags.replace); if ((ng_flags.transport & 0x100)) bencode_dictionary_add_string(ng_flags.dict, "transport-protocol", - transports[ng_flags.transport & 0x003]); + transports[ng_flags.transport & 0x007]); if (ng_flags.rtcp_mux && ng_flags.rtcp_mux->child) bencode_dictionary_add(ng_flags.dict, "rtcp-mux", ng_flags.rtcp_mux);