Hi guys,
I'd like to propose another possibility for a highly-available and
scalable system design based on SER:
The problems I've encountered for scalable systems are:
- Distribution of the user location and alias location among the nodes
(user location is based on registrations, alias location comes from
web interfaces and is used for call forwarding).
- Reloading up to date location tables after breakdown and recovery of a
node
So I'm just thinking loud about the following provisioning system:
- Write a client which fulfills the this demands:
- Receive one or more locations from SER via a SER module or from a
web application and distribute them to other
known clients. Take care of retransmissions if a client isn't
reachable or reports a temporary failure.
- Receive one or more locations from other clients and write
them into the SER FIFO. If writing into the FIFO fails, try to
write directly into the database (location-table, alias-table etc.).
Report a temporary failure if this also fails.
Maybe a centralized server should be used which receives the locations
from the clients and distributes them to other clients, so that the
nodes just know about the server and nothing about other nodes. This
would make integration of new nodes easy.
On the other hand, it's another single point of failure, so a
decentralized solution should be considered. But that would mean that
you've to inform every node about the existence of a new node.
The protocol used between the nodes should be simple and fast. So I
think SOAP drops out here. Maybe XMLRPC or ICE
(http://www.zeroc.com/ice.html) could be used.
One might think now why not just use replication on SIP layer, but
t_replicate only supports one peer and you've no possibility to get
locations on a node while it's down. Replication of other location
tables like the alias-table is also not possible.
I'd be willing to release these parts as GPL for creating an open
framework for carrier-grade SER integration, so any feedback,
improvements or flames are highly welcome.
Cheers,
Andy
Hi Gang.
The company I work for is interested in buying DIDs from Europe. Of course
the connection should be SIP.
If any of you is selling them, please contact me off the list.
Regards
Juan Ferrari
VoIP & Telecom Specialist
United World Telecom
Phone: +1561-276 7156 ext. 302
Hi,
I was wondering how I can route my SER users to other
SIP servers, without need of authentication to other
server.
I mean this:
My User -> Auth -> My SER
My SER -> Auth -> Other SIP Server
My User --------make call--------> My SER
--------route call-------> Other SIP Server
Thank you.
Kaveh
__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.com
Hi Joao,
No I was not able to solve the issue.
It seems (this is my guess tough) that the Portaone RTP proxy assumes that it has one public IP adress, so the valid configuration to use it is Public Nt-Private Nt. I was not able to make it work in other configurations (neiher I got feedback from Portaone to do so).
Nevertheless the code is available, so it could be modified...as long as you have the time and will to do so. I did not ;).
Best regards,
josé
-----Original Message-----
From: Joao Pereira [mailto:joao.pereira@fccn.pt]
Sent: 19. oktober 2005 20:17
To: Jose Soler; serusers(a)lists.iptel.org
Subject: Re: [Serusers] RTP proxy between two subnetworks with private @s
Hello, did you made it to put the clients of networks A and B to call
each other?
I want to do the same, and tried a lot of SER/RTPproxy configurations,
including the one in: /ser-0.9.0/modules/nathelper/examples/alg.cfg
and also tried to run rtpproxy with the "-l 10.0.0.135/193.136.2.2" option. But I just was able to ring the phones (wen calling between networks),
but the RTP doesnt pass...
If you found the solution, please tell me.
Thanks
Joao Pereia
www.fccn.pt
Jose Soler wrote:
> Hi,
>
> I am trying to figure out how to solve the follwoing problem. I have
> two subnetworks, A and B, with different private ip adressing schemes
> (IP@A <mailto:IP@A>) and (IP@B <mailto:IP@B>).
>
> SER is installed in a computer with network interfaces towards both
> subnetworks.
> SER's SIP signalling proxying operation works properly within the
> subnetworks and when trying to set up a communication between users in
> A and B. But in that last case, obviously there is no media at all
> circulating among the subnetworks.
>
> Portaone's RTP proxy has been installed and configured in the computer
> with interfaces towards both subnetworks where SER is installed.
>
> I am trying to configure SER so that, based on the nathelper module,
> when communication between both subnetworks occurs, the RTP proxy is
> involved and the communication (also media and not only signalling) is
> possible. BUT I am making something wrong, becouse it does not work ...
>
> Can anyone give me a hand /hint?
> Thanks a lot in advance / in any case.
>
> My SER config file is the following:
>
>
> #
>
> # ----------- global configuration parameters ------------------------
>
> /* Uncomment these lines to enter debugging mode
>
> debug=7
>
> fork=no
>
> log_stderror=yes
>
> */
>
> check_via=no # (cmd. line: -v)
>
> dns=no # (cmd. line: -r)
>
> rev_dns=no # (cmd. line: -R)
>
> fifo="/tmp/ser_fifo"
>
> fifo_mode=0662
>
> alias=wirelessip.x.x.x
>
> alias=sip..x.x.x
>
> alias=x.x.x
>
> log_stderror=no
>
> debug=3
>
> children=3
>
> mhomed=1
>
> # ------------------ module loading ----------------------------------
>
> # Uncomment this if you want to use SQL database
>
> loadmodule "/lib/ser/modules/mysql.so"
>
> loadmodule "/lib/ser/modules/sl.so"
>
> loadmodule "/lib/ser/modules/tm.so"
>
> loadmodule "/lib/ser/modules/rr.so"
>
> loadmodule "/lib/ser/modules/maxfwd.so"
>
> loadmodule "/lib/ser/modules/usrloc.so"
>
> loadmodule "/lib/ser/modules/textops.so"
>
> loadmodule "/lib/ser/modules/registrar.so"
>
> # Uncomment this if you want digest authentication
>
> # mysql.so must be loaded !
>
> loadmodule "/lib/ser/modules/auth.so"
>
> loadmodule "/lib/ser/modules/auth_db.so"
>
> # For NAT support / media proxying
>
> loadmodule "/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)
>
> # For NAT
>
> # We will use flag 6 to mark NATed contacts
>
> modparam("registrar", "nat_flag", 6)
>
> # Enable NAT pinging
>
> modparam("nathelper", "natping_interval", 60)
>
> # Ping only contacts that are known to be
>
> # behind NAT
>
> modparam("nathelper", "ping_nated_only", 1)
>
> # ------------------------- 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;
>
> };
>
> # 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
>
> };
>
> };
>
> # 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
>
> record_route();
>
> # loose-route processing
>
> if (loose_route()) {
>
> t_relay();
>
> break;
>
> };
>
> lookup("aliases");
>
> # 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("com.dtu.dk", "subscriber")) {
>
> www_challenge("com.dtu.dk", "0");
>
> break;
>
> };
>
> save("location");
>
> break;
>
> };
>
> # native SIP destinations are handled using our USRLOC DB
>
> if (!lookup("location")) {
>
> sl_send_reply("404", "Not Found");
>
> break;
>
> };
>
> };
>
> # forward to current uri now; use stateful forwarding; that
>
> # works reliably even if we forward from TCP to UDP
>
> if (!t_relay()) {
>
> sl_reply_error();
>
> };
>
> }
>
> #
>
> # Forcing media relay if necessary
>
> #
>
> route[1] {
>
> #if (uri=~"[@:](192\.168\.|10\.|172\.16)" && !search("^Route:")){
>
> # sl_send_reply("479", "We don't forward to private IP addresses");
>
> # break;
>
> #};
>
> #if (isflagset(6)) {
>
> force_rtp_proxy(); # I force everything through the proxy
>
> t_on_reply("1");
>
> append_hf("P-Behind-NAT: Yes\r\n");
>
> #};
>
> if (!t_relay()) {
>
> sl_reply_error();
>
> break;
>
> };
>
> }
>
> onreply_route[1] {
>
> if (status =~ "(183)|2[0-9][0-9]") {
>
> fix_nated_contact();
>
> force_rtp_proxy();
>
> };
>
> }
>
>
>
>
>
>
>
>
>-----------------------------------------------------------------------
>-
>
>_______________________________________________
>Serusers mailing list
>serusers(a)lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
>
>
I am relatively new to SER. My SIP service provider requires me to
present the ANI in the "From" field in my INVITE message header in E.164
format. I am currently sending this information as follows:
From: "2125551212" <sip:2125551212@xxx.xxx.xxx.xxx>
They want it in E.164 format as follows:
From: "+12125551212" <sip:+12125551212@xxx.xxx.xxx.xxx>
I see function only to modify the SIP URI but not the other header or
SDP fields.
Could someone help me with a code snippet that I can use in ser.cfg to
do this conversion?
Regards,
SCM
on my machine,
ser 0.9.3 crashes as soon as a UA sends REGISTER message
on doing gdb ser corefile i get the following when calling 'bt'
(gdb) bt
#0 qm_malloc (qm=0x8107e00, size=760) at mem/q_malloc.c:290
#1 0x0806ce0e in receive_msg (
buf=0x80d6560 "REGISTER sip:194.255.1.199:5060 SIP/2.0\r\nFrom:
<sip:88515356@194.255.1.199>;tag=ccd4c5cb-13c4-2838-9d1b45-6d9e\r\nTo:
<sip:88515356@194.255.1.199>\r\nCall-ID:
ccd4c5cb-13c4-2838-9d1b45-7a20\r\nCSeq: 1 REGIS"...,
len=437, rcv_info=0xbfed0fe0) at receive.c:92
#2 0x0808421c in udp_rcv_loop () at udp_server.c:458
#3 0x0805ceaf in main_loop () at main.c:1032
#4 0x0805e50b in main (argc=2, argv=0xbfed11a4) at main.c:1568
(gdb) print h
$9 = 0
please help,
note that a similar setup on another machine works just fine.
tulika
HI, In my serial forking configuration I have this problem:
if i use the a media gateway ( asterisk ) on the same machine ( but I
see also on the another machine) of openser ( on the 5061 port) I have a
problem with the timeout of a call. The call continues beyond the
timeout and when by the PSTN telephone I reject the call appears the
following log message:
Warning: sl_send_reply: I won't send a reply for ACK!!
Where I have mistake? Any idea?
Another thing. I see that I redirect the call directly in the media
gateway, (for example a location of a user is a PSTN number) whitout the
traslation of IP number, all is ok.
Matteo
======================================
#
# $Id: openser.cfg$
#
#
# ----------- global configuration parameters ------------------------
debug=3 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=yes # (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/openser_fifo"
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database
loadmodule "/usr/local/lib/openser/modules/mysql.so"
loadmodule "/usr/local/lib/openser/modules/sl.so"
loadmodule "/usr/local/lib/openser/modules/tm.so"
loadmodule "/usr/local/lib/openser/modules/rr.so"
loadmodule "/usr/local/lib/openser/modules/maxfwd.so"
loadmodule "/usr/local/lib/openser/modules/usrloc.so"
loadmodule "/usr/local/lib/openser/modules/registrar.so"
loadmodule "/usr/local/lib/openser/modules/textops.so"
loadmodule "/usr/local/lib/openser/modules/avpops.so"
loadmodule "/usr/local/lib/openser/modules/xlog.so"
loadmodule "/usr/local/lib/openser/modules/lcr.so"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/local/lib/openser/modules/auth.so"
loadmodule "/usr/local/lib/openser/modules/auth_db.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
modparam("registrar", "append_branches", 1)
#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)
modparam("usrloc","db_url","mysql://openser:heslo@127.0.0.1/openser")
modparam("auth_db","db_url","mysql://openser:heslo@127.0.0.1/openser")
modparam("lcr","db_url","mysql://openser:heslo@127.0.0.1/openser")
modparam("avpops","avp_url","mysql://openser:heslo@127.0.0.1/openser")
modparam("avpops","avp_table","usr_preferences")
modparam("tm", "fr_timer", 7)
modparam("tm", "fr_inv_timer", 10)
modparam("tm", "wt_timer", 5)
#modparam("avpops","avp_aliases","fwdbusy=i:665")
# ------------------------- 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");
exit;
};
if (msg:len >= 2048 ) {
sl_send_reply("513", "Message too big");
exit;
};
# =============================
# Notify Keep-Alive Section
# ============================
if ((method=="NOTIFY") && search("Event: keep-alive")) {
sl_send_reply("200","OK");
exit;
};
if (method =="INVITE" && uri =~"^sip:0[0-9]*@*"){
log(1, "Check 1 Start PSTN Call\n");
rewritehostport("192.168.9.97:5061");
}
# ========================================================
# 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()) {
if(method=="BYE"){
t_relay();
exit;
};
# mark routing logic in request
append_hf("P-hint: rr-enforced\r\n");
route(1);
};
if (!uri==myself) {
# mark routing logic in request
append_hf("P-hint: outbound\r\n");
# if you have some interdomain connections via TLS
#if(uri=~"@tls_domain1.net") {
# t_relay_to_tls("IP_domain1","port_domain1");
# exit;
#} else if(uri=~"@tls_domain2.net") {
# t_relay_to_tls("IP_domain2","port_domain2");
# exit;
#}
route(1);
};
# 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("create-net.it", "subscriber")) {
www_challenge("create-net.it", "0");
exit;
};
save("location");
exit;
};
lookup("aliases");
if (!uri==myself) {
append_hf("P-hint: outbound alias\r\n");
route(1);
};
# native SIP destinations are handled using our USRLOC DB
if (!lookup("location")) {
sl_send_reply("404", "Not Found");
exit;
};
append_hf("P-hint: usrloc applied\r\n");
};
# =======================================
# PSTN Getaway
# =======================================
if(method=="INVITE"){
if (avp_db_load("$ruri","s:fwdactive")) {
if(avp_check("s:fwdactive","eq/y/i")){
log(1,"FWD ACTIVE\n!");
setflag(2);
}
};
if (avp_db_load("$ruri","s:mailactive")) {
if(avp_check("s:mailactive","eq/y/i")){
log(1,"MAIL ACTIVE\n!");
setflag(4);
}
}
if(load_contacts()){
xlog("L_ERR","LOAD CONTACTS!\n");
setflag(1);
};
if(next_contacts()){
xlog("L_ERR","NEXT CONTACT!\n");
};
};
if(isflagset(2)){
t_on_failure("1");
t_relay();
exit;
}
else {
if(isflagset(4)){
t_on_failure("2");
t_relay();
exit;
}
else {
t_on_failure("3");
t_relay();
exit;
}
};
}
route[1] {
# log(1,"ROUTE 1 !\n");
if (!t_relay()) {
sl_reply_error();
};
exit;
}
route[2] {
# send it out now; use stateful forwarding as it works reliably
# even for UDP2TCP
log(1,"ROUTE 2 !\n");
sl_send_reply("181","CALL IS BEING FORWARDED");
t_on_failure("1");
if (!t_relay()) {
sl_reply_error();
};
exit;
}
failure_route[1]{
log(1,"FAILURE ROUTE FORWARD !\n");
if (t_check_status("408")){
if (next_contacts()) {
log(1,"NUOVO CONTATTO !\n");
route(2);
exit;
}
else {
log(1,"FINE CHIAMATA - TIME OUT!\n");
if (isflagset(4)){
log(1,"ATTIVAZIONE VOICEMAIL!\n");
revert_uri();
xlog("L_ERR","<$ruri>");
rewritehostport("192.168.9.97:5061");
append_branch();
t_relay();
exit;
}
exit;
};
}
else {
if ( t_check_status("603") || t_check_status("486") ){
log(1,"OCCUPATO!\n");
if (isflagset(4)){
log(1,"ATTIVAZIONE VOICEMAIL!\n");
revert_uri();
xlog("L_ERR","<$ruri>");
rewritehostport("192.168.9.97:5061");
append_branch();
t_relay();
exit;
}
exit;
}
};
}
failure_route[2] {
log(1,"FINE CHIAMATA 2 - SENZA FORWARD!\n");
revert_uri();
xlog("L_ERR","<$ruri>");
rewritehostport("192.168.9.97:5061");
append_branch();
t_relay();
exit;
}
failure_route[3] {
log(1,"FINE CHIAMATA 3 - SENZA FORWARD!\n");
if ( t_check_status("603") || t_check_status("486") ){
t_relay();
exit;
}
exit;
}
=======================================
Matteo Piazza, Junior Researcher
CREATE-NET
Via Solteri, 38 - 38100 Trento - Italy
email: matteo.piazza(a)create-net.it
Tel: +39-0461-408400ext:308
www.create-net.it
=======================================
Yes, On serweb acount tab message store.
I've seen the voicemail plugin code,
and this doesn't write on mysql silo table.
How I do put voicemail on serweb?
Regards
Alejandro.
El sáb, 23-07-2005 a las 11:46 +0200, harry gaillac escribió:
> Hello,
>
> You mean forward to voicemail on account tab ?
>
> harry
> --- Alejandro Mellado <amellado(a)uct.cl> a écrit :
>
> > Hi
> >
> >
> > I'm trying to activate the voicemail in serweb.
> > I've working msilo with IM successfully.
> >
> > Somebody Can help me?
> >
> >
> > Regards
> > Saluda Atte.
> > Alejandro Mellado <amellado(a)uct.cl>.
> > Escuela de Informática
> > Universidad Católica de Temuco
> >
> > _______________________________________________
> > Serusers mailing list
> > serusers(a)lists.iptel.org
> > http://lists.iptel.org/mailman/listinfo/serusers
> >
>
>
>
>
>
>
>
> ___________________________________________________________________________
> Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger
> Téléchargez cette version sur http://fr.messenger.yahoo.com
Saluda Atte.
Alejandro Mellado <amellado(a)uct.cl>.
Escuela de Informática
Universidad Católica de Temuco
Hello,
Im making tests and its not a LCR problem, its a problem from my GW2,
when I use it for first option, it fails too, here you have the
ngrep,
ClientA --> Proxy -->
GW2
(192.168.10.93) (192.168.10.91)
(195.219.74.166)
Regards
The problem is that the BYE request will be handled by your LCR logic.
The BYE request should be route in the loose_route block as it is an
in-dialog request. Maybe the BYE sent from the gateway is not correct.
Please post a ngrep dump (ngrep -t -W byline port 5060)
regards
klaus
Pepe wrote:
> Hello,
>
> Im configuring Openser with LCR module and Im having an extrange
> behavior, I have 2 gateways, GW1(preference1) and GW2(preference2),
>
> GW1(pref.1)
> / \
> ClientA --> OpenSer --> Client B
> \ GW2 (pref.2) /
>
>
> When I call from Client A to Client B using GW1, all works fine, its the
> same when hang up Client B or Client A, but when GW1 fail(I provoke it
> changing codec) and use failure route (GW 2) then if Client A hang up
> all works fine, but the problem is when is Client B who hang up, its
> like a new conversation, GW 2 send BYE to openser and Openser just send
> "503 Service Not avilable - No gateways" to GW2, but doesnt send nothing
> to ClientA, any idea ????
>
>
> Thx in advance
>