<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
All,
<p>&nbsp;&nbsp;&nbsp; I've been playing with jabber module and having problems
someone had&nbsp; mentioned here earlier: first, the number of ser processes
increases constantly . This is due to the fact that XJAB threads seem to
be dying (or so waitpid() code thinks in jabber.c), and keeps spawning
more threads. The proble is that ser threads are still around when that
happens, contributing to a number of processes.
<p>&nbsp;&nbsp;&nbsp; Second, and most troubling, is that jabber module
doesn't even try to connect to jabber server (conformed by running ngrep
and tcpdump on a jabber box, which runs on a separate box). This may or
may not be due to the error described above (any chance that jabber threads
that are supposed to connect are not around anymore?). I even tried disabling
TCP and recompiling (commented -DUSE_TCP in Makefile.def)
<p>&nbsp;&nbsp;&nbsp; The rest of ser functionality is fine. I can log
in tp the server easily, mysql gets updated acorrdingly, etc.
<p>&nbsp;&nbsp;&nbsp; The setup: ser-0.8.11pre29 on Linux 2.4.9 (host name
piias12), compiled with gcc 3.2.2. Jabber runs on a server "sait661".
<p>&nbsp;&nbsp;&nbsp; The jusers looks like this:
<p><tt>mysql>&nbsp; select * from jusers;</tt>
<br><tt>+------+--------+------------+----------------------+------+</tt>
<br><tt>| juid | jab_id | jab_passwd | sip_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
| type |</tt>
<br><tt>+------+--------+------------+----------------------+------+</tt>
<br><tt>|&nbsp;&nbsp;&nbsp; 1 | igorb&nbsp; | ***&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
| igorb@piias12.ms.com |&nbsp;&nbsp;&nbsp; 0 |</tt>
<br><tt>+------+--------+------------+----------------------+------+</tt>
<br><tt>1 row in set (0.00 sec)</tt>
<br><tt></tt>&nbsp;<tt></tt>
<p>=================== ser.conf: (Experimental; just to illustrate Jabber
login) ======================================================
<br>#
<br># $Id: ser.cfg,v 1.20 2003/05/31 21:12:19 jiri Exp $
<br>#
<br># simple quick-start config script
<br>#
<p># ----------- global configuration parameters ------------------------
<br>&nbsp;
<p>debug=3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # debug level
(cmd line: -dddddddddd)
<br>fork=yes
<br>log_stderror=no # (cmd line: -E)
<p># Uncomment these lines to enter debugging mode
<br>/*
<br>debug=7
<br>fork=no
<br>log_stderror=yes
<br>*/
<p>check_via=no&nbsp;&nbsp;&nbsp; # (cmd. line: -v)
<br>dns=no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# (cmd. line: -r)
<br>rev_dns=no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # (cmd. line: -R)
<br>port=5060
<br>children=4
<br>fifo="/tmp/ser_fifo"
<p># ------------------ module loading ----------------------------------
<p># Uncomment this if you want to use SQL database
<br>loadmodule "/var/ser/lib/ser/modules/mysql.so"
<p>loadmodule "/var/ser/lib/ser/modules/sl.so"
<br>loadmodule "/var/ser/lib/ser/modules/tm.so"
<br>loadmodule "/var/ser/lib/ser/modules/rr.so"
<br>loadmodule "/var/ser/lib/ser/modules/maxfwd.so"
<br>loadmodule "/var/ser/lib/ser/modules/usrloc.so"
<br>loadmodule "/var/ser/lib/ser/modules/registrar.so"
<p># Uncomment this if you want digest authentication
<br># mysql.so must be loaded !
<br>loadmodule "/var/ser/lib/ser/modules/auth.so"
<br>loadmodule "/var/ser/lib/ser/modules/auth_db.so"
<p>######## JABBER &lt;-> SIMPLE
<br>loadmodule "/var/ser/lib/ser/modules/print.so"
<br>loadmodule "/var/ser/lib/ser/modules/textops.so"
<br>loadmodule "/var/ser/lib/ser/modules/jabber.so"
<br>loadmodule "/var/ser/lib/ser/modules/pa.so"
<p>modparam("jabber","db_url","sql://ser:heslo@127.0.0.1/sip_jab")
<br>modparam("jabber","jaddress","sait661.ms.com")
<br>modparam("jabber","jport",5222)
<br>modparam("jabber","workers",2)
<br>modparam("jabber","max_jobs",2)
<br>modparam("jabber","aliases","1;yahoo.sait661;")
<br>modparam("jabber","jdomain","sait661")
<br>modparam("jabber","delay_time",5)
<br>modparam("jabber","cache_time",200)
<br>modparam("jabber","sleep_time",60)
<br>modparam("jabber","check_time",60)
<br>################
<br># ----------------- setting module-specific parameters ---------------
<p># -- usrloc params --
<p># modparam("usrloc", "db_mode",&nbsp;&nbsp; 0)
<p># Uncomment this if you want to use SQL database
<br># for persistent storage and comment the previous line
<br>modparam("usrloc", "db_mode", 2)
<p># -- auth params --
<br># Uncomment if you are using auth module
<br>#
<br>modparam("auth_db", "calculate_ha1", yes)
<br>#
<br># If you set "calculate_ha1" parameter to yes (which true in this config),
<br># uncomment also the following parameter)
<br>#
<br>modparam("auth_db", "password_column", "password")
<p># -------------------------&nbsp; request routing logic -------------------
<br>alias="ms.com"
<br>alias="piias12.ms.com"
<p># main routing logic
<p>route{
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # initial sanity checks --
messages with
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # max_forwards==0, or excessively
long requests
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!mf_process_maxfwd_header("10"))
{
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply("483","Too Many Hops");
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
break;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (len_gt( max_len )) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply("513", "Message too big");
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
break;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # we record-route all messages
-- to make sure that
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # subsequent messages will
go through our proxy; that's
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # particularly good if upstream
and downstream entities
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # use different transport
protocol
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; record_route();
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # loose-route processing
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (loose_route()) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
t_relay();
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
break;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # if the request is for other
domain use UsrLoc
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # (in case, it does not
work, use the following command
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # with proper names and
addresses in it)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (uri==myself) {
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (method=="REGISTER") {
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!www_authorize("piias12.ms.com", "subscriber")) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
www_challenge("piias12.ms.com", "0");
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
break;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
};
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
save("location");
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
log (1, "Are we registering?");
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if(search("egistration")) {
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
log (1, "XJAB: Going ONline in Jabber network!!!\n");
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (jab_go_online()) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply("200", "Accepted");
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
else {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply("404","Not found");
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
};
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
};
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
break;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
};
<br>&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
# native SIP destinations are handled using our USRLOC DB
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (!lookup("location")) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_send_reply("404", "Not Found");
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
break;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
};
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # forward to current uri
now; use stateful forwarding; that
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # works reliably even if
we forward from TCP to UDP
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!t_relay()) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
sl_reply_error();
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };
<p>}
<p>========== Relevant portions of daemon.log ===============================================================
<br>Jul&nbsp; 9 15:20:11 piias12 ./ser[23832]: XJAB:xjab_check_workers:
worker[0][pid=23965] has exited - status=0 err=-1 errno=10
<br>Jul&nbsp; 9 15:20:11 piias12 ./ser[23832]: XJAB:xjab_check_workers:
worker[1][pid=23966] has exited - status=0 err=-1 errno=10
<br>Jul&nbsp; 9 15:20:11 piias12 ./ser[23851]: XJAB:xjab_check_workers:
worker[0][pid=23975] has exited - status=0 err=-1 errno=10
<br>Jul&nbsp; 9 15:20:11 piias12 ./ser[23851]: XJAB:xjab_check_workers:
worker[1][pid=23976] has exited - status=0 err=-1 errno=10
<br>Jul&nbsp; 9 15:20:51 piias12 ./ser[23829]: Are we registering?
<br>Jul&nbsp; 9 15:20:51 piias12 ./ser[23829]: XJAB: Going ONline in Jabber
network!!!
<br>Jul&nbsp; 9 15:21:11 piias12 ./ser[23832]: XJAB:xjab_check_workers:
worker[0][pid=23977] has exited - status=0 err=-1 errno=10
<br>&nbsp;
<br>&nbsp;
<br>&nbsp;
<pre>--&nbsp;
NOTICE: If received in error, please destroy and notify sender.&nbsp; Sender does not waive confidentiality or privilege, and use is prohibited.</pre>
&nbsp;</html>