Marius,
Well, if you ask me whether it is worth pushing to master, you will
get a rather biased answer. This sounds like a call that should be
made by the elders of the Kamailio tribal council. :)
Thank you anyway for the patch; I will put it to good use!
-- Alex
--
Alex Balashov - Principal
Evariste Systems LLC
1170 Peachtree Street
12th Floor, Suite 1200
Atlanta, GA 30309
Tel: +1-678-954-0670
Fax: +1-404-961-1892
On Apr 12, 2010, at 6:15 AM, marius zbihlei <marius.zbihlei(a)1and1.ro>
wrote:
marius zbihlei wrote:
Hello Alex,
How about a syntax like
modparam("*", "db_url", ...) ?
meaning that it matches all modules that have a db_url param.
Maybe this
will also benefit something like module specific log level(when
will be
implemented) and other common parameters.
That would certainly solve the problem!
It seems that this is already implemented. Modparam function allows
for a regexp match on the module name. Unfortunately, I can't text
it right now, but browsing thru the code it seems that it supports
the same regexp expression like the rest of Ser. Maybe something
like this will work
modparam(".*", "db_url", ...);
Marius
_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing
list
sr-users(a)lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
Hello Alex
I had the time to test the previous mail and it doesn't work. The
reason is that the if a regex match succeeds , than the parameter
configured MUST exists in the module. I have created a patch that
modifies this behavior and now the modparam statement succeeds if
there is at least on module that can be configured with the desired
param.
I have attached the patch. And now the question : does it make
sense to push it to master?! In my opinion the relaxed approach is
better that the greedy approach...
Marius
diff --git a/modparam.c b/modparam.c index ca34bef..115079a 100644
--- a/modparam.c +++ b/modparam.c @@ -57,7 +57,7 @@ int
set_mod_param_regex(char* regex, char* name, modparam_t type, void*
val) { struct sr_module* t; regex_t preg; - int mod_found, len; +
int mod_found, len, var_found; char* reg; void *ptr, *val2;
modparam_t param_type; @@ -90,6 +90,7 @@ int set_mod_param_regex
(char* regex, char* name, modparam_t type, void* val) } mod_found =
0; + var_found = 0; for(t = modules; t; t = t->next) { if (regexec
(&preg, t->exports->c.name, 0, 0, 0) == 0) { DBG
("set_mod_param_regex: '%s' matches module '%s'\n", @@ -99,6
+100,7
@@ int set_mod_param_regex(char* regex, char* name, modparam_t type,
void* val) ptr = find_param_export(t, name, type | ((type &
(PARAM_STR|PARAM_STRING))?PARAM_STR|PARAM_STRING:0), ¶m_type);
if (ptr) { /* type casting */ + var_found = 1; if (type ==
PARAM_STRING && PARAM_TYPE_MASK(param_type) == PARAM_STR) { s.s =
(char*)val; s.len = s.s ? strlen(s.s) : 0; @@ -146,11 +148,8 @@ int
set_mod_param_regex(char* regex, char* name, modparam_t type, void*
val) } } else { - LOG(L_ERR, "set_mod_param_regex: parameter <%s>
not found in" + LOG(L_DBG, "set_mod_param_regex: parameter <%s> not
found in" " module <%s>\n", name, t->exports->c.name); -
regfree
(&preg); - pkg_free(reg); - return -3; } } } @@ -161,5 +160,9 @@
int set_mod_param_regex(char* regex, char* name, modparam_t type,
void* val) LOG(L_ERR, "set_mod_param_regex: No module matching <%s>
found\n", regex); return -4; } + if(!var_found) { + LOG(L_ERR,
"set_mod_param_regex: No module export matching <%s> found\n",
name); + return -3; + } return 0; }