[OpenSER-Users] Usrloc db_mode = 3 (DB_ONLY)

Graham Markall graham.markall at aits.co.uk
Mon Jun 25 18:01:44 CEST 2007


Hi,

I am just getting started with openser (using openser-1.2.1) and have
run across a problem I cannot seem to solve. When using db_mode=2 for
the usrloc module, everything works fine. However, when db_mode is set
to 3, calls are not able to be made - it seems that lookup("location")
always fails. I see this in the log:


Jun 25 16:35:17 cobalt1 /usr/local/sbin/openser[10084]:
check_response(): Authorization is OK
Jun 25 16:35:17 cobalt1 /usr/local/sbin/openser[10084]:
check_username(): Digest username and URI username match
Jun 25 16:35:17 cobalt1 /usr/local/sbin/openser[10084]:
DEBUG:usrloc:db_load_urecord: aor not found in DB
Jun 25 16:35:17 cobalt1 /usr/local/sbin/openser[10084]: lookup(): '1002'
Not found in usrloc

Having checked the mysql query log, the query that was run is:

130 Query       select
contact,expires,q,callid,cseq,flags,cflags,user_agent,received,path,sock
et,methods,
last_modified from location where username='1001'order by q

If I run this query myself at the mysql command prompt, I get exactly
one row returned:

+-----------------------------------------------------+-----------------
----+-------+-------------------------------+-------+-------+--------+--
----------------------------+----------+------+---------------------+---
------+---------------------+
| contact                                             | expires
| q     | callid                        | cseq  | flags | cflags |
user_agent                   | received | path | socket              |
methods | last_modified       |
+-----------------------------------------------------+-----------------
----+-------+-------------------------------+-------+-------+--------+--
----------------------------+----------+------+---------------------+---
------+---------------------+
| sip:1001 at 192.168.0.25:5062;transport=udp;user=phone | 2007-06-25
17:34:59 | -1.00 | bd348eeee82e4349 at 192.168.0.25 | 20092 |     0 |
0 | Grandstream GXP2000 1.1.2.27 | NULL     | NULL | udp:172.16.1.1:5060
|    8063 | 2007-06-25 16:34:59 |
+-----------------------------------------------------+-----------------
----+-------+-------------------------------+-------+-------+--------+--
----------------------------+----------+------+---------------------+---
------+---------------------+
1 row in set (0.00 sec)

Having followed through the code, in modules/usrloc/udomain.c (about
line 550), things seem to be going wrong for me in this bit of code:

        if (ul_dbf.query(_c, keys, 0, vals, columns, (use_domain)?2:1,
13, order,
                                &res) < 0) {
                LOG(L_ERR, "ERROR:usrloc:db_load_urecord: db_query
failed\n");
                return 0;
        }

        if (RES_ROW_N(res) == 0) {
                DBG("DEBUG:usrloc:db_load_urecord: aor not found in
DB\n");
                ul_dbf.free_result(_c, res);
                return 0;
        }

I tried to find out why this is happening by attaching with gdb, but
when I try to view res or res->n, I get a message that variable res is
currently unavailable - I'm not sure if this is something to do with the
way I'm using gdb though. When I step through, RES_ROW_N(res) == 0 must
be true as it enters the code within the {} instead of skipping over it.

Could anyone point me in the right direction as to why this doesn't work
please?

Many thanks,

Graham Markall




More information about the sr-users mailing list