[Kamailio-Users] SDP IP address not rewritten

Klaus Darilion klaus.mailinglists at pernau.at
Tue Feb 9 09:27:23 CET 2010


You have to debug this yourself.

Add log statements to the .cfg file, e.g. add
   xlog("L_INFO","calling rtpproxy ...");
just before the call to force_rtpproxy().

then verify the logfile if rtpproxy is called.

Increase debugging (debug=4) and verify the log file for potential problems.

Configure rtpproxy/kamilio to use a UDP socket instead of the unix 
socket. Then you can use ngrep/tcpdump to watch the communication 
between kamailio and rtpproxy.

regards
klaus

Am 09.02.2010 01:25, schrieb Vikram Ragukumar:
> Hello,
>
> I am running Kamailio version 1.5 and rtpproxy version 1.2. I have
> enabled NAT support in Kamailio.cfg. I have a UA behind NAT (UA
> IP:192.168.2.101), and the UA registers with an Asterisk server (Public
> IP) through an outbound proxy running Kamailio and rtpproxy with Public IP.
>
> Registration succeeds, however when making an outbound call from the UA
> to a cellphone, there is only one sided voice. This is happening because
> Asterisk is addressing rtp streams to the UA's local IP address instead
> of its PublicIP:port.
>
> Why is the IP address not being rewritten in the SDP ? Is there an
> alternate way of invoking rtpproxy (with flags) such that the IP address
> in the SDP is rewritten ?
>
> Thanks and Regards,
> Vikram.
>
> PS : Below is the main routing section of my kamailio.cfg
>
> route{
> if (!mf_process_maxfwd_header("10")) {
> sl_send_reply("483","Too Many Hops");
> exit;
> }
> # NAT detection
> route(4);
> if (has_totag()) {
> # sequential request withing a dialog should
> # take the path determined by record-routing
> if (loose_route()) {
> if (is_method("BYE")) {
> setflag(1); # do accounting ...
> setflag(3); # ... even if the transaction fails
> }
> route(1);
> } else {
> if (is_method("SUBSCRIBE") && uri == myself) {
> # in-dialog subscribe requests
> route(2);
> exit;
> }
> if ( is_method("ACK") ) {
> if ( t_check_trans() ) {
> # non loose-route, but stateful ACK; must be an ACK after a 487 or
> e.g. 404 from upstream server
> t_relay();
> exit;
> } else {
> # ACK without matching transaction ... ignore and discard.\n");
> exit;
> }
> }
> sl_send_reply("404","Not here");
> }
> exit;
> }
> # CANCEL processing
> if (is_method("CANCEL"))
> {
> if (t_check_trans())
> t_relay();
> exit;
> }
> t_check_trans();
> # record routing
> if (!is_method("REGISTER|MESSAGE"))
> record_route();
> # account only INVITEs
> if (is_method("INVITE")) {
> setflag(1); # do accounting
> }
> if (!uri==myself)
> {
> append_hf("P-hint: outbound\r\n");
> route(1);
> }
> # requests for my domain
> if( is_method("PUBLISH|SUBSCRIBE"))
> route(2);
> if (is_method("REGISTER"))
> {
> if (isflagset(5)) {
> setbflag(6);
> # setbflag(7);
> }
> if (!save("location"))
> sl_reply_error();
> exit;
> }
> if ($rU==NULL) {
> # request with no Username in RURI
> sl_send_reply("484","Address Incomplete");
> exit;
> }
> # apply DB based aliases (uncomment to enable)
> ##alias_db_lookup("dbaliases");
> if (!lookup("location")) {
> switch ($retcode) {
> case -1:
> case -3:
> t_newtran();
> t_reply("404", "Not Found");
> exit;
> case -2:
> sl_send_reply("405", "Method Not Allowed");
> exit;
> }
> }
> # when routing via usrloc, log the missed calls also
> setflag(2);
> route(1);
> }
> route[1] {
> if (check_route_param("nat=yes")) {
> setbflag(6);
> }
> if (isflagset(5) || isbflagset(6)) {
> route(5);
> }
> /* example how to enable some additional event routes */
> if (is_method("INVITE")) {
> #t_on_branch("1");
> t_on_reply("1");
> t_on_failure("1");
> }
> if (!t_relay()) {
> sl_reply_error();
> }
> exit;
> }
> # Presence route
> /* uncomment the whole following route for enabling presence server */
> route[2]
> {
>
> # if presence enabled, this part will not be executed
> if (is_method("PUBLISH") || $rU==null)
> {
> sl_send_reply("404", "Not here");
> exit;
> }
> return;
> }
> # Caller NAT detection route
> /* uncomment the whole following route for enabling Caller NAT Detection */
> route[4]{
> force_rport();
> if (nat_uac_test("19")) {
> if (method=="REGISTER") {
> fix_nated_register();
> } else {
> fix_nated_contact();
> setflag(6);#VR
> }
> setflag(5);
> }
> return;
> }
> # RTPProxy control
> /* uncomment the whole following route for enabling RTPProxy Control */
> route[5] {
> if (is_method("BYE")) {
> unforce_rtp_proxy();
> } else if (is_method("INVITE")){
> force_rtp_proxy();
> }
> if (!has_totag()) add_rr_param(";nat=yes");
> return;
> }
> branch_route[1] {
> xdbg("new branch at $ru\n");
> }
> onreply_route[1] {
> xdbg("incoming reply\n");
>
> if ((isflagset(5) || isbflagset(6)) && status=~"(183)|(2[0-9][0-9])") {
> force_rtp_proxy();
> }
> if (isbflagset(6)) {
> fix_nated_contact();
> }
> }
> failure_route[1] {
> if (is_method("INVITE")
> && (isbflagset(6) || isflagset(5))) {
> unforce_rtp_proxy();
> }
>
> if (t_was_cancelled()) {
> exit;
> }
> }
>
> _______________________________________________
> Kamailio (OpenSER) - Users mailing list
> Users at lists.kamailio.org
> http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
> http://lists.openser-project.org/cgi-bin/mailman/listinfo/users



More information about the Users mailing list