[Serusers] lookup_contacts() error after sd_lookup() from the speeddial module- latest cvs ottendorf

Michal Matyska michal at iptel.org
Fri Feb 23 11:38:58 CET 2007


On Fri, 2007-02-23 at 01:39 +0100, TZieleniewski wrote:
> Hi Michal
> 
> 
> Michal Matyska napisał(a): 
> > Hi,
> > 
> > so I've finally found some time and checked the code and from that point
> > of view:
> > 
> > sd_lookup rewrites request-uri, so basically you should call t_relay if
> > it was successful. (as the target of the speeddial might be different
> > domain you should relay it).
> >   
> I did like you wrote and called t_relay() after positive result of the
> sd_lookup() unfortunatelly the result was
> the same as in the previously tried scenarios when I tried to forward
> the sip message again to ser. The URI as you said was rewritten and 
> again received and processed through the logic, but the invocation of

OK, so sd_lookup solved. 

>  the lookup_user("$t.uid","@ruri") in the 'second round' didn't cause
> the 'second round' lookup_contacts() to return the positive result. 
> > 
> > lookup_contacts searches in the TO / USER avp list only for avp with uid
> > name. If such avp is not found the TO header uri is parsed and user uid
> > looked in the db and new avp stored. (This is correct for REGISTER (but
> > you won't use lookup_contacts within register :), for other request
> > methods it should use the request-uri).
> > 
> > Which makes me crazy related to your observations, it is supposed to be
> > working this way (but you reported it as failing):
> > ...
> > lookup_user("$tu.uid", "@ruri");
> > if (lookup_contacts("location")) {
> > 	t_relay();
> > 	drop;
> > }
> >   
> lookup_contacts() works but only in the 'first round' with the
> lookup_user("$t.uid","@ruri").

It works by accident, if you don't set user/to avp uid, then the TO
header is used for the AOR building (I've already created SER-234 bug
report). So in the first loop, the To and request uri are the same and
the user is found correctly. The second round (e.g. due to sd_lookup) is
not working, as the To header is the original one.


> I tried to invoke lookup_user("$tu.uid","@ruri") after the positive
> invocation of lookup_user("$t.uid","@ruri") to have the uid in the
> to / user track but
> even with the uid avp present the result  of the second
> lookup_contacts() was negative (user was registered and available -
> direct call worked without any problems). 

That's strange as we use it everywhere and it works.... Check uid of the
registered contact (location table) against the uid found by lookup_user
before the lookup_contacts call (dump_attrs).

Michal




More information about the sr-users mailing list