[SR-Users] set_advertised_port using pseudovariable

Neven Boric nboric at yx.cl
Tue Aug 7 22:34:43 CEST 2012


Hi,

I'm trying to use Kamailio as an outbound proxy behind a NAT (all 
clients and kamailio itself are behind the same NAT):

UACs -> Kamailio -> NAT router -> PBX (hosted, public server)

I figured I could detect the external source port used by the router by 
periodically sending an OPTIONS request to the public server, then 
capture the rport value in the reply, and use that port as an input to 
set_advertised_port. Because I'm doing this periodically, it should have 
the added value of keeping the NAT mapping alive. Otherwise, I should be 
able to detect it, as the rport value will change.

I managed to periodically send the OPTIONS request, read the rport value 
on the reply message and store it on a pseudovariable using:

$var(rport) = $sel(v.rport);

But when I try to use that value to set the advertised port, I get an 
error, as if set_advertised_port only accepted literal values:

if( $var(rport) != 0)
{
         set_advertised_port($var(rport));
}

Not starting Kamailio: invalid configuration file!
-e
  0(4692) : <core> [cfg.y:3591]: parse error in config file 
/usr/local/etc/kamailio/kamailio.cfg, line 504, column 24-34: syntax error
  0(4692) : <core> [cfg.y:3594]: parse error in config file 
/usr/local/etc/kamailio/kamailio.cfg, line 504, column 35: bad argument, 
string expected
ERROR: bad config file (2 errors)

So, am I missing something or does set_advertised_port actually only 
accept literal values?

Thanks
Neven Boric



More information about the sr-users mailing list