Folks,
In my cfg file I've this block. I call this block when I receive a request from a private IP (ex. 192.168.x.x)
/* route block for mangling */ route[1] {
log(1, "route-block 1 (mangling)\n");
# we mangle the contact address and ports in SDP part of the message if (method == "INVITE") {
setflag(1);
log(1, "mangle block: INVITE received and we will mangle ip \n");
sdp_mangle_ip("192.168.0.0/255.0.0.0", "192.168.0.99");
};
# rewrite Contact: header if (search("Contact: .*@192.168.")) { /* we seem to have a private address on a Contact which is not valid */ encode_contact("enc_prefix","192.168.0.99"); xlog("L_NOTICE", "mangle block: encoded Contact header: <%ct> \n"); }; }
When I send an INVITE I can see in SDP: Content-Type: application/sdp.. Content-Length: 204..204Contact: Andrea Girardi sip:enc_prefix*andrea**192.168.0.98*5060*@192.168.0.99.. User-Agent: SCS/v3.1.12.33.. .. v=0.. o=AndreaGirardi13698577 0 IN IP4 192.168.0.98.. s=ScS Client.. c=IN IP4 217.57.90.117.. t=0 0.. m=audio 1154 RTP/AVP 0 8 4.. a=rtpmap:0 PCM U/8000.. a=rtpmap:8 PCMA/8000.. a=rtpmap:4 G723/8000.. a=ptime: 30..
This work correctly when USERA send an Invite to USERB, but when USERB send 200 ok this is the SDP: Content-Type: application/sdp.. Content-Length: 189.... v=0.. o=braies 0 0 IN IP4 192.168.0.98.. s=ScS Client.. c=IN IP4 192.168.0.98.. b=CT:1000.. t=0 0.. m=audio 57820 RTP/AVP 0 8 4.. a=rtpmap:0 PCMU/8000.. a=rtpmap:8 PCMA/8000.. a=rtpmap:4 G723/8000..
It's correct or User B has to change c field in SDP? How?
Can I see a encoded contact (sip:enc_pref*username*ip*port*protocol@public_ip *) with xlog or simply in stderr? i've tried to use %ct but it return sip:userA@192.168.0.97:5060
is it better to use nathelper or mangler?
Thanks, Andrea
------------------------------------------------------- Andrea Girardi mobile +39 347 9624051 sip address: giandrea@sip.quellidelpirana.it http://www.giandrea.com