Hello,

hmm, can you print the xavps just after you added them before save(location)? Trying to spot where the issue is, in storing inside usrloc or outside in the xavp framework. There should be some function to dump all xavps, iirc.

Cheers,
Daniel

On 02/07/15 23:09, Luca Mularoni wrote:
Hi Daniel,
yes, when I use db_mode 2 [1 not tested], after 'timer_interval' seconds (30s in my case),
data are passed to location_attrs table (through insert query for first registration and then delete/insert for refresh)
but just first and last attribute are passed (i.e. in db table I can find just first and last attribure for each ruid).

Regards

Luca

Il 02/07/2015 18:12, Daniel-Constantin Mierla ha scritto:
Hello,

when you use db_mode 1 or 2, do you see the values in location_attrs
database table?

Cheers,
Daniel

On 02/07/15 12:45, Luca Mularoni wrote:
Hi All,
I'm using kamailio 4.2.5 (compiled from source and aligned up to
commit [00a36ae07c587992d6486277ce2e9ae6c009685f]).
In order to enrich users data collected during registering phase, I
would like to store them in USRLOC Additional Attributes
through the use of 'xavp_contact' structure, but I'm having problems
storing them.
Below relevant chunks of config:

...
# ----- usrloc params -----
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "use_domain", 0)
modparam("usrloc", "xavp_contact", "ulvals")
...

route[REGISTRAR] {
    ...
    # Just an example
    $xavp(ulvals=>A) = "A";
    $xavp(ulvals[0]=>B) = "B";
    $xavp(ulvals[0]=>C) = "C";
    $xavp(ulvals[0]=>D) = "D";
    ...
    if (!save("location"))
        sl_reply_error();
    exit;
}

route[LOCATION] {
    ...
    if(!lookup("location") {
        # Handle Failure
        ...
    }
    # Print USRLOC Additional Attributes
    # Just an Example
    $var(i) = 0;
    $var(N) = $branch(count);
    while($var(i)<=$var(N)) {
        xlog("LOC - [$var(i)] - A [$xavp(ulvals[$var(i)]=>A)]\n");
        xlog("LOC - [$var(i)] - B [$xavp(ulvals[$var(i)]=>B)]\n");
        xlog("LOC - [$var(i)] - C [$xavp(ulvals[$var(i)]=>C)]\n");
        xlog("LOC - [$var(i)] - D [$xavp(ulvals[$var(i)]=>D)]\n");
        $var(i) = $var(i) + 1;
    }
    ...
}

And this is the relevant chunk of syslog when a local subscriber is
found in 'location' table:
...
LOC - [0] - A [A]
LOC - [0] - B [<null>]
LOC - [0] - C [<null>]
LOC - [0] - D [D]
...

Summing up, it seems that when xavp structure is stored in memory,
just first and last elementsare inserted.
In real config I'm using more than 4 attributes and behaviour is the
same: just first and last are stored.
I've tried also with modparam("usrloc", "db_mode", 0) but the problem
remains.

Where I'm wrong in using this structure? Or it could be a bug?

Thank You in advance for your help

Luca Mularoni


_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users


-- 
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Book: SIP Routing With Kamailio - http://www.asipto.com