Hello,
after implementing very basic pstn-routing ive tried to get accounting to a mysql database working. Unluckily with no success yet.
Ive read the acc/README, several example configs and all i could find on the mailing list archive but i still cant get it to work.
According to the docs i configure the acc module after loading like this:
--- # # Accounting Setup # modparam("acc", "db_url", "mysql://yyy:yyyy@localhost:3306/ser") modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1) modparam("acc", "failed_transactions", 1) modparam("acc", "log_fmt", "miocfst") ---
Then i added "setflag(1);" at various location within my simple ser-script. First i added it just b4 the "t_relay()" then i tried various other locations until i finaly added:
--- setflag(1); setflag(2); ---
at the very start of the script.
All which happens is that the ser-router writes some errors into the syslog:
--- Jan 10 12:56:18 gk /usr/local/sbin/ser[13285]: BUG:tm:register_tmcb: no transact ion found Jan 10 12:56:18 gk /usr/local/sbin/ser[13285]: ERROR:acc:acc_onreq: cannot regis ter additional callbacks ---
and
--- Jan 10 11:51:12 gk /usr/local/sbin/ser[12694]: ERROR:acc:acc_onreq: cannot regis ter additional callbacks Jan 10 11:51:12 gk /usr/local/sbin/ser[12693]: ERROR: extract_body: message body has lenght zero Jan 10 11:51:12 gk /usr/local/sbin/ser[12693]: ERROR: force_rtp_proxy: can't ext ract body from the message Jan 10 11:51:12 gk /usr/local/sbin/ser[12693]: ERROR: on_reply processing failed ---
I am using version: --- version: ser 0.8.13-dev-23-merged (i386/linux) flags: STATS:Off, USE_IPV6, USE_TCP, DISABLE_NAGLE, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC, FAST_LOCK-ADAPTIVE_WAIT ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, MAX_URI_SIZE 1024, BUF_SIZE 65535 @(#) $Id: main.c,v 1.174 2003/11/26 23:43:59 andrei Exp $ main.c compiled on 21:37:37 Dec 27 2003 with gcc 2.95 ---
Below you find the complete ser.cfg. Its basicly a slightly hacked version of the standard nathelper example script.
best regards,
Arnd --------------- 8< ----------- 8< ------------------ 8< ------------
debug=1 # i had this at "3" initially" 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"
# # Aliases # alias="xxxx.net"
# ------------------ 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"
# We want to earn money, therefore we need accounting loadmodule "/usr/local/lib/ser/modules/acc.so"
# !! Nathelper loadmodule "/usr/local/lib/ser/modules/nathelper.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params -- modparam("usrloc", "db_mode", 2) modparam("usrloc", "db_url", "mysql://x:y@localhost:3306/ser")
# # Accounting Setup # modparam("acc", "db_url", "mysql://x:y@localhost:3306/ser") modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1)
# Account failed transactions modparam("acc", "failed_transactions", 1)
# Which data should be accounted? # # c = Call-Id # d = To tag (Dst) # f = From # i = Inbound Request-URI # m = Method # o = Outbound Request-URI # r = fRom # s = Status # t = To # u = digest Username # p = username Part of inbound Request-URI # # default is "miocfs" # modparam("acc", "log_fmt", "miocfst")
# -- 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", "db_url", "mysql://x:y@localhost:3306/ser") 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{
# Accounting TEST # How does this work anyway? And why 1+2? setflag(1); setflag(2);
# 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") {
# SQL Digest Auth if (!www_authorize("", "subscriber")) { www_challenge("", "0"); break; };
save("location"); break; };
lookup("aliases"); if (!uri==myself) { append_hf("P-hint: outbound alias\r\n"); route(1); break; };
# Destination PSTN or H323? if( uri=~"^sip:9[0-9]*@mynet.net" || uri=~"^sip:8[0-9]*@mynet.net" ) { 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");
# Route to PSTN Gateways(s) if (uri=~"^sip:9[0-9]*@mynet.net") { ## This assumes that the caller is log("Forwarding to PSTN\n"); ## registered in our realm t_relay_to_udp( "PSTN-GW", "5060" ); break; };
# Route to SIP<>H323 Proxy if (uri=~"^sip:8[0-9]*@mynet.net") { ## This assumes that the caller is log("Forwarding to SIP<>H323 Proxy\n"); ## registered in our realm t_relay_to_udp( "SIPH323-GW", "22400" ); break; };
# Local Domain User # 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(); }; }
At 11:04 PM 1/10/2004, Arnd Vehling wrote:
Hello,
after implementing very basic pstn-routing ive tried to get accounting to a mysql database working. Unluckily with no success yet.
Ive read the acc/README, several example configs and all i could find on the mailing list archive but i still cant get it to work.
According to the docs i configure the acc module after loading like this:
# # Accounting Setup # modparam("acc", "db_url", "mysql://yyy:yyyy@localhost:3306/ser") modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1)
I think reading READMEs will get you a quicker reponse than serusers. Anyhow, here it is: use "db_flag" as opposed to "log_flag".
modparam("acc", "failed_transactions", 1) modparam("acc", "log_fmt", "miocfst")
Then i added "setflag(1);" at various location within my simple ser-script. First i added it just b4 the "t_relay()" then i tried various other locations until i finaly added:
setflag(1); setflag(2);
at the very start of the script.
All which happens is that the ser-router writes some errors into the syslog:
Jan 10 12:56:18 gk /usr/local/sbin/ser[13285]: BUG:tm:register_tmcb: no transact ion found Jan 10 12:56:18 gk /usr/local/sbin/ser[13285]: ERROR:acc:acc_onreq: cannot regis ter additional callbacks
and
Jan 10 11:51:12 gk /usr/local/sbin/ser[12694]: ERROR:acc:acc_onreq: cannot regis ter additional callbacks
I suppose this is related to your use of development version of SER. I guess you don't really want to do so and use better a stable version. You find info about versions at www.iptel.org/ser/cvs/
-jiri
Hi,
Jiri Kuthan wrote:
According to the docs i configure the acc module after loading like this:
# # Accounting Setup # modparam("acc", "db_url", "mysql://yyy:yyyy@localhost:3306/ser") modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1)
I think reading READMEs will get you a quicker reponse than serusers. Anyhow, here it is: use "db_flag" as opposed to "log_flag".
Did overlook it. All examples ive seen so far are relating to "log_flag". Shouldnt that config at least log it into syslog?
I suppose this is related to your use of development version of SER.
Yes, its "0.8.13-dev-23-merged" which is the only SER version working with some NAT test setup we have here and Cisco ATA 186 and Grandstream Fones.
Is there no way to get this version working halfway reliably with
- mysql database OR radius accounting - sems (voicemail) - Webinterface?
I guess you don't really want to do so and use better a stable version. You find info about versions at www.iptel.org/ser/cvs/
I would like to use stable but the nathelper of the stable branch doesnt really seem to work. Any suggestions?
best regards,
Arnd
At 01:14 AM 1/11/2004, Arnd Vehling wrote:
Hi,
Jiri Kuthan wrote:
According to the docs i configure the acc module after loading like this:
# # Accounting Setup # modparam("acc", "db_url", "mysql://yyy:yyyy@localhost:3306/ser") modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1)
I think reading READMEs will get you a quicker reponse than serusers. Anyhow, here it is: use "db_flag" as opposed to "log_flag".
Did overlook it. All examples ive seen so far are relating to "log_flag". Shouldnt that config at least log it into syslog?
yes. log_flag causes flagged requests to be reported to syslog.
I suppose this is related to your use of development version of SER.
Yes, its "0.8.13-dev-23-merged" which is the only SER version working with some NAT test setup we have here and Cisco ATA 186 and Grandstream Fones.
I think the stable version as on CVS does the same job without potential instabilities caused by working status of the development version.
Is there no way to get this version working halfway reliably with
- mysql database OR radius accounting
- sems (voicemail)
- Webinterface?
I guess you don't really want to do so and use better a stable version. You find info about versions at www.iptel.org/ser/cvs/
I would like to use stable but the nathelper of the stable branch doesnt really seem to work.
What do you mean by "doesnt really seem to work"?
-jiri
Hi,
Jiri Kuthan wrote:
Arnd Vehling wrote:
I would like to use stable but the nathelper of the stable branch doesnt really seem to work.
What do you mean by "doesnt really seem to work"?
We have an (unusual) Setup like:
UAC-1 - | - freebsd-nat - SER UAC-2 -
UAC 1 +2 are on the same private lan connected through a freebsd-nat box to the internet to the SER Box.
Calls from UAC-1 to UAC-2 and vice versa didnt work with the stable branch but they work like a charm with the unstable branch (and nathelper off course).
If you say that a setup like
UAC1 - natbox - SER - natbox - UAC2
sould work if the natbox is capable off it, we will continue to test the last stable release.
btw.: Do you have any timeline for completing the current unstable?
best regards,
Arnd
At 06:29 PM 1/11/2004, Arnd Vehling wrote:
Hi,
Jiri Kuthan wrote:
Arnd Vehling wrote:
I would like to use stable but the nathelper of the stable branch doesnt really seem to work.
What do you mean by "doesnt really seem to work"?
We have an (unusual) Setup like:
UAC-1 - | - freebsd-nat - SER UAC-2 -
UAC 1 +2 are on the same private lan connected through a freebsd-nat box to the internet to the SER Box.
Calls from UAC-1 to UAC-2 and vice versa didnt work with the stable branch but they work like a charm with the unstable branch (and nathelper off course).
If you say that a setup like
UAC1 - natbox - SER - natbox - UAC2
sould work if the natbox is capable off it, we will continue to test the last stable release.
I think so. all nat features have been backported to stable.
btw.: Do you have any timeline for completing the current unstable?
no.
best regards,
-jiri
Hello,
Jiri Kuthan wrote:
If you say that a setup like
UAC1 - natbox - SER - natbox - UAC2
sould work if the natbox is capable off it, we will continue to test the last stable release.
I think so. all nat features have been backported to stable.
Woot! Does this mean i should be able to get the stable version running with the same nathelper setup i use for the cvs/unstable?
And while were at it: Great software you wrote!
best regards,
Arnd
At 08:36 PM 1/11/2004, Arnd Vehling wrote:
Hello,
Jiri Kuthan wrote:
If you say that a setup like
UAC1 - natbox - SER - natbox - UAC2
sould work if the natbox is capable off it, we will continue to test the last stable release.
I think so. all nat features have been backported to stable.
Woot! Does this mean i should be able to get the stable version running with the same nathelper setup i use for the cvs/unstable?
unless you are refering to the latest Wednesday changes, yes.
And while were at it: Great software you wrote!
thank you,
-jiri
Hello,
Jiri Kuthan wrote:
unless you are refering to the latest Wednesday changes, yes.
Could you please point me to the CVS version i should download?
And while were at it: Great software you wrote!
thank you,
Compared to "Vocal", which is the only other sip/voip system ive tested its much better IMO. The module concept is cool and i regulary discover features i missed in Vocal. Like being able to view subscribed users on the command-line and manipulate userdata via "serctl".
Only the learning curve is much longer than "vocals", but thats the way it is with complex and flexible software.
best regards,
Arnd
Arnd Vehling wrote:
Hello,
Jiri Kuthan wrote:
If you say that a setup like
UAC1 - natbox - SER - natbox - UAC2
sould work if the natbox is capable off it, we will continue to test the last stable release.
I think so. all nat features have been backported to stable.
Woot! Does this mean i should be able to get the stable version running with the same nathelper setup i use for the cvs/unstable?
And while were at it: Great software you wrote!
Not quite, lately there were several enhancements in nathelper/rtpproxy, which only available in the unstable version. It shouldn't be very hard to backport them into stable one, but unfortunately I do not have a spare time to do it right now.
-Maxim
Is it possible to get the CVS/Non-Stable version of the nathelper module working with the stable version?
best regards,
Arnd