Hi all!
Somone can give me an example how to forward calls to a (Cisco) PSTN Gateway
with rtpproxy? The user is behind a Port Restricted Cone Nat and I have no
idea how to solve the problem, that I have a one way audio stream.
I'm using the following code:
# special handling for NATed clients; first, nat test is
# executed: it looks for via!=received and RFC1918 addresses
# in Contact (may fail if line-folding used); also,
# the received test should, if complete, should check all
# vias for presence of received
if (nat_uac_test("3")) {
# allow RR-ed requests, as these may indicate that
# a NAT-enabled proxy takes care of it; unless it is
# a REGISTER
if (method == "REGISTER" || !
search("^Record-Route:")) {
log("LOG: Someone trying to register from private
IP, rewriting\n");
# This will work only for user agents that support
symmetric
# communication. We tested quite many of them and
majority is
# smart smart enough to be symmetric. In some
phones, like
# it takes a configuration option. With Cisco 7960,
it is
# called NAT_Enable=Yes, with kphone it is called
# "symmetric media" and "symmetric signaling".
(The
latter
# not part of public released yet.)
fix_nated_contact(); # Rewrite contact with source
IP of signalling
if (method == "INVITE") {
fix_nated_sdp("1"); # Add direction=active
to SDP
};
force_rport(); # Add rport parameter to topmost Via
setflag(6); # Mark as NATed
};
};
[....]
rewritehostport("xxx.xxx.xxx.xxx:5060"); #forward to the gateway
[....]
if (isflagset(6)) {
force_rtp_proxy();
t_on_reply("2");
append_hf("P-Behind-NAT: Yes\r\n");
append_hf("P-hint: GATEWAY\r\n");
};
if (!t_relay()) {
sl_reply_error();
break;
};
[....]
onreply_route[2] {
if (status=~"2[0-9][0-9]") {
force_rport();
fix_nated_contact();
fix_nated_sdp("2");
force_rtp_proxy();
};
}
Has anyone of you experience with this? How you can imagine... I can't put
the gateway on the ser proxy :-(
Before the OK from the gateway reaches, the phone receives many UDP messages
directly from the gateway... then the conversation is "switching".
I made a ngrep on the messages to the PSTN and the media stream goes out
like this... I'm wondering why the OK message has the IP information twice:
INVITE:
---------
v=0.
o=- 3330963367 3330963367 IN IP4 192.168.1.101.
s=SJphone.
c=IN IP4 xxx.xxx.xxx.xxx. <-- ser server IP
address
t=0 0.
a=direction:active.
m=audio 35076 RTP/AVP 3 8 0 101.
a=rtpmap:3 GSM/8000.
a=rtpmap:8 PCMA/8000.
a=rtpmap:0 PCMU/8000.
a=rtpmap:101 telephone-event/8000.
a=fmtp:101 0-11,16.
a=direction:active.
a=nortpproxy:yes.
OK (from GW to ser)
----------------------
v=0.
o=CiscoSystemsSIP-GW-UserAgent 9220 7434 IN IP4 xxx.xxx.xxx.xxx.
<-- IP of Gateway
s=SIP Call.
c=IN IP4 xxx.xxx.xxx.xxx. <-- IP of Gateway
t=0 0.
m=audio 16460 RTP/AVP 3 101.
c=IN IP4 xxx.xxx.xxx.xxx. <-- IP of Gateway
a=rtpmap:3 GSM/8000.
a=rtpmap:101 telephone-event/8000.
a=fmtp:101 0-11,16.
OK (from ser to phone):
------------------------
v=0.
o=CiscoSystemsSIP-GW-UserAgent 7310 9703 IN IP4 xxx.xxx.xxx.xxx.
<-- IP of the gateway
s=SIP Call.
c=IN IP4 xxx.xxx.xxx.xxx. <-- IP of us
t=0 0.
m=audio 35078 RTP/AVP 3 101.
c=IN IP4 xxx.xxx.xxx.xxx.
a=rtpmap:3 GSM/8000.
a=rtpmap:101 telephone-event/8000.
a=fmtp:101 0-11,16.
a=nortpproxy:yes.
Thanks for your help! I hope there is a solution for this!!
Sebastian