[Serusers] multiple SER instances / REGISTRATION problem

Greg Fausak lgfausak at august.net
Tue Nov 25 05:22:18 CET 2003


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 at named.com>.
To: <sip:123456 at named.com>;tag=a6a1c5f60faecf035a1ae5b6e96e979a-8311.
Call-ID: D54D4F19DB874E9DA7D3354FFF6A0F68 at 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 at 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 
> 
> 





More information about the sr-users mailing list