| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- # RTPProxy control
- route[ENC_SRTP] {
- add_rr_param(";rm=1");
- $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVP";
- $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
- }
- route[DEC_SRTP] {
- add_rr_param(";rm=2");
- $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
- $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVP";
- }
- route[ENC_WS_RTP] {
- add_rr_param(";rm=3");
- $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force RTP AVPF";
- $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
- }
- route[DEC_WS_RTP] {
- add_rr_param(";rm=4");
- $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
- $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force RTP AVPF";
- }
- route[ENC_WSS_RTP] {
- add_rr_param(";rm=5");
- $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVPF DTLS=passive";
- $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
- }
- route[DEC_WSS_RTP] {
- add_rr_param(";rm=6");
- $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
- $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVPF DTLS=passive";
- }
- route[ENC_RTP] {
- add_rr_param(";rm=7");
- $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force RTP AVP";
- $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
- }
- route[DEC_RTP] {
- add_rr_param(";rm=8");
- $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
- $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force RTP AVP";
- }
- # RTPProxy control
- route[NATMANAGE] {
- #!ifdef WITH_DEBUG
- if (is_request())
- xlog("REQUEST: $rm $ru ($si:$sp, $ci)\n");
- else
- xlog("REPLY: $rs $rr ($rm, $si:$sp, $ci)\n");
- if (is_direction("downstream"))
- xlog(" downstream\n");
- else
- xlog(" upstream\n");
- xlog(" Offer: $avp(rtpproxy_offer_flags)\n");
- xlog(" Answer: $avp(rtpproxy_answer_flags)\n");
- if (isflagset(FLT_MOBILE_ORIG)) {
- xlog(" mo\n");
- } else {
- xlog(" mt\n");
- }
- #!endif
- if ((is_reply() && ($T_req($tt) != $null)) || (is_request() && has_totag())) {
- xlog("L_DBG", "Request had ToTag.");
- #if((is_request() && !check_route_param("rm=")) || (is_reply() && !isflagset(FLT_RTP))) {
- if(!check_route_param("rm=") && !isflagset(FLT_RTP)) {
- xlog("L_DBG", "No RM Param\n");
- return;
- }
- if (is_request()) {
- if (isflagset(FLT_MOBILE_ORIG) && is_direction("downstream")) {
- xlog("L_DBG", "1) add_contact_alias();");
- add_contact_alias();
- } else if (!isflagset(FLT_MOBILE_ORIG) && is_direction("upstream")) {
- xlog("L_DBG", "2) add_contact_alias();");
- add_contact_alias();
- }
- } else {
- if (!isflagset(FLT_MOBILE_ORIG) && is_direction("downstream")) {
- xlog("L_DBG", "1) ADD_contact_alias();");
- add_contact_alias();
- } else if (isflagset(FLT_MOBILE_ORIG) && is_direction("downstream")) {
- xlog("L_DBG", "2) ADD_contact_alias();");
- add_contact_alias();
- }
- }
- } else {
- if (is_reply() && !isflagset(FLT_MOBILE_ORIG)) {
- xlog("L_DBG", "3) ADD_contact_alias();");
- add_contact_alias();
- }
- }
- if (isflagset(FLT_MOBILE_ORIG)) {
- $avp(setid) = 1;
- $avp(extra_id) = "mo";
- } else {
- $avp(setid) = 2;
- $avp(extra_id) = "mt";
- }
- if(!t_is_set("onreply_route")) t_on_reply("NAT_REPLY");
- if(!t_is_set("failure_route")) t_on_failure("NATMANAGE");
- if (is_method("BYE") || t_is_failure_route()) {
- rtpengine_manage();
- return;
- }
- setflag(FLT_RTP);
- if (!has_body("application/sdp"))
- return;
- #!ifdef REMOVE_BITALIGNED_AMR
- route(REMOVE_BITALIGNED);
- #!endif
- #!ifndef FORCE_RTPRELAY
- if (!isflagset(FLT_NAT) || !check_route_param("rm="))
- return;
- #!endif
- if ((is_reply() && ($T_req($tt) != $null)) || (is_request() && has_totag())) {
- rtpengine_manage();
- } else {
- if ($avp(rtpproxy_offer_flags) == $null)
- return;
- if ($avp(rtpproxy_answer_flags) == $null)
- return;
- if (is_request()) {
- rtpengine_manage($avp(rtpproxy_offer_flags));
- } else {
- rtpengine_manage($avp(rtpproxy_answer_flags));
- }
- }
- }
- # manage incoming replies
- onreply_route[NAT_REPLY] {
- # In case of 1xx and 2xx do NAT
- if(status=~"[12][0-9][0-9]")
- route(NATMANAGE);
- }
- route[REMOVE_BITALIGNED] {
- if (sdp_get_line_startswith("$avp(mline)", "m=")) {
- # xlog("m-line: $avp(mline)\n");
- sdp_get("$avp(sdp)");
- # xlog("\n$avp(sdp)\n");
- $var(x) = -1;
- $var(remove) = "";
- $var(codec) = $(avp(mline){s.select,$var(x), });
- # xlog("$$var(codec) => $var(codec)\n");
- while ($(var(codec){s.int}) > 0) {
- # xlog("$var(x)) $$var(codec) => $var(codec)\n");
- $var(s) = "a=fmtp:"+$var(codec);
- # xlog("$$var(s) => $var(s)\n");
- $var(fmtp) = $(avp(sdp){line.sw,$var(s)});
- # xlog("$$var(fmtp) => $var(fmtp)\n");
- if ($var(fmtp) =~ "a=fmtp:"+$var(codec)+" mode-change-capability.*") {
- # xlog("Match: $var(codec)\n");
- if ($var(remove) == "") {
- $var(remove) = $var(codec);
- } else {
- $var(remove) = $var(remove)+","+$var(codec);
- }
- }
- $var(codec) = $(avp(mline){s.select,$var(x), });
- $var(x) = $var(x) - 1;
- }
- # xlog("$$var(remove) => $var(remove)\n");
- if ($var(remove) != "") {
- sdp_remove_codecs_by_id($var(remove), "audio");
- msg_apply_changes();
- }
- }
- }
|