I have a 1.5.3 installation functioning as a registrar that is
exhibiting a very curious, if only infrequent set of behaviours.
The host is CentOS 5.x, with PostgreSQL 9.0 backing usrloc, and
db_mode = 1 (immediate write-through).
I have a registration handler in my initial request route that begins
with a log message:
...
else if(is_method("REGISTER")) {
xlog("L_INFO", "... Processing REGISTER from $si:$sp for
AOR $tu\n");
route(2);
exit;
}
I've got a registrant who consistently re-registers with an expiration
time of 120, so in theory they ought to be re-registering every two
minutes or so. Most of the time they do. But, occasionally, I'll see
a gap of 5-8 minutes go by, in which the above log message does not
appear, and their registration expires so that they can't receive calls.
That's not what's interesting. What's interesting is that I did a
packet capture on the proxy and caught one of these scenarios. Within
that ~8 minute window when the registration expired and calls were
failing, the UAC actually re-registered several times, on normal ~2
minute boundaries, AND the proxy successfully challenged the request
and sent a 200 OK indicating that the binding was stored!
I double-checked all the parameters to ensure that the 401s and 200
OKs corresponded to the right REGISTER flow, etc. - yes, it's all correct.
Is there any imaginable set of circumstances or a known bug that would
cause Kamailio to successfully authenticate and affirm a registration
request, while neither logging its receipt, nor, evidently, storing it
to the database? I can envision a number of database failure modes
that would account for the binding not actually being in the
'location' table, but that doesn't explain why the request wouldn't
even be logged. That's what has me baffled.
Thanks!
-- Alex
--
Alex Balashov - Principal
Evariste Systems LLC
260 Peachtree Street NW
Suite 2200
Atlanta, GA 30303
Tel: +1-678-954-0670
Fax: +1-404-961-1892
Web:
http://www.evaristesys.com/