Hi,
I'm writing a module which requires to see request messages and also responses. So I have declared a response_function. The function looks like:
static int fi_response(struct sip_msg* msg, char* str1, char* str2);
and I put it into the module_exports structure like this:
#ifdef STATIC_FI struct module_exports fi_exports = { #else struct module_exports exports= { #endif "fi_module", (char*[]){ "fi_request", "fi_response" }, (cmd_function[]){ fi_request, fi_response }, (int[]){ 0, 0 }, (fixup_function[]){ 0 }, 2, /* Number of exported functions*/ NULL, /* Module parameter names */ NULL, /* Module parameter types */ NULL, /* Module parameter variable pointers */ 0, /* Number of module paramers */ mod_init, fi_response, (destroy_function) 0, 0, 0 };
I'm wondering if I correctly declared the function as I'm getting a warning during compilation about incompatible pointer types (4th last line in structure where the function is declared as response function). I really only need the message as parameter. What should the parameters be?
This is for the CVS version of SER.
Thanks very much for your help!
Regards, Mario
At 02:25 PM 3/4/2003, Mario Kolberg wrote:
Hi,
I'm writing a module which requires to see request messages and also responses. So I have declared a response_function. The function looks like:
static int fi_response(struct sip_msg* msg, char* str1, char* str2);
and I put it into the module_exports structure like this:
#ifdef STATIC_FI struct module_exports fi_exports = { #else struct module_exports exports= { #endif "fi_module", (char*[]){ "fi_request", "fi_response" }, (cmd_function[]){ fi_request, fi_response }, (int[]){ 0, 0 }, (fixup_function[]){ 0 }, 2, /* Number of exported functions*/ NULL, /* Module parameter names */ NULL, /* Module parameter types */ NULL, /* Module parameter variable pointers */ 0, /* Number of module paramers */ mod_init, fi_response, (destroy_function) 0, 0, 0 };
I'm wondering if I correctly declared the function as I'm getting a warning during compilation about incompatible pointer types (4th last line in structure where the function is declared as response function).
Well -- you either use the function for request script processing, then it is of type typedef int (*cmd_function)(struct sip_msg*, char*, char*); or you use it for reply processing and then it is of type typedef int (*response_function)(struct sip_msg*);
If you want to have a function serving two purposes, which does not need to look at parameters, you may enforce type-casting. (But then really don't change your mind and do not access the parameters from the function.) You would have to declare fi_reponse to be response_function in your registration of response function.
-Jiri