[Devel] Re: [Users] textops from other module

Wolfgang Hottgenroth woho at hottis.de
Sat May 20 11:20:19 CEST 2006


Hi,


one more question concerning that allocation in subst_parser: if the
memory is freed somewhere, can I use the compiled regex twice, like
shown below. Or is it freed in between and would the second use go down
to an already freed area?

Thanks,
Wolfgang


// parameter fixup for subst function, code stolen
// from module textops, file textops.c, function fixup_substre
// str subst;
// const_cast: what shall I do, openser's str is defined like that
subst.s = const_cast<char*>(re.c_str());
subst.len = re.length();
struct subst_expr *se = subst_parser(&subst);
if (se == NULL)
  THROW(CallException, ec_Call_MangleRegexFailure);

// get the function to substitute the header
static const string TEXTOPS_MODULE_NAME = "textops";
static const string SUBST_CMD_NAME = "subst";
cmd_function substFunc = find_mod_export(const_cast<char*>(TEXTOPS_MODULE_NAME.c_str()),
                                         const_cast<char*>(SUBST_CMD_NAME.c_str()),
                                         1, 0);
if (substFunc == NULL)
  THROW(CallException, ec_Call_ExportedFuncNotFound);

// substitute the header
// cast to char* with respect to the module API
int res = (*substFunc)(m_sipMsg, (char*)se, NULL);
if (res <= 0)
  THROW(CallException, ec_Call_ManglingFailure);

// get the function to substitute the uri
static const string SUBST_URI_CMD_NAME = "subst_uri";
cmd_function substUriFunc = find_mod_export(const_cast<char*>(TEXTOPS_MODULE_NAME.c_str()),
                                            const_cast<char*>(SUBST_URI_CMD_NAME.c_str()),
                                            1, 0);
if (substUriFunc == NULL)
  THROW(CallException, ec_Call_ExportedFuncNotFound);

// substitute the uri
// cast to char* with respect to the module API
res = (*substUriFunc)(m_sipMsg, (char*)se, NULL);
if (res <= 0)
  THROW(CallException, ec_Call_ManglingFailure);







Wolfgang Hottgenroth wrote:
> Hi,
>
>
> I found all that, but I'm a bit scared: in fixup_substre the call of
> subst_parser seems to allocate some memory for the compiled regex. But I
> can not see where that is freed.
>
> Is there something missing or do I missed something?
>
>
> Thanks,
> Wolfgang
>
>
>
> Bogdan-Andrei Iancu wrote:
>   
>> Hi Wolfgang,
>>
>> even if a module does not export an API, you may access from a different
>> module the exported functions by the find_export() function from core.
>> See how the register module make usage of sl_send_reply() from sl module.
>>
>> IMPORTANT: if you use directly an exported function the fixup functions
>> will not be called so you will have to pass to the functions the
>> parameters in the fixed format - take a look in the textops module to
>> see what are the fixing ops.
>>
>> regards,
>> bogdan
>>
>> Wolfgang Hottgenroth wrote:
>>
>>     
>>> Hi,
>>>
>>>
>>> I want to perform a textops function, namely subst, over a SIP message.
>>> But I want to do this not from the openser script but from a module I'm
>>> about to implement.
>>>
>>> Unfortunately, the textops module did not provide an API to other
>>> modules. But I'm wondering whether it is more than simply removing the
>>> 'static' from the function declaration of the subst_f function in
>>> textops.c to make this function accessible for other modules.
>>>
>>> Or do I have a chance to set a pseudo-variable or AVP with the complete
>>> regex in one of my own modules functions and perform the subst using
>>> that pseudo-variable or AVP in the openser script directly after the
>>> call to my own function?
>>>
>>> Or is the only way to re-implement the subst_f functionality in my own
>>> module to use it from there?
>>>
>>>
>>>
>>> Thank you very much,
>>> Wolfgang
>>>
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at openser.org
>>> http://openser.org/cgi-bin/mailman/listinfo/users
>>>
>>>
>>>
>>>       
>
>
> _______________________________________________
> Devel mailing list
> Devel at openser.org
> http://openser.org/cgi-bin/mailman/listinfo/devel
>   




More information about the Devel mailing list