[OpenSER-Users] Preserving original number when using alias_db_lookup
Bogdan-Andrei Iancu
bogdan at voice-system.ro
Mon Jun 30 10:17:57 CEST 2008
Hi Stagg,
This is a common issue when you have an Asterisk with multiple
extensions and a single registration to OpenSER. A trick you can do is
to save the username part of the RURI (the extension) and restore if the
location lookup (for registrations) was successful:
......
$avp(s:tmp) = $rU;
if ( !lookup("location")) {
# no location found
sl_send_reply("404","Not Found");
exit;
}
# registration found -> restore the username part
$rU = $avp(s:tmp)
t_relay();
......
Note that is is better to use an AVP (or a variable) to store the
username before the lookup, instead of using the $oU (original
username). Original username is the username that openser received from
the net, but you may consider that your script does other RURI
processing (like aliases) before the lookup("location") - so you need
the username value from before the lookup and not the received one.
Regards,
Bogdan
Stagg Shelton wrote:
> I will re-read the lookup function documentation.
>
> The reason why I am having to do this is because in my particular case
> I have many asterisk PBX's registering to OpenSER. When asterisk
> registers to OpenSER it has a contact id in the REGISTER message of s at w.x.y.z
> . After using alias_db_lookup OpenSER is using the contact id in the
> To: field. When the message gets to asterisk, I cannot route it to
> the correct extension, IVR, Queue because the message is being sent to s at w.x.y.z
> instead of 5551212 at w.x.y.z
>
> Thanks
> Stagg
>
> On Jun 29, 2008, at 6:08 PM, Iñaki Baz Castillo wrote:
>
>
>> El Domingo, 29 de Junio de 2008, Stagg Shelton escribió:
>>
>>> Thank you Iñaki. Not only did I find that my syntax made no sense, I
>>> also found that openser would not start because of it.
>>>
>>> I believe that I have found my solution with your help. The below
>>> syntax appears to be working with the results I intended.
>>>
>>> alias_db_lookup("dbaliases");
>>>
>>> if (!lookup("location")) {
>>>
>>> ...
>>>
>>> }
>>> }
>>> else
>>> {
>>> avp_pushto("$ru/username", "$oU");
>>> }
>>>
>>> What the above does for me is that OpenSER can receive an invite from
>>> one of my SIP providers. I can determine if the call is intended for
>>> one of the PBX's that are registered to OpenSER and appropriately
>>> route the call to the PBX that serves the number.
>>>
>> Hi, first this complex syntax is not needed anymore:
>> avp_pushto("$ru/username", "$oU");
>> because you can just do:
>> $rU = $oU;
>>
>>
>> But anyway I can't understand why you do it. In your case, please re-
>> read the
>> doc of "lookup" function. When you do:
>> if (!lookup("location")) {
>> that will change the RURI ****just**** in the case the original RURI
>> is an AoR
>> existing in the "location" table, this is: that user is registered in
>> OpenSer.
>> But in the case it's not registered then the RURI ***won't*** be
>> changed so
>> you don't need, at all, to restore the RURI.
>>
>> Well, imagine an example with your code:
>>
>> - There is an alias:
>> boby at domain.com => 201 at domain.com
>>
>> - 201 at domain.com is not registered in OpenSer.
>>
>> - Your code:
>>
>> => RURI = boby at domain.com
>>
>> alias_db_lookup("dbaliases");
>> => RURI = 201 at domain.com
>>
>> if (!lookup("location")) {
>> => User not registered so RURI still is 201 at domain.com and this
>> block
>> is not executed
>> ....
>> }
>> else {
>> avp_pushto("$ru/username", "$oU");
>> => Now RURI = boby at domain.com
>> }
>>
>>
>> The question is: why do you need RURI being the original? it makes
>> no sense
>> (IMHO).
>>
>>
>> Regards.
>>
>>
>> --
>> Iñaki Baz Castillo
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.openser.org
>> http://lists.openser.org/cgi-bin/mailman/listinfo/users
>>
>
>
> _______________________________________________
> Users mailing list
> Users at lists.openser.org
> http://lists.openser.org/cgi-bin/mailman/listinfo/users
>
>
More information about the Users
mailing list