提交 e93b201f authored 作者: Leon de Rooij's avatar Leon de Rooij

again big changes, need backup in svn, will document in wiki when this works


git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk/contrib@14130 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 607407eb
...@@ -49,10 +49,10 @@ SWITCH_MODULE_DEFINITION(mod_xml_odbc, mod_xml_odbc_load, mod_xml_odbc_shutdown, ...@@ -49,10 +49,10 @@ SWITCH_MODULE_DEFINITION(mod_xml_odbc, mod_xml_odbc_load, mod_xml_odbc_shutdown,
static struct { static struct {
char *odbc_dsn; char *odbc_dsn;
char *configuration_template_name; // char *configuration_template_name;
char *directory_template_name; // char *directory_template_name;
char *dialplan_template_name; // char *dialplan_template_name;
char *phrases_template_name; // char *phrases_template_name;
switch_xml_t templates_tag; switch_xml_t templates_tag;
switch_mutex_t *mutex; switch_mutex_t *mutex;
switch_memory_pool_t *pool; switch_memory_pool_t *pool;
...@@ -109,13 +109,24 @@ typedef struct xml_binding { ...@@ -109,13 +109,24 @@ typedef struct xml_binding {
char *bindings; char *bindings;
} xml_binding_t; } xml_binding_t;
static char* switch_event_expand_headers_by_pool(switch_memory_pool_t *pool, switch_event_t *event, const char *in) /* perhaps it's handy if this is moved to switch_event.c ? */
{
char *tmp, *out;
tmp = switch_event_expand_headers(event, in);
out = switch_core_strdup(pool, tmp);
if (tmp != in) switch_safe_free(tmp);
return out;
}
static int xml_odbc_query_callback(void *pArg, int argc, char **argv, char **columnName) static int xml_odbc_query_callback(void *pArg, int argc, char **argv, char **columnName)
{ {
xml_odbc_session_helper_t *helper = (xml_odbc_session_helper_t *) pArg; xml_odbc_session_helper_t *helper = (xml_odbc_session_helper_t *) pArg;
switch_xml_t xml_in_tmp; switch_xml_t xml_in_tmp;
int i; int i;
// only continue if helper->next_template_name is set ! // only continue if helper->next_template_name is NOT set !
/* up the row counter */ /* up the row counter */
helper->tmp_i++; // TODO: THIS WILL GO WRONG FOR NESTED QUERIES.. THINK ABOUT IT !!! helper->tmp_i++; // TODO: THIS WILL GO WRONG FOR NESTED QUERIES.. THINK ABOUT IT !!!
...@@ -128,7 +139,7 @@ static int xml_odbc_query_callback(void *pArg, int argc, char **argv, char **col ...@@ -128,7 +139,7 @@ static int xml_odbc_query_callback(void *pArg, int argc, char **argv, char **col
/* render all children of xml_in */ /* render all children of xml_in */
for (xml_in_tmp = helper->xml_in_cur->child; xml_in_tmp; xml_in_tmp = xml_in_tmp->ordered) { for (xml_in_tmp = helper->xml_in_cur->child; xml_in_tmp; xml_in_tmp = xml_in_tmp->ordered) {
// only continue if helper->next_template_name is set ! // only continue if helper->next_template_name is NOT set !
helper->xml_in_cur = xml_in_tmp; helper->xml_in_cur = xml_in_tmp;
xml_odbc_render_tag(helper); xml_odbc_render_tag(helper);
} }
...@@ -146,19 +157,20 @@ static switch_status_t xml_odbc_do_break_to(xml_odbc_session_helper_t *helper) ...@@ -146,19 +157,20 @@ static switch_status_t xml_odbc_do_break_to(xml_odbc_session_helper_t *helper)
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
static switch_status_t xml_odbc_do_if_header(xml_odbc_session_helper_t *helper) static switch_status_t xml_odbc_do_check_event_header(xml_odbc_session_helper_t *helper)
{ {
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
static switch_status_t xml_odbc_do_replace_header_value(xml_odbc_session_helper_t *helper) static switch_status_t xml_odbc_do_set_event_header(xml_odbc_session_helper_t *helper)
{ {
char *old_header_value = NULL;
char *name = (char *) switch_xml_attr_soft(helper->xml_in_cur, "name"); char *name = (char *) switch_xml_attr_soft(helper->xml_in_cur, "name");
char *when_name = (char *) switch_xml_attr_soft(helper->xml_in_cur, "when-name"); char *if_name = (char *) switch_xml_attr_soft(helper->xml_in_cur, "if-name");
char *when_value = (char *) switch_xml_attr_soft(helper->xml_in_cur, "when-value"); char *if_value = (char *) switch_xml_attr_soft(helper->xml_in_cur, "if-value");
char *value = (char *) switch_xml_attr_soft(helper->xml_in_cur, "value"); char *value = (char *) switch_xml_attr_soft(helper->xml_in_cur, "value");
char *new_value = switch_event_expand_headers(helper->event, value); /////// LEAK !!!!!!! char *old_value = NULL;
char *new_value = switch_event_expand_headers_by_pool(helper->pool, helper->event, value);
switch_status_t status = SWITCH_STATUS_FALSE; switch_status_t status = SWITCH_STATUS_FALSE;
if (switch_strlen_zero(value)) { if (switch_strlen_zero(value)) {
...@@ -166,10 +178,10 @@ static switch_status_t xml_odbc_do_replace_header_value(xml_odbc_session_helper_ ...@@ -166,10 +178,10 @@ static switch_status_t xml_odbc_do_replace_header_value(xml_odbc_session_helper_
goto done; goto done;
} }
if ((old_header_value = switch_event_get_header(helper->event, when_name))) { if ((old_value = switch_event_get_header(helper->event, if_name))) {
if (switch_strlen_zero(when_value) || !strcasecmp(when_value, old_header_value)) { if (switch_strlen_zero(if_value) || !strcasecmp(if_value, old_value)) {
switch_event_del_header(helper->event, when_name); switch_event_del_header(helper->event, if_name);
switch_event_add_header_string(helper->event, SWITCH_STACK_BOTTOM, when_name, new_value); switch_event_add_header_string(helper->event, SWITCH_STACK_BOTTOM, if_name, new_value);
} }
} }
...@@ -227,14 +239,10 @@ static switch_status_t xml_odbc_render_tag(xml_odbc_session_helper_t *helper) ...@@ -227,14 +239,10 @@ static switch_status_t xml_odbc_render_tag(xml_odbc_session_helper_t *helper)
if (!strcasecmp(name, "break-to")) { if (!strcasecmp(name, "break-to")) {
status = xml_odbc_do_break_to(helper); status = xml_odbc_do_break_to(helper);
} else if (!strcasecmp(name, "if_header")) { } else if (!strcasecmp(name, "check-event-header")) {
status = xml_odbc_do_if_header(helper); status = xml_odbc_do_check_event_header(helper);
// } else if (!strcasecmp(name, "set-header-name")) { } else if (!strcasecmp(name, "set-event-header")) {
// status = xml_odbc_do_set_header_name(helper); status = xml_odbc_do_set_event_header(helper);
// } else if (!strcasecmp(name, "set-header-value")) {
// status = xml_odbc_do_set_header_value(helper);
} else if (!strcasecmp(name, "replace_header_value")) { // DEPRECATED REMOVE THIS FUNCTION!!
status = xml_odbc_do_replace_header_value(helper); // DEPRECATED REMOVE THIS FUNCTION!!
} else if (!strcasecmp(name, "query")) { } else if (!strcasecmp(name, "query")) {
status = xml_odbc_do_query(helper); status = xml_odbc_do_query(helper);
} else { } else {
...@@ -252,16 +260,10 @@ static switch_status_t xml_odbc_render_tag(xml_odbc_session_helper_t *helper) ...@@ -252,16 +260,10 @@ static switch_status_t xml_odbc_render_tag(xml_odbc_session_helper_t *helper)
goto done; goto done;
} }
/* copy all attrs */ /* copy all expanded attrs */
for (i=0; helper->xml_in_cur->attr[i]; i+=2) { for (i=0; helper->xml_in_cur->attr[i]; i+=2) {
char *tmp_attr, *tmp_attr2; char *tmp_attr = switch_event_expand_headers_by_pool(helper->pool, helper->event, helper->xml_in_cur->attr[i+1]);
tmp_attr = switch_event_expand_headers(helper->event, helper->xml_in_cur->attr[i+1]); switch_xml_set_attr(helper->xml_in_cur, helper->xml_in_cur->attr[i], tmp_attr);
tmp_attr2 = switch_core_strdup(helper->pool, tmp_attr); // BAH Can't I use a switch_event_expand_headers that uses helper->pool ?
switch_xml_set_attr(helper->xml_out_cur, helper->xml_in_cur->attr[i], tmp_attr2);
if (tmp_attr != helper->xml_in_cur->attr[i+1]) {
switch_safe_free(tmp_attr);
}
} }
/* render all children */ /* render all children */
...@@ -354,7 +356,11 @@ static switch_xml_t xml_odbc_search(const char *section, const char *tag_name, c ...@@ -354,7 +356,11 @@ static switch_xml_t xml_odbc_search(const char *section, const char *tag_name, c
switch_core_new_memory_pool(&pool); switch_core_new_memory_pool(&pool);
helper.pool = pool; helper.pool = pool;
/* set the default template to render */
helper.next_template_name = "default";
/* find out what template to render, and put it in helper.next_template_name */ /* find out what template to render, and put it in helper.next_template_name */
/*
if (!strcmp(section, "configuration")) { if (!strcmp(section, "configuration")) {
helper.next_template_name = switch_core_strdup(pool, globals.configuration_template_name); helper.next_template_name = switch_core_strdup(pool, globals.configuration_template_name);
} else if (!strcmp(section, "directory")) { } else if (!strcmp(section, "directory")) {
...@@ -367,10 +373,11 @@ static switch_xml_t xml_odbc_search(const char *section, const char *tag_name, c ...@@ -367,10 +373,11 @@ static switch_xml_t xml_odbc_search(const char *section, const char *tag_name, c
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid section\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid section\n");
goto cleanup; goto cleanup;
} }
*/
/* add some headers to event and put it in the helper */ /* add some headers to event and put it in the helper */
gethostname(hostname, sizeof(hostname)); gethostname(hostname, sizeof(hostname));
switch_event_add_header_string(event, SWITCH_STACK_TOP, "hostname", hostname); // switch_event_add_header_string(event, SWITCH_STACK_TOP, "hostname", hostname); // IS THIS ALWAYS PASSED AS FreeSWITCH-Hostname ??
switch_event_add_header_string(event, SWITCH_STACK_TOP, "section", switch_str_nil(section)); switch_event_add_header_string(event, SWITCH_STACK_TOP, "section", switch_str_nil(section));
switch_event_add_header_string(event, SWITCH_STACK_TOP, "tag_name", switch_str_nil(tag_name)); switch_event_add_header_string(event, SWITCH_STACK_TOP, "tag_name", switch_str_nil(tag_name));
switch_event_add_header_string(event, SWITCH_STACK_TOP, "key_name", switch_str_nil(key_name)); switch_event_add_header_string(event, SWITCH_STACK_TOP, "key_name", switch_str_nil(key_name));
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论