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
<miconda(a)gmail.com> wrote:
Hello,
can you try with the patch from commit:
*
https://github.com/kamailio/kamailio/commit/eaec3aaac227eb4a8c48f93b45565d1…
<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
* sr-users(a)lists.kamailio.org <mailto:sr-users@lists.kamailio.org>
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/>