Hi,
I have that to implement a solution VOIP in my company.
I am testing SER/RTPProxy, more I do not obtain to place rtpproxy to
function.
Below it follows the error.
What I must make?
Thank You.
The version that I am using is: SER 0.8.12-TCP_nonb (i386/linux)
rtpproxy 20040107
My archive of log (var/log/message) returns the error:
++++++++++++++++++++ ERROR +++++++++++++++++++++++++++++ /var/log/message
Feb 27 18:09:47 blacksip ser[3588 ]: ERROR: send_rtpp_command: can't read
reply from the RTP proxy
Feb 27 18:09:58 blacksip ser[3586 ]: ERROR: send_rtpp_command: can't read
reply from the RTP proxy
Feb 27 18:09:58 blacksip ser[3586 ]: ERROR: on_reply processing failed
++++++++++++++++++++ ERROR +++++++++++++++++++++++
João Carlos Moura
NiNeTel Telecommunications
+55 85 264-9039
Dear sir:
I am using a Cisco 3660 router as a SIP-PSTN gateway with my SER server.When I have configure all the thing has the guideline,I meet a problem.If I use a telephone call my MSN Messager or use MSN Messager call the telephone,the receiver could ring,and the MSN Messager could send and receive signal,but the telephone could only receive.In other words,the RTP packages could not send to UA at computers from the router.Does anyone can help me?
This is the configure at SER server:
# ------------------ module loading ----------------------------------
loadmodule "modules/sl/sl.so"
loadmodule "modules/tm/tm.so"
loadmodule "modules/acc/acc.so"
loadmodule "modules/rr/rr.so"
loadmodule "modules/maxfwd/maxfwd.so"
loadmodule "modules/mysql/mysql.so"
loadmodule "modules/auth/auth.so"
loadmodule "modules/auth_db/auth_db.so"
loadmodule "modules/group/group.so"
loadmodule "modules/uri/uri.so"
# ----------------- setting module-specific parameters ---------------
modparam("auth_db", "db_url","sql://ser:heslo@localhost/ser")
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
# -- acc params --
modparam("acc", "log_level", 1)
# that is the flag for which we will account -- don't forget to
# set the same one :-)
modparam("acc", "log_flag", 1 )
# ------------------------- request routing logic -------------------
# main routing logic
route{
/* ********* ROUTINE CHECKS ********************************** */
# filter too old messages
if (!mf_process_maxfwd_header("10")) {
log("LOG: Too many hops\n");
sl_send_reply("483","Too Many Hops");
break;
};
if (len_gt( max_len )) {
sl_send_reply("513", "Wow -- Message too large");
break;
};
/* ********* RR ********************************** */
/* grant Route routing if route headers present */
if (loose_route()) { t_relay(); break; };
/* record-route INVITEs -- all subsequent requests must visit us */
if (method=="INVITE") {
record_route();
};
# now check if it really is a PSTN destination which should be handled
# by our gateway; if not, and the request is an invitation, drop it --
# we cannot terminate it in PSTN; relay non-INVITE requests -- it may
# be for example BYEs sent by gateway to call originator
if (!uri=~"sip:\+?[0-9]+@.*") {
if (method=="INVITE") {
sl_send_reply("403", "Call cannot be served here");
} else {
forward(uri:host, uri:port);
};
break;
};
# account completed transactions via syslog
setflag(1);
# free call destinations ... no authentication needed
if ( is_user_in("Request-URI", "free-pstn") /* free destinations */
| uri=~"sip:[79][0-9][0-9][0-9]@.*" /* local PBX */
| uri=~"sip:98[0-9][0-9][0-9][0-9]") {
log("free call");
} else if (src_ip==192.168.0.10) {
# our gateway doesn't support digest authentication;
# verify that a request is coming from it by source
# address
log("gateway-originated request");
} else {
# in all other cases, we need to check the request against
# access control lists; first of all, verify request
# originator's identity
if (!proxy_authorize( "gateway" /* realm */,
"subscriber" /* table name */)) {
proxy_challenge( "gateway" /* realm */, "0" /* no qop */ );
break;
};
# authorize only for INVITEs -- RR/Contact may result in weird
# things showing up in d-uri that would break our logic; our
# major concern is INVITE which causes PSTN costs
if (method=="INVITE") {
# does the authenticated user have a permission for local
# calls (destinations beginning with a single zero)?
# (i.e., is he in the "local" group?)
if (uri=~"sip:0[1-9][0-9]+@.*") {
if (!is_user_in("credentials", "local")) {
sl_send_reply("403", "No permission for local calls");
break;
};
# the same for long-distance (destinations begin with two zeros")
} else if (uri=~"sip:00[1-9][0-9]+@.*") {
if (!is_user_in("credentials", "ld")) {
sl_send_reply("403", " no permission for LD ");
break;
};
# the same for international calls (three zeros)
} else if (uri=~"sip:000[1-9][0-9]+@.*") {
if (!is_user_in("credentials", "int")) {
sl_send_reply("403", "International permissions needed");
break;
};
# everything else (e.g., interplanetary calls) is denied
} else {
sl_send_reply("403", "Forbidden");
break;
};
}; # INVITE to authorized PSTN
}; # authorized PSTN
# if you have passed through all the checks, let your call go to GW!
rewritehostport("192.168.0.10:5060");
# forward the request now
if (!t_relay()) {
sl_reply_error();
break;
};
}
And this is the configure at the Cisco 3660:
!
version 12.2
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname SIP
!
enable secret 5 $1$Ov6R$SoCYqYuzY7a7spMUSEz2e.
enable password 123456
!
ip subnet-zero
no ip routing
!
!
ip name-server 162.105.170.66
ip name-server 162.105.129.27
!
!
voice rtp send-recv
!
voice service pots
!
voice class codec 1
codec preference 1 g729r8
codec preference 2 g729br8
codec preference 13 g711ulaw
codec preference 14 g711alaw
!
voice class codec 13
!
!
!
!
!
!
fax interface-type fax-mail
mta receive maximum-recipients 0
!
!
!
!
interface FastEthernet0/0
ip address 192.168.0.200 255.255.255.0
no ip route-cache
no ip mroute-cache
speed auto
half-duplex
no cdp enable
!
interface FastEthernet0/1
no ip address
no ip route-cache
no ip mroute-cache
shutdown
duplex auto
speed auto
no cdp enable
!
interface Serial3/0
no ip address
no ip route-cache
no ip mroute-cache
shutdown
serial restart_delay 0
no cdp enable
!
interface Serial3/1
no ip address
no ip route-cache
no ip mroute-cache
shutdown
serial restart_delay 0
no cdp enable
!
interface Serial3/2
no ip address
no ip route-cache
no ip mroute-cache
shutdown
serial restart_delay 0
no cdp enable
!
interface Serial3/3
no ip address
no ip route-cache
no ip mroute-cache
shutdown
serial restart_delay 0
no cdp enable
!
interface FastEthernet5/0
no ip address
no ip route-cache
no ip mroute-cache
shutdown
duplex auto
speed auto
no cdp enable
!
interface Serial5/0
no ip address
no ip route-cache
no ip mroute-cache
shutdown
clockrate 2000000
no cdp enable
!
interface FastEthernet5/1
no ip address
no ip route-cache
no ip mroute-cache
shutdown
duplex auto
speed auto
no cdp enable
!
interface Serial5/1
no ip address
no ip route-cache
no ip mroute-cache
shutdown
clockrate 2000000
no cdp enable
!
interface FastEthernet6/0
no ip address
no ip route-cache
no ip mroute-cache
shutdown
duplex auto
speed auto
no cdp enable
!
interface Serial6/0
no ip address
no ip route-cache
no ip mroute-cache
shutdown
clockrate 2000000
no cdp enable
!
interface FastEthernet6/1
no ip address
no ip route-cache
no ip mroute-cache
shutdown
duplex auto
speed auto
no cdp enable
!
interface Serial6/1
no ip address
no ip route-cache
no ip mroute-cache
shutdown
clockrate 2000000
no cdp enable
!
interface Dialer1
no ip address
!
ip default-gateway 192.168.0.1
ip classless
no ip http server
ip pim bidir-enable
!
!
vc-group 1
!
snmp-server community public RO
!
call rsvp-sync
!
voice-port 1/0/0
cptone CN
description 3078
supervisory disconnect dualtone mid-call
!
voice-port 1/0/1
!
voice-port 1/1/0
cptone CN
description 3078
supervisory disconnect dualtone mid-call
!
voice-port 1/1/1
!
voice-port 2/0/0
!
voice-port 2/0/1
!
voice-port 2/1/0
!
voice-port 2/1/1
!
!
mgcp profile default
!
dial-peer cor custom
!
!
!
dial-peer voice 86100 pots
application session
destination-pattern 8610T
port 1/0/0
!
dial-peer voice 1000 voip
application session
destination-pattern .T
session protocol sipv2
session target sip-server
session transport udp
codec g711ulaw
!
dial-peer voice 100 pots
destination-pattern 010T
port 1/0/0
!
dial-peer voice 86000 pots
destination-pattern 8600T
port 1/1/0
!
sip-ua
timers disconnect 200
sip-server dns:sipproxy.icst.pku.edu.cn
!
!
line con 0
line aux 0
line vty 0 4
password 123456
login
!
!
end
Hi...Can anybody guide me...How can i implement B2BUA with SER...
_________________________________________________________________
Oscar fever is on! It's Hollywood's biggest party.
http://server1.msn.co.in/sp04/oscars/index.asp Get all the dope here.
Hi!
After a long search on maillinst, I'm trying to run SER with rtpproxy, for
resolve problems with SIP UA (ata186) behind a nat, but I'm still get in trouble.
I have setup ser.cfg to use rtpproxy, like this:
...
if (method=="INVITE") {
log(1,"INVITE\n");
fix_nated_sdp("1");
record_route();
force_rport();
setflag(1);
force_rtp_proxy();
t_on_reply("1");
}
...
onreply_route[1] {
log(1, ">=====> reply 1\n");
if ((status=~"[12][0-9][0-9]")) {
force_rtp_proxy();
}
}
...
But I get this error on syslog:
0(5463) ERROR: extract_mediaip: no `c=' in SDP
I'm running rtpproxy, on linux shell without any parameters.
Does anybody knows what this means that message, and how to solve, a ser.cfg for
rtpproxy, and others tips will be helpfull...
Regards.
--
|o
|o A prosperidade faz amigos. A adversidade testa-os. -- Pubililius
|o Syrus
|o
|o Fabio Silvestri
|o fabio(a)informatec.com.br
|o ICQ: 1667351
|o
--
|o
|o The number you have dialed is imaginary. Please divide by 0 and
|o try again.
|o
|o Fabio Silvestri
|o fabio(a)informatec.com.br
|o ICQ: 1667351
|o
Hi Carlos!
Probably, the communication between ser and rtpproxy does not work.
Maybe you have a version mismatch of rtpproxy and ser. Which versions do
you use?
Please send your emails always to the list, so others can help you too!
regards,
Klaus
Joao Carlos Moura wrote:
> Hi Mr Klaus,
>
> I am trying estabilish a communication between two IPphones. One side an
> IPphone behind
> a NAT with an IP 192.168.0.2 and on the other side an IPphone on a public
> and valid IP.
>
> But this did not run correctly and I got an error on the /var/log/message
> file and the specified error is shown below:
> I already searched around the lists over the net, so if you do have any clue
> to share with me, please do it because
> I don t have much experience with this but I can make it run with your help.
>
> If you need more informations from me, let me know it.
>
> Thank you very much for your attention.
>
> Kind Regards,
>
> Joao Moura
>
> ++++++++++++++++++++ ERROR +++++++++++++++++++++++++++++++++++++++++++++++
>
> /var/log/message
>
> Feb 27 18:09:47 blacksip ser[3588]: ERROR: send_rtpp_command: can't read
> reply from a RTP proxy
> Feb 27 18:09:58 blacksip ser[3586]: ERROR: send_rtpp_command: can't read
> reply from a RTP proxy
> Feb 27 18:09:58 blacksip ser[3586]: ERROR: on_reply processing failed
>
> ++++++++++++++++++++ ERROR +++++++++++++++++++++++++++++++++++++++++++++++
>
>
>>>Linux Configuration:
>>>RedHat 9.0 / Athlon 1900+ / 256MB
>>>CVS SER_0_8_12 e RTPPROXY
>>>
>>>ser.cfg
>>>#
>>># $Id: nathelper.cfg,v 1.1.2.1 2003/11/24 14:47:18 janakj Exp $
>>>#
>>># simple quick-start config script including nathelper support
>>>
>>># This default script includes nathelper support. To make it work
>>># you will also have to install Maxim's RTP proxy. The proxy is enforced
>>># if one of the parties is behind a NAT.
>>>#
>>># If you have an endpoing in the public internet which is known to
>>># support symmetric RTP (Cisco PSTN gateway or voicemail, for example),
>>># then you don't have to force RTP proxy. If you don't want to enforce
>>># RTP proxy for some destinations than simply use t_relay() instead of
>>># route(1)
>>>#
>>># Sections marked with !! Nathelper contain modifications for nathelper
>>>#
>>># NOTE !! This config is EXPERIMENTAL !
>>>#
>>># ----------- global configuration parameters ------------------------
>>>
>>>debug=3 # debug level (cmd line: -dddddddddd)
>>>fork=yes
>>>log_stderror=no # (cmd line: -E)
>>>
>>>/* Uncomment these lines to enter debugging mode
>>>fork=no
>>>log_stderror=yes
>>>*/
>>>
>>>check_via=no # (cmd. line: -v)
>>>dns=no # (cmd. line: -r)
>>>rev_dns=no # (cmd. line: -R)
>>>port=5060
>>>children=4
>>>fifo="/tmp/ser_fifo"
>>>
>>># ------------------ module loading ----------------------------------
>>>
>>># Uncomment this if you want to use SQL database
>>>#loadmodule "/usr/local/lib/ser/modules/mysql.so"
>>>
>>>loadmodule "/usr/local/lib/ser/modules/sl.so"
>>>loadmodule "/usr/local/lib/ser/modules/tm.so"
>>>loadmodule "/usr/local/lib/ser/modules/rr.so"
>>>loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
>>>loadmodule "/usr/local/lib/ser/modules/usrloc.so"
>>>loadmodule "/usr/local/lib/ser/modules/registrar.so"
>>>loadmodule "/usr/local/lib/ser/modules/textops.so"
>>>
>>># Uncomment this if you want digest authentication
>>># mysql.so must be loaded !
>>>#loadmodule "/usr/local/lib/ser/modules/auth.so"
>>>#loadmodule "/usr/local/lib/ser/modules/auth_db.so"
>>>
>>># !! Nathelper
>>>loadmodule "/usr/local/lib/ser/modules/nathelper.so"
>>>
>>># ----------------- setting module-specific parameters ---------------
>>>
>>># -- usrloc params --
>>>
>>>modparam("usrloc", "db_mode", 0)
>>>
>>># Uncomment this if you want to use SQL database
>>># for persistent storage and comment the previous line
>>>#modparam("usrloc", "db_mode", 2)
>>>
>>># -- auth params --
>>># Uncomment if you are using auth module
>>>#
>>>#modparam("auth_db", "calculate_ha1", yes)
>>>#
>>># If you set "calculate_ha1" parameter to yes (which true in this
>
> config),
>
>>># uncomment also the following parameter)
>>>#
>>>#modparam("auth_db", "password_column", "password")
>>>
>>># -- rr params --
>>># add value to ;lr param to make some broken UAs happy
>>>modparam("rr", "enable_full_lr", 1)
>>>
>>># !! Nathelper
>>>modparam("registrar", "nat_flag", 6)
>>>modparam("nathelper", "natping_interval", 30) # Ping interval 30 s
>>>modparam("nathelper", "ping_nated_only", 1) # Ping only clients behind
>
> NAT
>
>>># ------------------------- request routing logic -------------------
>>>
>>># main routing logic
>>>
>>>route{
>>>
>>> # initial sanity checks -- messages with
>>> # max_forwards==0, or excessively long requests
>>> if (!mf_process_maxfwd_header("10")) {
>>> sl_send_reply("483","Too Many Hops");
>>> break;
>>> };
>>> if (msg:len >= max_len ) {
>>> sl_send_reply("513", "Message too big");
>>> break;
>>> };
>>>
>>> # !! Nathelper
>>> # 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 is used); also,
>>> # the received test should, if completed, should check all
>>> # vias for rpesence 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 enough to be symmetric. In some phones it
>
> takes
>
>>>a configuration
>>> # option. With Cisco 7960, it is called
>
> NAT_Enable=Yes,
>
>>>with kphone it is
>>> # called "symmetric media" and "symmetric
>
> signalling".
>
>>> 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
>>> };
>>> };
>>>
>>> # we record-route all messages -- to make sure that
>>> # subsequent messages will go through our proxy; that's
>>> # particularly good if upstream and downstream entities
>>> # use different transport protocol
>>> if (!method=="REGISTER") record_route();
>>>
>>> # subsequent messages withing a dialog should take the
>>> # path determined by record-routing
>>> if (loose_route()) {
>>> # mark routing logic in request
>>> append_hf("P-hint: rr-enforced\r\n");
>>> route(1);
>>> break;
>>> };
>>>
>>> if (!uri==myself) {
>>> # mark routing logic in request
>>> append_hf("P-hint: outbound\r\n");
>>> route(1);
>>> break;
>>> };
>>>
>>> # if the request is for other domain use UsrLoc
>>> # (in case, it does not work, use the following command
>>> # with proper names and addresses in it)
>>> if (uri==myself) {
>>>
>>> if (method=="REGISTER") {
>>>
>>># Uncomment this if you want to use digest authentication
>>># if (!www_authorize("iptel.org", "subscriber")) {
>>># www_challenge("iptel.org", "0");
>>># break;
>>># };
>>>
>>> save("location");
>>> break;
>>> };
>>>
>>> lookup("aliases");
>>> if (!uri==myself) {
>>> append_hf("P-hint: outbound alias\r\n");
>>> route(1);
>>> break;
>>> };
>>>
>>> # native SIP destinations are handled using our USRLOC DB
>>> if (!lookup("location")) {
>>> sl_send_reply("404", "Not Found");
>>> break;
>>> };
>>> };
>>> append_hf("P-hint: usrloc applied\r\n");
>>> route(1);
>>>}
>>>
>>>route[1]
>>>{
>>> # !! Nathelper
>>> if (uri=~"[@:](192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)" &&
>>>!search("^Route:")){
>>> sl_send_reply("479", "We don't forward to private IP
>>>addresses");
>>> break;
>>> };
>>>
>>> # if client or server know to be behind a NAT, enable relay
>>> if (isflagset(6)) {
>>> force_rtp_proxy();
>>> };
>>>
>>> # NAT processing of replies; apply to all transactions (for
>
> example,
>
>>> # re-INVITEs from public to private UA are hard to identify as
>>> # NATed at the moment of request processing); look at replies
>>> t_on_reply("1");
>>>
>>> # send it out now; use stateful forwarding as it works reliably
>>> # even for UDP2TCP
>>> if (!t_relay()) {
>>> sl_reply_error();
>>> };
>>>}
>>>
>>># !! Nathelper
>>>onreply_route[1] {
>>> # NATed transaction ?
>>> if (isflagset(6) && status =~ "(183)|2[0-9][0-9]") {
>>> fix_nated_contact();
>>> force_rtp_proxy();
>>> # otherwise, is it a transaction behind a NAT and we did not
>>> # know at time of request processing ? (RFC1918 contacts)
>>> } else if (nat_uac_test("1")) {
>>> fix_nated_contact();
>>> };
>>>}
>>
>
>