[SR-Users] Variable $fu Kamailio 3.2
Daniel-Constantin Mierla
miconda at gmail.com
Tue Apr 10 23:07:19 CEST 2012
Hello,
On 4/10/12 10:52 PM, Gilbert T. Gutierrez, Jr. wrote:
> Actually I figured it out. Here is the code I used to fix my issue.
>
>
> route[REWRITE] {
> # This section rewrites the outbound calling number so that caller id
> works correctly.
> #!ifdef WITH_REWRITE
> # lookup an outbound number to replace the extension with
> $var(b)="NO REV";
> sql_xquery("ca","select number from pioutalias where
> username='$fU' and domain='$fd'","ra");
> # determine if a outbound number exists
> if ($xavp(ra=>number)) {
> $var(b)="sip:" + $xavp(ra=>number) + "@" + $fd;
>
> subst('/^P-Asserted-Identity:(.*)sip:[^@]*@[a-zA-Z0-9.]+(.*)$/P-Asserted-Identity:\1$var(b)\2/ig');
> }
> sql_result_free("ra");
> # see if it found a number and log if it did not
> if ($var(b)=="NO REV")
> xlog("L_INFO","No number found for extension:
> '$fu'");
> #!endif
> return;
> }
>
> Your response referencing "msg_apply_changes()" lead me to the module
> "textops.so" (Though msg_apply_changes() is in module textopsx.so). I
> am not sure what the '1' and the '2' in my regular expression do. I
> assume they refer to the characters captured in the '(.*)' sections of
> the regular expression (I am terrible with regular expressions).
> Basically what I needed was to replace the P-Asserted-Identity line in
> the header.
yes, \1 and \2 are back references to selected patterns in between ( ),
in your case being (.*) .
P-Asserted-Identity should not be trusted if received from untrusted
peers. I usually go with:
remove_hf("P-Asserted-Identity");
append_hf("P-Asserted-Identity: <sip:$xavp(ra=>number)@$fd>\r\n");
Cheers,
Daniel
On 4/10/2012 1:25 PM, Daniel-Constantin Mierla wrote:
>> Hello,
>>
>>
>> On 4/10/12 7:23 PM, Gilbert T. Gutierrez, Jr. wrote:
>>> Daniel and Alex,
>>>
>>> Obviously I stumbled into a way to do things that has been illegal
>>> in the past. How do I do this the old way? I have been looking for
>>> examples and hints online but have only found references to modules
>>> and examples using Kamailio compiled as OpenSER. I am using Kamailio
>>> from RPMs so I only have modules and modules_k.
>> I don't really get what you mean. Do you need a solution for an older
>> version? openser was the old name for kamailio, all modules that
>> existed during openser name are in modules/ or modules_k/. Starting
>> with 3.2.0, you can directly assign value to $fu, previously the
>> solution was to use uac_replace_from() of uac module, or play with
>> functions from textops module.
>>
>>>
>>> The issue I was having was that my extension (either 3 digit or 7
>>> digit) was showing up as the callerid when I made outside calls. I
>>> created a reverse table that you look up the correct number to show
>>> the callee. I also add the domain to the query when I have
>>> multidomain enabled. On my test box for multidomain which I am
>>> developing in parallel, my code works and $fu is set to what I want
>>> and the callee gets what I want them to see. It is odd to me that it
>>> works on one box with multidomain and not the other with multidomain
>>> disabled.
>>
>> Do you get any error messages in the log where it does not work? Add
>> some xlog(...) to print the values used in the operations. debugger
>> module may help you to see if the action is actually executed.
>>
>> Btw, if you need the From header to be reverted in the reply,
>> uac_replace_from() is the better way to go.
>>
>> Cheers,
>> Daniel
>>>
>>> Thank you,
>>> Gilbert T. Gutierrez, Jr.
>>> Operations Manager
>>> Phoenix Internet
>>>
>>>
>>>
>>> On 4/10/2012 1:07 AM, Daniel-Constantin Mierla wrote:
>>>> Hello,
>>>>
>>>> On 4/10/12 4:05 AM, Alex Balashov wrote:
>>>>> $fu is not mutable.
>>>>
>>>> actually it is starting with v3.2.0. But it is not visible in the
>>>> script, like the other operations performed on the headers -- they
>>>> operations are kept as a diff (patch) list, not applied immediately.
>>>>
>>>> So, you will see the new From header when the message is sent to
>>>> the network, before that is the original value. You can use
>>>> msg_apply_changes() to make the changes visible immediately.
>>>>
>>>> Cheers,
>>>> Daniel
>>>>
>>>>>
>>>>> --
>>>>> Alex Balashov - Principal
>>>>> Evariste Systems LLC
>>>>> 235 E Ponce de Leon Ave
>>>>> Suite 106
>>>>> Decatur, GA 30030
>>>>> Tel: +1-678-954-0670
>>>>> Fax: +1-404-961-1892
>>>>> Web: http://www.evaristesys.com/, http://www.alexbalashov.com
>>>>>
>>>>> "Gilbert T. Gutierrez, Jr."<mailing-lists at phoenixinternet.net>
>>>>> wrote:
>>>>>
>>>>>> I wrote the code below to rewrite an extension to a phone number
>>>>>> (It is
>>>>>> called in route[LOCATION]). This code works fine with MULTIDOMAIN
>>>>>> enabled but when I run it as a single domain the line
>>>>>> $fu=$var(b); does
>>>>>> not seem to work.. You can see that I have several xlog lines
>>>>>> outputting the variable values into my /var/log/messages. $var(b)
>>>>>> has
>>>>>> the correct value in it, so I do not know what is happening. I
>>>>>> have also
>>>>>> included the /var/log/messages output which I redacted the phone
>>>>>> number,
>>>>>> domain, and extension for security purposes. I am sure I am going
>>>>>> about
>>>>>> this backwards, but can someone provide me some guidance as to
>>>>>> what is
>>>>>> going wrong?
>>>>>>
>>>>>> Thank you,
>>>>>> Gilbert
>>>>>>
>>>>>> # Rewrite - Gilbert
>>>>>> route[REWRITE] {
>>>>>> # This section rewrites the outbound calling number so that
>>>>>> caller id
>>>>>> works correctly.
>>>>>> #!ifdef WITH_REWRITE
>>>>>> # lookup an outbound number to replace the extension with
>>>>>> $var(b)="NO REV";
>>>>>> sql_xquery("ca","select number from pioutalias where
>>>>>> username='$fU'","ra");
>>>>>> # determine if a outbound number exists
>>>>>> if ($xavp(ra=>number)) {
>>>>>> $var(b)="sip:" + $xavp(ra=>number) + "@" + $fd;
>>>>>> xlog("L_INFO","var(b): '$var(b)'");
>>>>>> xlog("L_INFO","fu: '$fu'");
>>>>>> # Assign the outbound calling number
>>>>>> $fu=$var(b);
>>>>>> xlog("L_INFO","New fu: '$fu'");
>>>>>> }
>>>>>> sql_result_free("ra");
>>>>>> # see if it found a number and log if it did not
>>>>>> if ($var(b)=="NO REV")
>>>>>> xlog("L_INFO","No number found for extension:
>>>>>> '$fu'");
>>>>>> #!endif
>>>>>> }
>>>>>>
>>>>>>
>>>>>> /var/log/messages output
>>>>>>
>>>>>> Apr 9 14:38:38 tempfax /usr/sbin/kamailio[6088]: INFO:<script>:
>>>>>> var(b): 'sip:602XXXXXXX at xxxx.com'
>>>>>> Apr 9 14:38:38 tempfax /usr/sbin/kamailio[6088]: INFO:<script>: fu:
>>>>>> 'sip:30XXXXX at xxxx.com'
>>>>>> Apr 9 14:38:38 tempfax /usr/sbin/kamailio[6088]: INFO:<script>: New
>>>>>> fu: 'sip:30XXXXX at xxxx.com'
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users
>>>>>> mailing list
>>>>>> sr-users at lists.sip-router.org
>>>>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>> _______________________________________________
>>>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing
>>>>> list
>>>>> sr-users at lists.sip-router.org
>>>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>>
>>>
>>>
>>> _______________________________________________
>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>>> sr-users at lists.sip-router.org
>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
>
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
--
Daniel-Constantin Mierla
Kamailio Advanced Training, April 23-26, 2012, Berlin, Germany
http://www.asipto.com/index.php/kamailio-advanced-training/
More information about the sr-users
mailing list