[Serusers] multiple SER instances / REGISTRATION problem

Greg Fausak greg at addaline.com
Sat Jan 17 23:09:14 CET 2004


Yes, I think the problem persists.
I was able to get around it by not doing domain support in
registration.  I just start a separate SER process for
each domain.

It has something to do with multiple domain registration.

---greg


Jiri Kuthan wrote:

> Greg,
> 
> I'm digging though serusers archives and found your report. I suppose it 
> must have been a private memory leak and I don't remember that we closed
> on that. Does the problem persist? 
> 
> -jiri
> 
> At 05:22 AM 11/25/2003, Greg Fausak wrote:
> 
>>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 
>>
> 
> --
> Jiri Kuthan            http://iptel.org/~jiri/ 
> 
> 
> .
> 





More information about the sr-users mailing list