<div dir="ltr"><div><div><div>Thank you both, this has been quite informative. I wasn't also aware of the $_s() PV, it's handy indeed. Three more clarifications:<br><br></div>- Will $_s() work before the routing part of the config file, and specifically with pre-processor definitions? For example in the following:<br><br><div style="margin-left:40px">modparam("nathelper", "sipping_from", $_s(sip:keepalive@SIP_REALM_DEFINITION))?<br></div><br><div>- Will providing PVs in a dynamic string work with all functions, even for those currently not supporting string concatenation? E.g.:<br><div style="margin-left:40px"><br>append_hf_value("P-Asserted-<wbr>Identity", "<$var(new_pai)>");<br></div><br></div><div style="margin-left:40px">If yes, I assume this will only work for PVs, as preprocessor defined strings won't be substituted if the parser finds their labels enclosed in quotes. In other words, the following won't work:<br>append_hf_value("P-Asserted-Identity", "<$var(new_pai);SOME_DEF>");<br><br></div>- I assumed this would work in the first example, but maybe I should ask explicitly. Will pre-processor defines work with the $_s() PV? Is this valid at all?<br><div style="margin-left:40px"><br></div><div style="margin-left:40px">$_s($ru;SOME_PREPROC_DEF=$var(value))<br></div><br></div>BR,<br></div>George<br></div><div class="gmail_extra"><br><div class="gmail_quote">On 2 May 2018 at 20:07, Daniel-Constantin Mierla <span dir="ltr"><<a href="mailto:miconda@gmail.com" target="_blank">miconda@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
indeed, there is some inconsistency here brought in after the merge with<br>
SIP Express Router back in 2008.<br>
<br>
Traditionally, Kamailio (or openser before 2008) didn't support<br>
concatenation expressions as function parameters. That came via SER<br>
branch and it is not available everywhere in a consistent and coherent<br>
way (even for the code of modules imported from SER).<br>
<br>
If you want to be in the safe side from Kamailio behaviour point of<br>
view, as I never got into using SER style, here are some hints based on<br>
what I typically do:<br>
<br>
  - use concatenation expressions with '+' only in assignments, like:<br>
<span class=""><br>
$var(x) = "string1" + "string2";<br>
<br>
</span>  - use dynamic strings with variables as function parameters, like:<br>
<br>
xlog("L_ERR", "string $var(x) more-string $var(y)\n");<br>
<br>
  - use and assignment to a private variable first or $_s(...) variable<br>
on positions that expect a string or a var, such as transformation<br>
parameters, like:<br>
<br>
$var(r) = "repl1" + "repl2";<br>
$var(x) = $(var(y){s.replace,match,$var(<wbr>r)});<br>
<br>
Cheers,<br>
Daniel<br>
<div class="HOEnZb"><div class="h5"><br>
On 02.05.18 17:05, Alex Balashov wrote:<br>
> You are correct that concatenation vs interpolation works and doesn't work in slightly inconsistent ways, for instance function string arguments vs assignment.<br>
><br>
> The $_s() transformation may help make life easier. <br>
><br>
> On May 2, 2018 10:50:53 AM EDT, George Diamantopoulos <<a href="mailto:georgediam@gmail.com">georgediam@gmail.com</a>> wrote:<br>
>> Hello,<br>
>><br>
>> I'm a a bit confused as to when string concatenation will work in<br>
>> kamailio<br>
>> config file. So far I have identified the following cases:<br>
>><br>
>> Working:<br>
>><br>
>> As part of the right hand side of an assignment:<br>
>> $var(x) = "string1" + "string2";<br>
>><br>
>> String argument of some functions:<br>
>> xlog("L_ERR", "string1" + "string2" + DEFINED_STRING + '\n');<br>
>><br>
>> Conditional Statements:<br>
>> if ( ru =~ "$" + "sip:" + $var(user) ) {<br>
>><br>
>> Not Working:<br>
>><br>
>> In string transformations (the fact that quotes is not part of the<br>
>> argument<br>
>> should give a hint though:<br>
>> $var(x) = $(var(y){s.replace,match,"<wbr>repl1" + "repl2"});<br>
>><br>
>> String argument of some other functions:<br>
>> append_hf_value("P-Asserted-<wbr>Identity", "<" + "$var(new_pai)" + ">");<br>
>> lookup("location", "sip:$var(username)@" + SIP_REALM_DEFINITION));<br>
>><br>
>> In module parameter definitions:<br>
>> modparam("nathelper", "sipping_from", "sip:keepalive@" +<br>
>> SIP_REALM_DEFINITION)<br>
>><br>
>> So far, I have found this to be fairly consistent, except for use<br>
>> within<br>
>> functions. For example, string concatenation works for the second<br>
>> argument<br>
>> of xlog, but not for the string arguments of append_hf_value() or<br>
>> lookup().<br>
>><br>
>> Is there anyway to know this for each function beforehand, or is my<br>
>> only<br>
>> choice to go through trial and error here? Thanks!<br>
>><br>
>> BR,<br>
>> George<br>
><br>
> -- Alex<br>
><br>
> --<br>
> Sent via mobile, please forgive typos and brevity. <br>
><br>
> ______________________________<wbr>_________________<br>
> Kamailio (SER) - Users Mailing List<br>
> <a href="mailto:sr-users@lists.kamailio.org">sr-users@lists.kamailio.org</a><br>
> <a href="https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users" rel="noreferrer" target="_blank">https://lists.kamailio.org/<wbr>cgi-bin/mailman/listinfo/sr-<wbr>users</a><br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">-- <br>
Daniel-Constantin Mierla<br>
<a href="http://www.twitter.com/miconda" rel="noreferrer" target="_blank">www.twitter.com/miconda</a> -- <a href="http://www.linkedin.com/in/miconda" rel="noreferrer" target="_blank">www.linkedin.com/in/miconda</a><br>
Kamailio World Conference - May 14-16, 2018 - <a href="http://www.kamailioworld.com" rel="noreferrer" target="_blank">www.kamailioworld.com</a><br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
______________________________<wbr>_________________<br>
Kamailio (SER) - Users Mailing List<br>
<a href="mailto:sr-users@lists.kamailio.org">sr-users@lists.kamailio.org</a><br>
<a href="https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users" rel="noreferrer" target="_blank">https://lists.kamailio.org/<wbr>cgi-bin/mailman/listinfo/sr-<wbr>users</a><br>
</div></div></blockquote></div><br></div>