Hi all,
I’m trying to write a basic Kamailio module from scratch and have run into an area where I’m in need of a couple pointers (pun not intended). :-) I have the module loading correctly and can call a function in my routing script like this:
mymod_getinfo(“5551234”);
This, for now, just triggers a print of the submitted parameter.
What I’d like to do next is have it accept and print the From URI in configuration script like so:
mymod_getinfo(“$fU”);
For now, this prints the string literal of “$fU” and I’m trying to extract the value of the referenced variable and print that. The example module “print” does not involve this concept of pseudo-variables. The skeleton module example in the wiki also does not mention variables.
I’ve looked into other modules to see how it works but they all seem to have a slightly different handling of this task. Can someone point me to an example in the modules which accomplishes this?
What I’ve been searching for is a replace_all function which accepts a string containing pseudo-variables and returns a new string with them all replaced with their corresponding values.
Thanks in advance and apologies if I’ve overlooked a relevant piece of developer documentation or if I’m looking at this incorrectly.
Regards, -Michael
Hello Michael,
There are internal API functions which handle pseudovariable interpolation in string arguments, e.g. pv_get_spec_value().
You can see one-off uses of this for example in the fixup functions (functions which preliminarily process and validate arguments, often, but not always beginning with w_, for "wrapper").
You can see how this works in the 'uac' module, for example:
https://github.com/kamailio/kamailio/blob/master/src/modules/uac/auth.c#L266
But in my opinion, the most sensible packaging of this functionality is done in the dispatcher module. You'll note that ds_select_*() share a wrapper called w_ds_select_addr():
https://github.com/kamailio/kamailio/blob/master/src/modules/dispatcher/disp...
There is this nice macro, proprietary to the dispatcher module, called GET_VALUE():
https://github.com/kamailio/kamailio/blob/master/src/modules/dispatcher/disp...
That's defined here:
https://github.com/kamailio/kamailio/blob/master/src/modules/dispatcher/disp...
And it takes advantage of a core API function called get_is_fparam():
https://github.com/kamailio/kamailio/blob/master/src/core/sr_module.c#L1656
As you can see, it can evaluate all kinds of interpolated values.
So, I'd just use that.
-- Alex
On Fri, Dec 13, 2019 at 12:10:02PM -0600, Michael Iedema wrote:
Hi all,
I’m trying to write a basic Kamailio module from scratch and have run into an area where I’m in need of a couple pointers (pun not intended). :-) I have the module loading correctly and can call a function in my routing script like this:
mymod_getinfo(“5551234”);
This, for now, just triggers a print of the submitted parameter.
What I’d like to do next is have it accept and print the From URI in configuration script like so:
mymod_getinfo(“$fU”);
For now, this prints the string literal of “$fU” and I’m trying to extract the value of the referenced variable and print that. The example module “print” does not involve this concept of pseudo-variables. The skeleton module example in the wiki also does not mention variables.
I’ve looked into other modules to see how it works but they all seem to have a slightly different handling of this task. Can someone point me to an example in the modules which accomplishes this?
What I’ve been searching for is a replace_all function which accepts a string containing pseudo-variables and returns a new string with them all replaced with their corresponding values.
Thanks in advance and apologies if I’ve overlooked a relevant piece of developer documentation or if I’m looking at this incorrectly.
Regards, -Michael
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
Thank you for all of the references, Alex.
I’m still experimenting a bit but have a much better grasp on how things can be done.
Much appreciated.
On Dec 13, 2019, at 12:47, Alex Balashov abalashov@evaristesys.com wrote:
Hello Michael,
There are internal API functions which handle pseudovariable interpolation in string arguments, e.g. pv_get_spec_value().
You can see one-off uses of this for example in the fixup functions (functions which preliminarily process and validate arguments, often, but not always beginning with w_, for "wrapper").
You can see how this works in the 'uac' module, for example:
https://github.com/kamailio/kamailio/blob/master/src/modules/uac/auth.c#L266
But in my opinion, the most sensible packaging of this functionality is done in the dispatcher module. You'll note that ds_select_*() share a wrapper called w_ds_select_addr():
https://github.com/kamailio/kamailio/blob/master/src/modules/dispatcher/disp...
There is this nice macro, proprietary to the dispatcher module, called GET_VALUE():
https://github.com/kamailio/kamailio/blob/master/src/modules/dispatcher/disp...
That's defined here:
https://github.com/kamailio/kamailio/blob/master/src/modules/dispatcher/disp...
And it takes advantage of a core API function called get_is_fparam():
https://github.com/kamailio/kamailio/blob/master/src/core/sr_module.c#L1656
As you can see, it can evaluate all kinds of interpolated values.
So, I'd just use that.
-- Alex
On Fri, Dec 13, 2019 at 12:10:02PM -0600, Michael Iedema wrote:
Hi all,
I’m trying to write a basic Kamailio module from scratch and have run into an area where I’m in need of a couple pointers (pun not intended). :-) I have the module loading correctly and can call a function in my routing script like this:
mymod_getinfo(“5551234”);
This, for now, just triggers a print of the submitted parameter.
What I’d like to do next is have it accept and print the From URI in configuration script like so:
mymod_getinfo(“$fU”);
For now, this prints the string literal of “$fU” and I’m trying to extract the value of the referenced variable and print that. The example module “print” does not involve this concept of pseudo-variables. The skeleton module example in the wiki also does not mention variables.
I’ve looked into other modules to see how it works but they all seem to have a slightly different handling of this task. Can someone point me to an example in the modules which accomplishes this?
What I’ve been searching for is a replace_all function which accepts a string containing pseudo-variables and returns a new string with them all replaced with their corresponding values.
Thanks in advance and apologies if I’ve overlooked a relevant piece of developer documentation or if I’m looking at this incorrectly.
Regards, -Michael
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
-- Alex Balashov | Principal | Evariste Systems LLC
Tel: +1-706-510-6800 / +1-800-250-5920 (toll-free) Web: http://www.evaristesys.com/, http://www.csrpswitch.com/
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
(adding sr-dev list to CC)
Hi Michael,
small general addition - you are probably already aware of this documentation:
https://www.asipto.com/pub/kamailio-devel-guide/
There is work going on right now to update it, it needs also some extensions, e.g. for the PV core functions.
Cheers,
Henning
Am 13.12.19 um 19:10 schrieb Michael Iedema:
Hi all,
I’m trying to write a basic Kamailio module from scratch and have run into an area where I’m in need of a couple pointers (pun not intended). :-) I have the module loading correctly and can call a function in my routing script like this:
mymod_getinfo(“5551234”);
This, for now, just triggers a print of the submitted parameter.
What I’d like to do next is have it accept and print the From URI in configuration script like so:
mymod_getinfo(“$fU”);
For now, this prints the string literal of “$fU” and I’m trying to extract the value of the referenced variable and print that. The example module “print” does not involve this concept of pseudo-variables. The skeleton module example in the wiki also does not mention variables.
I’ve looked into other modules to see how it works but they all seem to have a slightly different handling of this task. Can someone point me to an example in the modules which accomplishes this?
What I’ve been searching for is a replace_all function which accepts a string containing pseudo-variables and returns a new string with them all replaced with their corresponding values.
Thanks in advance and apologies if I’ve overlooked a relevant piece of developer documentation or if I’m looking at this incorrectly.
Regards, -Michael
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users