Hi, I am trying to use Kamailio specific function 'subst_str' for replacing some media attributes in SDP in my module.

Finally I have resolved how to create 'subst_expr' structure so I can pass it to 'subst_str' function. I am doing something like this:

      struct subst_expr *seMedia;
      char *pattern;
      asprintf(&pattern, "/m=audio ([0-9]{0,5})/m=audio %s/", _host_port.s);
      str *subst;
subst = (str *) pkg_malloc(sizeof(str));
subst->s = pattern;
subst->len = strlen(pattern);

seMedia = subst_parser(subst);

int count = 0;
str *tmpBody;
char const *oldBody = (char const *) msg->body;
tmpBody = subst_str(oldBody, msg, seMedia, &count);

if (count > 0) {
// do other stuff
I am trying to replace all "m=audio {port number}" attributes with port 5060. I think that the regular expression is correct. But unfortunately in Kamailio log I am getting something like this:

 0(25049) DEBUG: <core> [re.c:329]: subst_parser(): subst_parser: ok, se is 0xb72941d8
 0(25049) DEBUG: <core> [re.c:454]: subst_run(): subst_run: running. r=1
 0(25049) DEBUG: <core> [re.c:523]: subst_str(): subst_str: no match

It seems like regex was not matched but after this I am printing out whole message and I can see that in SDP 'm=audio' is present. I also noticed another thing when I am printing out 'seMedia->replacement.s' in log I am getting my replacement "m=audio 5060" but also at the end of the string I can see some weird character:

Inline image 1

If someone came across this issue in the past and resolved it, it would be great if he/she can share his/her knowledge with me because seriously this issue is driving me crazy.



On Thu, Mar 12, 2015 at 9:17 PM, Cockhootec Yahrabee <cockootec@gmail.com> wrote:
Thanks a lot. I am sorry I didn't code with pointers quite a long time so I need to refresh my knowledge a bit :)
But unfortunately it was not the main problem.

In Kamailio log I am getting something like this:

 0(17809) ERROR: <core> [re.c:181]: parse_repl(): subst_parser: bad specifier in replace part /$1 5060/gm

I think, that problem is on this line https://gist.github.com/ivanbarlog/1b552b57e89bf4670872#file-test-c-L5 where I am trying to use $1 as a placeholder for first matched group.

I also tried it without it - just replace `m=audio` (not m=*) but it also didn't worked.

I am also not sure if I am correctly re-transmitting updated SIP message. I looked at other modules which perform the same action and I tried to inspire with their code but unfortunately it's not working.

Could you please review this code sample https://gist.github.com/ivanbarlog/4040ae5b735386a88ea0 ?

Or maybe if you can point me to some resource where I can read more about it. Also it would be great if there was some tutorial for developing modules.

Thanks for help


On Wed, Mar 11, 2015 at 7:20 PM, Daniel-Constantin Mierla <miconda@gmail.com> wrote:
Hello,

at least one problem is the next line in your code:

subst->len = sizeof(pattern);

should be:

subst->len = strlen(pattern);

Because patter is declared as 'char*', sizeof returns 4 or 8 (if 32b or 64b architecture).

Try with that change and see how far it goes.

Cheers,
Daniel


On 11/03/15 00:43, Cockhootec Yahrabee wrote:
Hi guys,
I am trying to 'search&replace' some patterns in message body but unfortunately with no result (but bunch of errors).

First of all I am trying to perform regex substitution as one that can be seen at https://regex101.com/r/vF1kZ7/1

Since I have regular expression I am trying to convert it so it will work with `sub_str` function from re.h


I had quite lot of errors but last error I am getting is that `subst_parser` cannot find separator https://github.com/kamailio/kamailio/blob/master/re.c#L240

Since the `struct subst_expr` is not parsed right the next error is segfault in `subst_str` function.



If someone can explain me how exactly I should use `subst_str` function with my regex I'll be really grateful. Little example code would be also great.

Thanks in advance


_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

-- 
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Kamailio World Conference, May 27-29, 2015
Berlin, Germany - http://www.kamailioworld.com