rtp.cfg 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. # RTPProxy control
  2. route[ENC_SRTP] {
  3. add_rr_param(";rm=1");
  4. $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVP";
  5. $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
  6. }
  7. route[DEC_SRTP] {
  8. add_rr_param(";rm=2");
  9. $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
  10. $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVP";
  11. }
  12. route[ENC_WS_RTP] {
  13. add_rr_param(";rm=3");
  14. $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force RTP AVPF";
  15. $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
  16. }
  17. route[DEC_WS_RTP] {
  18. add_rr_param(";rm=4");
  19. $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
  20. $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force RTP AVPF";
  21. }
  22. route[ENC_WSS_RTP] {
  23. add_rr_param(";rm=5");
  24. $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVPF DTLS=passive";
  25. $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
  26. }
  27. route[DEC_WSS_RTP] {
  28. add_rr_param(";rm=6");
  29. $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
  30. $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force SRTP AVPF DTLS=passive";
  31. }
  32. route[ENC_RTP] {
  33. add_rr_param(";rm=7");
  34. $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=force RTP AVP";
  35. $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
  36. }
  37. route[DEC_RTP] {
  38. add_rr_param(";rm=8");
  39. $avp(rtpproxy_offer_flags) = "replace-origin replace-session-connection ICE=remove RTP AVP";
  40. $avp(rtpproxy_answer_flags) = "replace-origin replace-session-connection ICE=force RTP AVP";
  41. }
  42. # RTPProxy control
  43. route[NATMANAGE] {
  44. #!ifdef WITH_DEBUG
  45. if (is_request())
  46. xlog("REQUEST: $rm $ru ($si:$sp, $ci)\n");
  47. else
  48. xlog("REPLY: $rs $rr ($rm, $si:$sp, $ci)\n");
  49. if (is_direction("downstream"))
  50. xlog(" downstream\n");
  51. else
  52. xlog(" upstream\n");
  53. xlog(" Offer: $avp(rtpproxy_offer_flags)\n");
  54. xlog(" Answer: $avp(rtpproxy_answer_flags)\n");
  55. if (isflagset(FLT_MOBILE_ORIG)) {
  56. xlog(" mo\n");
  57. } else {
  58. xlog(" mt\n");
  59. }
  60. #!endif
  61. if ((is_reply() && ($T_req($tt) != $null)) || (is_request() && has_totag())) {
  62. xlog("L_DBG", "Request had ToTag.");
  63. #if((is_request() && !check_route_param("rm=")) || (is_reply() && !isflagset(FLT_RTP))) {
  64. if(!check_route_param("rm=") && !isflagset(FLT_RTP)) {
  65. xlog("L_DBG", "No RM Param\n");
  66. return;
  67. }
  68. if (is_request()) {
  69. if (isflagset(FLT_MOBILE_ORIG) && is_direction("downstream")) {
  70. xlog("L_DBG", "1) add_contact_alias();");
  71. add_contact_alias();
  72. } else if (!isflagset(FLT_MOBILE_ORIG) && is_direction("upstream")) {
  73. xlog("L_DBG", "2) add_contact_alias();");
  74. add_contact_alias();
  75. }
  76. } else {
  77. if (!isflagset(FLT_MOBILE_ORIG) && is_direction("downstream")) {
  78. xlog("L_DBG", "1) ADD_contact_alias();");
  79. add_contact_alias();
  80. } else if (isflagset(FLT_MOBILE_ORIG) && is_direction("downstream")) {
  81. xlog("L_DBG", "2) ADD_contact_alias();");
  82. add_contact_alias();
  83. }
  84. }
  85. } else {
  86. if (is_reply() && !isflagset(FLT_MOBILE_ORIG)) {
  87. xlog("L_DBG", "3) ADD_contact_alias();");
  88. add_contact_alias();
  89. }
  90. }
  91. if (isflagset(FLT_MOBILE_ORIG)) {
  92. $avp(setid) = 1;
  93. $avp(extra_id) = "mo";
  94. } else {
  95. $avp(setid) = 2;
  96. $avp(extra_id) = "mt";
  97. }
  98. if(!t_is_set("onreply_route")) t_on_reply("NAT_REPLY");
  99. if(!t_is_set("failure_route")) t_on_failure("NATMANAGE");
  100. if (is_method("BYE") || t_is_failure_route()) {
  101. rtpengine_manage();
  102. return;
  103. }
  104. setflag(FLT_RTP);
  105. if (!has_body("application/sdp"))
  106. return;
  107. #!ifdef REMOVE_BITALIGNED_AMR
  108. route(REMOVE_BITALIGNED);
  109. #!endif
  110. #!ifndef FORCE_RTPRELAY
  111. if (!isflagset(FLT_NAT) || !check_route_param("rm="))
  112. return;
  113. #!endif
  114. if ((is_reply() && ($T_req($tt) != $null)) || (is_request() && has_totag())) {
  115. rtpengine_manage();
  116. } else {
  117. if ($avp(rtpproxy_offer_flags) == $null)
  118. return;
  119. if ($avp(rtpproxy_answer_flags) == $null)
  120. return;
  121. if (is_request()) {
  122. rtpengine_manage($avp(rtpproxy_offer_flags));
  123. } else {
  124. rtpengine_manage($avp(rtpproxy_answer_flags));
  125. }
  126. }
  127. }
  128. # manage incoming replies
  129. onreply_route[NAT_REPLY] {
  130. # In case of 1xx and 2xx do NAT
  131. if(status=~"[12][0-9][0-9]")
  132. route(NATMANAGE);
  133. }
  134. route[REMOVE_BITALIGNED] {
  135. if (sdp_get_line_startswith("$avp(mline)", "m=")) {
  136. # xlog("m-line: $avp(mline)\n");
  137. sdp_get("$avp(sdp)");
  138. # xlog("\n$avp(sdp)\n");
  139. $var(x) = -1;
  140. $var(remove) = "";
  141. $var(codec) = $(avp(mline){s.select,$var(x), });
  142. # xlog("$$var(codec) => $var(codec)\n");
  143. while ($(var(codec){s.int}) > 0) {
  144. # xlog("$var(x)) $$var(codec) => $var(codec)\n");
  145. $var(s) = "a=fmtp:"+$var(codec);
  146. # xlog("$$var(s) => $var(s)\n");
  147. $var(fmtp) = $(avp(sdp){line.sw,$var(s)});
  148. # xlog("$$var(fmtp) => $var(fmtp)\n");
  149. if ($var(fmtp) =~ "a=fmtp:"+$var(codec)+" mode-change-capability.*") {
  150. # xlog("Match: $var(codec)\n");
  151. if ($var(remove) == "") {
  152. $var(remove) = $var(codec);
  153. } else {
  154. $var(remove) = $var(remove)+","+$var(codec);
  155. }
  156. }
  157. $var(codec) = $(avp(mline){s.select,$var(x), });
  158. $var(x) = $var(x) - 1;
  159. }
  160. # xlog("$$var(remove) => $var(remove)\n");
  161. if ($var(remove) != "") {
  162. sdp_remove_codecs_by_id($var(remove), "audio");
  163. msg_apply_changes();
  164. }
  165. }
  166. }