Jiri,
Thanks.
I made these changes (and the loadmodule domain.so) and
the server fires up fine. However, when I send a REGISTER
now I get a message:
#
U 2003/11/24 22:16:09.124528 66.228.44.254:5060 -> 66.228.53.216:5060
SIP/2.0 500 I'm terribly sorry, server error occured (2/TM).
Via: SIP/2.0/UDP 66.228.53.216:5060.
From: <sip:123456@named.com>.
To: <sip:123456@named.com>;tag=a6a1c5f60faecf035a1ae5b6e96e979a-8311.
Call-ID: D54D4F19DB874E9DA7D3354FFF6A0F68(a)named.com.
CSeq: 17301 REGISTER.
Server: Sip EXpress router (0.8.12 (i386/linux)).
Content-Length: 0.
Warning: 392 66.228.44.254:5060 "Noisy feedback tells: pid=5601
req_src_ip=66.228.44.254 req_src_port=5060
in_uri=sip:named.com
out_uri=sip:named.com via_cnt==166".
Also, in the syslog file:
Nov 24 22:16:27 sipproxy ser[5599]: ERROR: build_req_buf_from_sip_req:
out of memory
Nov 24 22:16:27 sipproxy ser[5599]: ERROR: print_uac_request: no pkg_mem
Nov 24 22:16:27 sipproxy ser[5599]: ERROR: t_forward_nonack: failure to
add branches
I remember reading a thread about this error.
Something about shared memory?
I've got a linux 9.x system, here is the config:
---greg
---
#
# $Id: ser.cfg,v 1.23 2003/10/13 22:51:55 jiri Exp $
#
# simple quick-start config script
#
# ----------- 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"
alias="named.com"
alias="66.228.44.254"
# ------------------ 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/acc.so"
loadmodule "/usr/local/lib/ser/modules/domain.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/postgres.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/group.so"
loadmodule "/usr/local/lib/ser/modules/uri.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/exec.so"
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/xlog.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
modparam("domain", "db_mode", 1)
modparam("domain", "domain_table", "domain")
modparam("domain", "domain_col", "did")
modparam("domain","db_url",
"X")
modparam("usrloc|group", "use_domain", 1)
modparam("usrloc","db_mode",1)
modparam("usrloc|group|auth_db","user_column","user_id")
modparam("usrloc|uri|group|auth_db","db_url",
"X")
modparam("uri","subscriber_user_column","user_id")
#modparam("uri","db_url",
# "X")
#modparam("group","user_column","user_id")
#modparam("group","db_url",
# "X")
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1 )
modparam("acc", "log_fmt", "miocfsu" )
#modparam("auth_db","user_column","user_id")
#modparam("auth_db","db_url",
# "X")
# -- rr params --
# add value to ;lr param to make some broken UAs happy
#modparam("rr", "enable_full_lr", 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;
};
# 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");
xlog("L_WARN", "LOOSE: %Ts call-id:%ci cseq:%ci
contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt method:%rm ruri:%ru
messageid:%mi\n");
setflag(1);
setflag(2);
route(1);
break;
};
# if (!uri==myself) {
if(!is_from_local()) {
# 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") {
if (!www_authorize("named.com",
"subscriber")) {
www_challenge("", "0");
break;
};
save("location");
break;
};
lookup("aliases");
if (!uri==myself) {
append_hf("P-hint: outbound alias\r\n");
route(1);
break;
};
if (method=="INVITE" || method=="ACK") {
if (!www_authorize("named.com",
"subscriber")) {
www_challenge("", "0");
break;
};
xlog("L_WARN", "INVITE: %Ts call-id:%ci
cseq:%ci contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt method:%rm
ruri:%ru messageid:%mi\n");
#
if (lookup("location")) {
route(1);
break;
};
if(uri=~"sip:[0-9]{10}@.*")
{
xlog("L_WARN", "10DIGIT: %Ts
call-id:%ci cseq:%ci contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt
method:%rm ruri:%ru messageid:%mi\n");
route(2);
break;
}
xlog("L_WARN", "UNKNOWN: %Ts call-id:%ci
cseq:%ci contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt method:%rm
ruri:%ru messageid:%mi\n");
sl_send_reply("580", "Sorry");
break;
};
if (method=="CANCEL") {
xlog("L_WARN", "CANCEL: %Ts call-id:%ci
cseq:%ci contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt method:%rm
ruri:%ru messageid:%mi\n");
route(2);
break;
};
sl_send_reply("404", "Not Found");
break;
};
xlog("L_WARN", "FAILATBOTTOM: %Ts call-id:%ci cseq:%ci
contact:%ct from:%fu fromtag:%ft to:%tu totag:%tt method:%rm ruri:%ru
messageid:%mi\n");
break;
}
route[1]
{
# send it out now; use stateful forwarding as it works reliably
# even for UDP2TCP
if (!t_relay()) {
sl_reply_error();
};
}
route[2]
{
consume_credentials();
rewritehostport("65.77.154.243:5060");
if(!t_relay()) {
sl_reply_error();
break;
};
}
[root@sipproxy ser]#
Jiri Kuthan wrote:
At 12:16 AM 11/24/2003, Greg Fausak wrote:
Jiri,
I do want to have a multi-domain capability.
fragments:
# -- multi-domain
modparam("domain", "db_mode", 1)
modparam("usrloc|group", "use_domain", 1)
...
if (!is_from_local()) { # check against domain-module table
.... /* outbound */
break;
};
# our domains ...
if (!www_authorize("", "subscriber")) {
# challenge if none or invalid credentials
www_challenge("", "0");
break;
};
That's pretty much it, I guess. The list of served domains can be
manipulated using serctl.
I'd also like to be able to run multiple
processes
on the same database. These may be different problems.
Why? (I mean it sounds like a ticket for problems to me.)
-jiri