Hello,
I posted many many mails about nathelper/rtpproxy
Music On Hold
I've been waiting a reply about nathelper/rtpproxy
Music On Hold features .
May be somebody could tell me more how to provide MOH
via nathelper/rtpproxy Music On Hold
I don't want to spend time to post the same question !
Regards
Harry
___________________________________________________________________________
Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger
Téléchargez cette version sur http://fr.messenger.yahoo.com
Hello,
Has anyone else experienced the below error when adding an alias using
ser version 0.9.0?
1(28100) ERROR:ul_add: flags expected
400 ul_add; flags expected
I am going according to the usage info: serctl alias add <alias> <uri>
Many thanks,
Aisling.
-------------------Legal Disclaimer---------------------------------------
The above electronic mail transmission is confidential and intended only for the person to whom it is addressed. Its contents may be protected by legal and/or professional privilege. Should it be received by you in error please contact the sender at the above quoted email address. Any unauthorised form of reproduction of this message is strictly prohibited. The Institute does not guarantee the security of any information electronically transmitted and is not liable if the information contained in this communication is not a proper and complete record of the message as transmitted by the sender nor for any delay in its receipt.
Hi all,
I need help from developpers to write an python
script.
I 'm not really able to write this script however it
could improve sems features.
If we store voice messages on a imap server can we
write a python script (imaplib) to manage messages
from
anywhere.
Can we set a main menu with recorded messages in order
to read play delete voice messages ?
phone -------- sems--------- imap server
Does imaplib can act as a imap client?
what are the main problems between imap protocol and
sems?
For example I want to listen my voices messages so i
must send login password to imap server via sems
(DTMF)
for authentication.
If I press a key to read messages imap server send
command to sems .
How sems could play voice messages from imap server ?
thanks for suggestions
Harry
___________________________________________________________________________
Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger
Téléchargez cette version sur http://fr.messenger.yahoo.com
Hello,
Even "I do not meet the profile of your customers"
You can explain me how to setup prepaid/postpaid
applications vith cdrtool and mediaproxy !
How can you tell "I dont meet the profile of your
customers"!
regards
Harry
--- Adrian Georgescu <ag(a)ag-projects.com> a écrit :
> Sorry Harry, I cannot advise you on anything. You do
> not meet the
> profile of our customers, you have to search some
> place else.
>
> Adrian
>
> On Aug 9, 2005, at 12:48 AM, harry gaillac wrote:
>
> > Hello,
> >
> > I downloaded CDRtool and mediaproxy.
> > Does CDRtool and mediaproxy can provide a
> > prepaid/postpaid solution ?
> >
> > What do you advise me ?
> >
> > from /INSTALL.txt
> >
> > For SIP Tracing, SER quota and Prepaid you need
> > additional modules from AG
> > Projects.
> > what's SER call control module ?
> >
> > Can you tell me more ?
> >
> > Regards
> > Harry
>
>
___________________________________________________________________________
Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger
Téléchargez cette version sur http://fr.messenger.yahoo.com
hi,
I m sorry for my earlier mail as the picture was not very clear. The scenario is something like this:
Client A (Public IP)
\ ________ __________________ __________
\| My | | Foreign Openser | | PSTN |
|Openser |-----------------------| trusts me through |--------------| Gateway |
/ |_______ | | source IP | |_________|
/ |__________________|
/
Client B (Private IP)
Whenever My Openser receives a call with prefix for eg. 011, it t_relay it to the foreign Ser which trusts My Openser with source IP. Now when the client A with public IP makes a call it gets established but when the client B with private IP makes a call I receive the ringing message but the RTP sessions does not start. I have configured the mediaproxy in My Openser but still it does'nt seem to work. Pls help me figure out the problem.
The RTP Proxy session is not happening and that might be the reason for the problem. Can u pls help me understand why RTP proxy is not getting established for Nated clients.
Below is my configuration script:
debug=3
fork=yes
log_stderror=no
listen=203.XXX.64.XX # INSERT YOUR IP ADDRESS HERE
port=5060
children=4
dns=no
rev_dns=no
fifo="/tmp/ser_fifo"
fifo_db_url="mysql://openser:openserrw@localhost/openser"
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/auth.so"
loadmodule "/usr/local/lib/openser/modules/auth_db.so"
loadmodule "/usr/local/lib/openser/modules/uri.so"
loadmodule "/usr/local/lib/openser/modules/uri_db.so"
loadmodule "/usr/local/lib/openser/modules/mediaproxy.so"
loadmodule "/usr/local/lib/openser/modules/nathelper.so"
loadmodule "/usr/local/lib/openser/modules/textops.so"
loadmodule "/usr/local/lib/openser/modules/avpops.so"
loadmodule "/usr/local/lib/openser/modules/domain.so"
loadmodule "/usr/local/lib/openser/modules/permissions.so"
loadmodule "/usr/local/lib/openser/modules/acc.so"
modparam("auth_db|permissions|uri_db|usrloc|acc",
"db_url", "mysql://openser:openserrw@localhost/openser")
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")
modparam("nathelper", "rtpproxy_disable", 1)
modparam("nathelper", "natping_interval", 0)
modparam("mediaproxy","natping_interval", 30)
modparam("mediaproxy","mediaproxy_socket", "/var/run/mediaproxy.sock")
modparam("mediaproxy","sip_asymmetrics","/usr/local/etc/ser/sip-asymmetric-clients")
modparam("mediaproxy","rtp_asymmetrics","/usr/local/etc/ser/rtp-asymmetric-clients")
modparam("usrloc", "db_mode", 2)
modparam("registrar", "nat_flag", 6)
modparam("rr", "enable_full_lr", 1)
modparam("tm", "fr_inv_timer", 27)
modparam("tm", "fr_inv_timer_avp", "inv_timeout")
modparam("permissions", "db_mode", 1)
modparam("permissions", "trusted_table", "trusted")
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)
modparam("acc", "db_flag", 1)
route {
# -----------------------------------------------------------------
# Sanity Check Section
# -----------------------------------------------------------------
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483", "Too Many Hops");
break;
};
if (msg:len > max_len) {
sl_send_reply("513", "Message Overflow");
break;
};
# -----------------------------------------------------------------
# Record Route Section
# -----------------------------------------------------------------
if (method=="INVITE" && client_nat_test("3")) {
# INSERT YOUR IP ADDRESS HERE
record_route_preset("203.XXX.64.XX:5060;nat=yes");
} else if (method!="REGISTER") {
record_route();
};
# -----------------------------------------------------------------
# Call Tear Down Section
# -----------------------------------------------------------------
if (method=="BYE" || method=="CANCEL") {
end_media_session();
};
# -----------------------------------------------------------------
# Loose Route Section
# -----------------------------------------------------------------
if (loose_route()) {
if (has_totag() && (method=="INVITE" || method=="ACK")) {
if (client_nat_test("3")||search("^Route:.*;nat=yes")){
setflag(6);
use_media_proxy();
};
};
route(1);
break;
};
# -----------------------------------------------------------------
# Call Type Processing Section
# -----------------------------------------------------------------
if (uri!=myself) {
route(5);
route(1);
break;
};
if (uri==myself) {
if (method=="ACK") {
route(6);
break;
} else if (method=="CANCEL") {
route(3);
break;
} else if (method=="INVITE") {
route(3);
break;
} else if (method=="REGISTER") {
route(2);
break;
};
lookup("aliases");
if (uri!=myself) {
route(5);
route(1);
break;
};
if (!lookup("location")) {
sl_send_reply("404", "User Not Found");
break;
};
};
route(1);
}
route[1] {
# -----------------------------------------------------------------
# Default Message Handler
# -----------------------------------------------------------------
t_on_reply("1");
if (!t_relay()) {
if (method=="INVITE" || method=="ACK") {
end_media_session();
};
sl_reply_error();
};
}
route[2] {
# -----------------------------------------------------------------
# REGISTER Message Handler
# -----------------------------------------------------------------
sl_send_reply("100", "Trying");
if (!search("^Contact:\ +\*") && client_nat_test("7")) {
setflag(6);
fix_nated_register();
force_rport();
};
if (!www_authorize("my_domain","subscriber")) {
www_challenge("my_domain","0");
break;
};
if (!check_to()) {
sl_send_reply("401", "Unauthorized");
break;
};
consume_credentials();
if (!save("location")) {
sl_reply_error();
};
}
route[3] {
# -----------------------------------------------------------------
# CANCEL and INVITE Message Handler
# -----------------------------------------------------------------
setflag(1);
if (client_nat_test("3")) {
setflag(7);
force_rport();
fix_nated_contact();
};
if (method=="INVITE" && !allow_trusted()) {
if (!proxy_authorize("my_domain","subscriber")) {
proxy_challenge("my_domain","0");
break;
} else if (!check_from()) {
sl_send_reply("403", "Use From=ID");
break;
};
consume_credentials();
};
lookup("aliases");
if (uri!=myself) {
route(5);
route(1);
break;
};
if (uri=~"^sip:011[0-9]*@") { # International PSTN
route(4);
break;
};
if (!lookup("location")) {
if (uri=~"^sip:[0-9]{10}@") { # Domestic PSTN
route(4);
break;
};
sl_send_reply("404", "User Not Found");
break;
};
if (method=="CANCEL") {
route(1);
break;
};
route(5);
route(1);
}
route[4] {
# -----------------------------------------------------------------
# PSTN Handler
# -----------------------------------------------------------------
rewritehost("66.XXX.11.XX");
avp_write("i:45", "inv_timeout");
route(5);
route(1);
}
route[5] {
# -----------------------------------------------------------------
# RTP Proxy Enabler
# -----------------------------------------------------------------
if (isflagset(6) || isflagset(7)) {
use_media_proxy();
};
}
route[6] {
# ------------------------------------------------------------------------
# ACK Handler
# ------------------------------------------------------------------------
# ------------------------------------------------------------------------
# Aliases Section
# ------------------------------------------------------------------------
lookup("aliases");
if (uri!=myself) {
route(5);
route(1);
break;
};
lookup("location");
route(1);
}
onreply_route[1] {
if ((isflagset(6) || isflagset(7)) &&
(status=~"(180)|(183)|2[0-9][0-9]")) {
if (!search("^Content-Length:\ +0")) {
use_media_proxy();
};
};
if (client_nat_test("1")) {
fix_nated_contact();
};
}
---------------------------------
Do you Yahoo!?
Yahoo! Mail - Find what you need with new enhanced search. Learn more.
I'm looking for ideas on how to use the dispatcher module with a list
file that is frequently updated by another process (specifically, it
checks the availability of the remote machines, and also interacts with
the heartbeat program).
In the past, I've always used an exec_dst() call to run an external
program which does this, but would now like to migrate to using
dispatcher for performance. If that's not possible, I'll go back to the
old method.
I've considered adding a call to ds_select_dst() to call
ds_destroy_list(); ds_load_list() on each request with file locking. It
looks like it should work. Has anyone implemented this? Does it work?
Does it have a significant impact on performance?
I'd also be open to having the other process write to a database table,
which then SER reads. I'm not sure what's the best mechanism within SER
to look up the table - perhaps avpops? I'd even be willing write a new
module to do it - 'dispatcher_db' perhaps, but this wouldn't be in the
short future.
--
Alistair Cunningham,
Integrics Ltd,
+44 (0)7870 699 479
http://integrics.com/
Dear List, This is a big explanation with enough information except
ngrep/ethereal captures, in both cases : ADSL Connection Speed : 512/128,
ATA's : Zyxel P2002,Codec : G729,RTP Port Range : 19000-20000, and OpenSER
on Public IP without NAT etc. I think i should change the ser.cfg to use
MediaProxy just for SIP2SIP calls not for PSTN calls and i do not know how
to do it, any clues ? Thanks,Ozan * A Side client use Zoom 4X, port
forwarding to ATA in modem setting i register as port:5060 (openserctl ul
show),* B Side client use Zyxel 660R, port forwarding to ATA in modem
setting and register as port:10XXX (openserctl ul show),* Make a call to
other sip client it's okay voice quality is acceptable most of time, but
caller or callee losts ADSL connection after 30-60 seconds,* From A Side
(Zoom 4X), make a call to PSTN, ADSL crashes, everything locks up,* From B
Side (Zyxel 660R), make a call to PSTN, everything is normal, connection
never down. ps: If i change A Side client modem to Zyxel 660R too as B Side
client, the problems are totaly same. here is my basic ser.cfg
>>>debug=3fork=yeslog_stderror=nocheck_via=nolisten=212.XXX.104.XXX #
OpenSER Server on Public IP
port=5060children=4dns=norev_dns=nofifo="/tmp/openser_fifo"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"modparam("usrloc", "db_mode",
0)modparam("rr", "enable_full_lr", 1)route { if
(!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too
Many Hops"); break; }; if (msg:len > max_len)
{ sl_send_reply("513", "Message Overflow");
break; }; if (method!="REGISTER") {
record_route(); }; if (loose_route()) {
route(1); break; }; if (uri!=myself)
{ route(1); break; }; if
(uri==myself) { if (method=="REGISTER")
{ route(2);
break; }; lookup("aliases");
if (uri!=myself) { route(1);
break; }; if (uri=~"^sip:0[0-9]*@*")
{ rewritehost("195.XXX.122.XXX"); # PSTN Gateway on
Public IP
route(1);
break; }; if (!lookup("location"))
{ sl_send_reply("404", "User Not Found");
break; }; route(1); };}route[1]
{ if (!t_relay()) { sl_reply_error(); };}route[2]
{ if (!save("location")) {
sl_reply_error(); };}In my advanced SER.CFG ;* A Side client
use Zoom 4X, port forwarding to ATA in modem setting i register as
port:1XXXX (openserctl ul show),* B Side client use Zyxel 660R, port
forwarding to ATA in modem setting and register as port:1XXXX (openserctl ul
show),* Make a call to other sip client it's okay voice quality is worse
then first case most of time, connection never down,* From A Side (Zoom 4X),
make a call to PSTN, everything is normal, connection never down,* From B
Side (Zyxel 660R), make a call to PSTN, everything is normal, connection
never down. ps : If i change both A Side client and B Side client modems not
to do port forwarding, problems are totaly same. here is my advanced ser.cfg
>>> debug=3
fork=yes
log_stderror=no
listen=212.XXX.104.XXX # OpenSER Server on Public IP
port=5060
children=4
alias=212.XXX.104.XXX # OpenSER Server on Public IP
dns=no
rev_dns=no
fifo="/tmp/openser_fifo"
fifo_db_url="mysql://openser:openserrw@localhost/openser"
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/auth.so"
loadmodule "/usr/local/lib/openser/modules/auth_db.so"
loadmodule "/usr/local/lib/openser/modules/uri.so"
loadmodule "/usr/local/lib/openser/modules/uri_db.so"
loadmodule "/usr/local/lib/openser/modules/mediaproxy.so"
loadmodule "/usr/local/lib/openser/modules/nathelper.so"
loadmodule "/usr/local/lib/openser/modules/textops.so"
loadmodule "/usr/local/lib/openser/modules/domain.so"
loadmodule "/usr/local/lib/openser/modules/acc.so"
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "use_domain", 1)
modparam("domain", "db_mode", 1)
modparam("nathelper", "rtpproxy_disable", 1)
modparam("nathelper", "natping_interval", 180)
modparam("mediaproxy","natping_interval", 30)
modparam("mediaproxy","mediaproxy_socket", "/var/run/mediaproxy.sock")
modparam("mediaproxy","sip_asymmetrics","/usr/local/etc/openser/sip-asymmetric-clients")
modparam("mediaproxy","rtp_asymmetrics","/usr/local/etc/openser/rtp-asymmetric-clients")
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "use_domain", 1)
modparam("registrar", "default_expires", 60)
modparam("registrar", "min_expires", 30)
modparam("registrar", "nat_flag", 6)
modparam("registrar", "use_domain", 1)
modparam("rr", "enable_full_lr", 1)
modparam("acc", "db_url", "mysql://openser:openserrw@localhost/openser")
modparam("acc", "failed_transactions", 1)
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)
modparam("acc", "db_flag", 1)
route {
# -----------------------------------------------------------------
# Sanity Check Section
# -----------------------------------------------------------------
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483", "Too Many Hops");
break;
};
if (msg:len > max_len) {
sl_send_reply("513", "Message Overflow");
break;
};
# -----------------------------------------------------------------
# Record Route Section and Acc section
# -----------------------------------------------------------------
if (method=="INVITE" && client_nat_test("3")) {
record_route_preset("212.XXX.104.XXX:5060;nat=yes");
} else if (method!="REGISTER") {
if!(uri=~"^sip:833[0-9]*@") {
record_route();
setflag(1);
}
};
# -----------------------------------------------------------------
# Call Tear Down Section
# -----------------------------------------------------------------
if (method=="BYE" || method=="CANCEL") {
end_media_session();
};
# -----------------------------------------------------------------
# Loose Route Section
# -----------------------------------------------------------------
if (loose_route()) {
if (has_totag() && (method=="INVITE" || method=="ACK")) {
if (client_nat_test("3") ||
search("^Route:.*;nat=yes")) {
setflag(6);
use_media_proxy();
};
};
route(1);
break;
};
# -----------------------------------------------------------------
# Call Type Processing Section
# -----------------------------------------------------------------
if (uri!=myself) {
route(1);
break;
};
if (uri==myself) {
if (method=="CANCEL") {
route(3);
break;
} else if (method=="INVITE") {
route(3);
break;
} else if (method=="REGISTER") {
route(2);
break;
};
lookup("aliases");
if (uri!=myself) {
route(1);
break;
};
if (!lookup("location")) {
sl_send_reply("404", "User Not Found");
break;
};
};
route(1);
}
route[1] {
# -----------------------------------------------------------------
# Default Message Handler
# -----------------------------------------------------------------
t_on_reply("1");
if (!t_relay()) {
if (method=="INVITE" || method=="ACK") {
end_media_session();
};
sl_reply_error();
};
}
route[2] {
# -----------------------------------------------------------------
# REGISTER Message Handler
# ----------------------------------------------------------------
if (!search("^Contact:\ +\*") && client_nat_test("7")) {
setflag(6);
fix_nated_register();
force_rport();
};
sl_send_reply("100", "Trying"); if (!www_authorize("","subscriber")) {
www_challenge("","0");
break;
};
if (!check_to()) {
sl_send_reply("401", "Unauthorized");
break;
};
consume_credentials();
if (!save("location")) {
sl_reply_error();
};
}
route[3] {
# -----------------------------------------------------------------
# CANCEL and INVITE Message Handler
# -----------------------------------------------------------------
if (client_nat_test("3")) {
setflag(7);
force_rport();
fix_nated_contact();
};
lookup("aliases");
if (uri!=myself) {
route(1);
break;
};
if (uri=~"^sip:0[0-9]*@*") {
rewritehost("195.XXX.122.XXX"); # PSTN Gateway on Public IP
route(1);
break;
};
if (!lookup("location")) {
sl_send_reply("404", "User Not Found");
break;
};
if (method=="CANCEL") {
route(1);
break;
};
if (!proxy_authorize("","subscriber")) {
proxy_challenge("","0");
break;
} else if (!check_from()) {
sl_send_reply("403", "Use From=ID");
break;
};
consume_credentials();
if (isflagset(6) || isflagset(7)) {
use_media_proxy();
};
route(1);
}
onreply_route[1] {
if ((isflagset(6) || isflagset(7)) &&
(status=~"(180)|(183)|2[0-9][0-9]")) {
if (!search("^Content-Length:\ +0")) {
use_media_proxy();
};
};
if (client_nat_test("1")) {
fix_nated_contact();
};
}
If it is exposed as a environmental variable, you can do a export <env
variable> = something.
This can be used in conjunction with the exec_msg in the ser.cfg
-----Original Message-----
From: serusers-bounces(a)iptel.org [mailto:serusers-bounces@lists.iptel.org] On
Behalf Of ranveer kunal
Sent: Wednesday, August 10, 2005 6:42 PM
To: serusers(a)lists.iptel.org
Subject: [Serusers] ser : rport
hi all,
I am using ser, i want ser to add an rport to the via header, is
this possible?
Thanks
Ranveer.
_______________________________________________
Serusers mailing list
serusers(a)lists.iptel.org
http://lists.iptel.org/mailman/listinfo/serusers
Dear List,This is a big explanation with enough information except ngrep/ethereal captures, in both cases :ADSL Connection Speed : 512/128,ATA's : Zyxel P2002,Codec : G729,RTP Port Range : 19000-20000,and OpenSER on Public IP without NAT etc.I think i should change the ser.cfg to use MediaProxy just for SIP2SIP calls not for PSTN calls and i do not know how to do it, any clues ?Thanks,Ozan* A Side client use Zoom 4X, port forwarding to ATA in modem setting i register as port:5060 (openserctl ul show),* B Side client use Zyxel 660R, port forwarding to ATA in modem setting and register as port:10XXX (openserctl ul show),* Make a call to other sip client it's okay voice quality is acceptable most of time, but caller or callee losts ADSL connection after 30-60 seconds,* From A Side (Zoom 4X), make a call to PSTN, ADSL crashes, everything locks up,* From B Side (Zyxel 660R), make a call to PSTN, everything is normal, connection never down.ps: If i change A Side client modem to Zyxel 660R too as B Side client, the problems are totaly same.here is my basic ser.cfg >>>debug=3fork=yeslog_stderror=nocheck_via=nolisten=212.XXX.104.XXX # OpenSER Server on Public IP
port=5060children=4dns=norev_dns=nofifo="/tmp/openser_fifo"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"modparam("usrloc", "db_mode", 0)modparam("rr", "enable_full_lr", 1)route { if (!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too Many Hops"); break; }; if (msg:len > max_len) { sl_send_reply("513", "Message Overflow"); break; }; if (method!="REGISTER") { record_route(); }; if (loose_route()) { route(1); break; }; if (uri!=myself) { route(1); break; }; if (uri==myself) { if (method=="REGISTER") { route(2); break; }; lookup("aliases"); if (uri!=myself) { route(1); break; }; if (uri=~"^sip:0[0-9]*@*") { rewritehost("195.XXX.122.XXX"); # PSTN Gateway on Public IP
route(1); break; }; if (!lookup("location")) { sl_send_reply("404", "User Not Found"); break; }; route(1); };}route[1] { if (!t_relay()) { sl_reply_error(); };}route[2] { if (!save("location")) { sl_reply_error(); };}In my advanced SER.CFG ;* A Side client use Zoom 4X, port forwarding to ATA in modem setting i register as port:1XXXX (openserctl ul show),* B Side client use Zyxel 660R, port forwarding to ATA in modem setting and register as port:1XXXX (openserctl ul show),* Make a call to other sip client it's okay voice quality is worse then first case most of time, connection never down,* From A Side (Zoom 4X), make a call to PSTN, everything is normal, connection never down,* From B Side (Zyxel 660R), make a call to PSTN, everything is normal, connection never down.ps : If i change both A Side client and B Side client modems not to do port forwarding, problems are totaly same.here is my advanced ser.cfg >>>debug=3
fork=yes
log_stderror=no
listen=212.XXX.104.XXX # OpenSER Server on Public IP
port=5060
children=4
alias=212.XXX.104.XXX # OpenSER Server on Public IP
dns=no
rev_dns=no
fifo="/tmp/openser_fifo"
fifo_db_url="mysql://openser:openserrw@localhost/openser"
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/auth.so"
loadmodule "/usr/local/lib/openser/modules/auth_db.so"
loadmodule "/usr/local/lib/openser/modules/uri.so"
loadmodule "/usr/local/lib/openser/modules/uri_db.so"
loadmodule "/usr/local/lib/openser/modules/mediaproxy.so"
loadmodule "/usr/local/lib/openser/modules/nathelper.so"
loadmodule "/usr/local/lib/openser/modules/textops.so"
loadmodule "/usr/local/lib/openser/modules/domain.so"
loadmodule "/usr/local/lib/openser/modules/acc.so"
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "use_domain", 1)
modparam("domain", "db_mode", 1)
modparam("nathelper", "rtpproxy_disable", 1)
modparam("nathelper", "natping_interval", 180)
modparam("mediaproxy","natping_interval", 30)
modparam("mediaproxy","mediaproxy_socket", "/var/run/mediaproxy.sock")
modparam("mediaproxy","sip_asymmetrics","/usr/local/etc/openser/sip-asymmetric-clients")
modparam("mediaproxy","rtp_asymmetrics","/usr/local/etc/openser/rtp-asymmetric-clients")
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "use_domain", 1)
modparam("registrar", "default_expires", 60)
modparam("registrar", "min_expires", 30)
modparam("registrar", "nat_flag", 6)
modparam("registrar", "use_domain", 1)
modparam("rr", "enable_full_lr", 1)
modparam("acc", "db_url", "mysql://openser:openserrw@localhost/openser")
modparam("acc", "failed_transactions", 1)
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)
modparam("acc", "db_flag", 1)
route {
# -----------------------------------------------------------------
# Sanity Check Section
# -----------------------------------------------------------------
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483", "Too Many Hops");
break;
};
if (msg:len > max_len) {
sl_send_reply("513", "Message Overflow");
break;
};
# -----------------------------------------------------------------
# Record Route Section and Acc section
# -----------------------------------------------------------------
if (method=="INVITE" && client_nat_test("3")) {
record_route_preset("212.XXX.104.XXX:5060;nat=yes");
} else if (method!="REGISTER") {
if!(uri=~"^sip:833[0-9]*@") {
record_route();
setflag(1);
}
};
# -----------------------------------------------------------------
# Call Tear Down Section
# -----------------------------------------------------------------
if (method=="BYE" || method=="CANCEL") {
end_media_session();
};
# -----------------------------------------------------------------
# Loose Route Section
# -----------------------------------------------------------------
if (loose_route()) {
if (has_totag() && (method=="INVITE" || method=="ACK")) {
if (client_nat_test("3") || search("^Route:.*;nat=yes")) {
setflag(6);
use_media_proxy();
};
};
route(1);
break;
};
# -----------------------------------------------------------------
# Call Type Processing Section
# -----------------------------------------------------------------
if (uri!=myself) {
route(1);
break;
};
if (uri==myself) {
if (method=="CANCEL") {
route(3);
break;
} else if (method=="INVITE") {
route(3);
break;
} else if (method=="REGISTER") {
route(2);
break;
};
lookup("aliases");
if (uri!=myself) {
route(1);
break;
};
if (!lookup("location")) {
sl_send_reply("404", "User Not Found");
break;
};
};
route(1);
}
route[1] {
# -----------------------------------------------------------------
# Default Message Handler
# -----------------------------------------------------------------
t_on_reply("1");
if (!t_relay()) {
if (method=="INVITE" || method=="ACK") {
end_media_session();
};
sl_reply_error();
};
}
route[2] {
# -----------------------------------------------------------------
# REGISTER Message Handler
# ----------------------------------------------------------------
if (!search("^Contact:\ +\*") && client_nat_test("7")) {
setflag(6);
fix_nated_register();
force_rport();
};
sl_send_reply("100", "Trying");
if (!www_authorize("","subscriber")) {
www_challenge("","0");
break;
};
if (!check_to()) {
sl_send_reply("401", "Unauthorized");
break;
};
consume_credentials();
if (!save("location")) {
sl_reply_error();
};
}
route[3] {
# -----------------------------------------------------------------
# CANCEL and INVITE Message Handler
# -----------------------------------------------------------------
if (client_nat_test("3")) {
setflag(7);
force_rport();
fix_nated_contact();
};
lookup("aliases");
if (uri!=myself) {
route(1);
break;
};
if (uri=~"^sip:0[0-9]*@*") {
rewritehost("195.XXX.122.XXX"); # PSTN Gateway on Public IP
route(1);
break;
};
if (!lookup("location")) {
sl_send_reply("404", "User Not Found");
break;
};
if (method=="CANCEL") {
route(1);
break;
};
if (!proxy_authorize("","subscriber")) {
proxy_challenge("","0");
break;
} else if (!check_from()) {
sl_send_reply("403", "Use From=ID");
break;
};
consume_credentials();
if (isflagset(6) || isflagset(7)) {
use_media_proxy();
};
route(1);
}
onreply_route[1] {
if ((isflagset(6) || isflagset(7)) && (status=~"(180)|(183)|2[0-9][0-9]")) {
if (!search("^Content-Length:\ +0")) {
use_media_proxy();
};
};
if (client_nat_test("1")) {
fix_nated_contact();
};
}