Hi Daniel,

Thanks for the prompt response. 

Unfortunately, I am not in a position to be able to build kamailio from source 
at the moment, I noticed this issue on our production servers, using prebuilt 
binaries from apt repos but the code, at first glance, looks like it should 
work.

We are using a db to inject headers into outbound INVITEs and the db is filled 
using db tools running on Mac laptops; this means that I have been able to 
instruct our staff to ensure they press enter at the end of each line. It also 
means I had to do a fix in kamailio to convert mac’s line terminator, 0x0a, to 
a linux terminator, 0x0d, in order for the line counting and separation to work 
at all, which is why I made a suggestion for a new transformation that could do 
that for us… trim won’t work as the field is multi-line.

Blessings,
—
Daniel




> On 7 Oct 2021, at 09:28, Daniel-Constantin Mierla <[email protected]> wrote:
> 
> Hello,
> 
> can you try with the patch from commit:
> 
>   * 
> https://github.com/kamailio/kamailio/commit/eaec3aaac227eb4a8c48f93b45565d15d4a0a991
>  
> <https://github.com/kamailio/kamailio/commit/eaec3aaac227eb4a8c48f93b45565d15d4a0a991>
> If works, then I will backport.
> 
> The transformation is designed for working with lines in sip message that are 
> terminated with CRLF, by searching for LF (\n) to cover the unix/dos. If you 
> want to remove \r, there is a string trim transformation. I haven't seen 
> lines finished only with \r flowing in the SIP world, but feel free to add 
> new features in the code and propose pull requests via github project portal.
> 
> Cheers,
> Daniel
> 
> On 06.10.21 16:45, Daniel Donoghue wrote:
>> I think I’ve found an edge case with the string transformations for 
>> line.count:
>> 
>> In pv_trans.c, the following code does not appear to consider the last line 
>> if there are multiple lines and the last one is not terminated with \n.
>> 
>> case TR_LINE_COUNT:
>>     n=0;
>>     for(i=0; i<val->rs.len; i++)
>>         if(val->rs.s[i]=='\n')
>>             n++;
>>     if(n==0 && val->rs.len>0)
>>         n = 1;
>>     val->flags = PV_TYPE_INT|PV_VAL_INT|PV_VAL_STR;
>>     val->ri = n;
>>     val->rs.s = int2str(val->ri, &val->rs.len);
>>     break;
>> 
>> This means that my count is always one off unless I force a blank line at 
>> the end of my string.
>> 
>> 
>> Also, this code does not cater for cases where there is a different line 
>> terminator, such as CR or CRLF as is the case when the string comes from a 
>> Mac or windows system, respectively; it might be useful to have a 
>> transformation for doing that as I’ve had to hack it using s.replace with 
>> hexadecimal escape codes (\r and \n do not work) in a variable.
>> 
>> 
>> With every blessing,
>> —
>> Daniel Donoghue
>> 
>> 
>> 
>> __________________________________________________________
>> Kamailio - Users Mailing List - Non Commercial Discussions
>>   * [email protected] <mailto:[email protected]>
>> Important: keep the mailing list in the recipients, do not reply only to the 
>> sender!
>> Edit mailing list options or unsubscribe:
>>   * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users 
>> <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users>
> -- 
> Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com/>
> www.twitter.com/miconda <http://www.twitter.com/miconda> -- 
> www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda>
> Kamailio Advanced Training - Online
> Nov 08-11, 2021 (Europe Timezone) - Nov 22-25, 2021 (America Timezone)
>   * https://www.asipto.com/sw/kamailio-advanced-training-online/ 
> <https://www.asipto.com/sw/kamailio-advanced-training-online/>
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
  * [email protected]
Important: keep the mailing list in the recipients, do not reply only to the 
sender!
Edit mailing list options or unsubscribe:
  * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users

Reply via email to