From d79d8ba65c9579262ea8f3cff1ebb969f9a1e5fb Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 29 Nov 2007 02:48:44 +0000 Subject: [PATCH] add some stuff git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6430 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/js/.update | 2 +- libs/js/configure.ac | 9 +++ src/include/switch_xml.h | 4 +- .../applications/mod_commands/mod_commands.c | 61 +++++++++++++++++++ .../applications/mod_dptools/mod_dptools.c | 2 +- .../mod_voicemail/mod_voicemail.c | 4 +- src/mod/endpoints/mod_sofia/sofia_reg.c | 2 +- src/mod/languages/mod_spidermonkey/sm.mak | 2 +- src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c | 2 +- src/switch_xml.cpp | 9 +-- 10 files changed, 85 insertions(+), 12 deletions(-) diff --git a/libs/js/.update b/libs/js/.update index c9ce1e76d9..af163dc36d 100644 --- a/libs/js/.update +++ b/libs/js/.update @@ -1 +1 @@ -Mon Apr 23 14:11:42 EDT 2007 +Wed Nov 28 21:37:06 EST 2007 diff --git a/libs/js/configure.ac b/libs/js/configure.ac index 381a0711d0..5c5a729bc1 100644 --- a/libs/js/configure.ac +++ b/libs/js/configure.ac @@ -141,6 +141,15 @@ if test ".$ac_cv_with_file" = ".yes"; then CPPFLAGS="$CPPFLAGS -DJS_HAS_FILE_OBJECT=1" fi +dnl # configure option --without-xml +AC_ARG_WITH([xml], + AS_HELP_STRING([--without-xml], [build without XML object]), + [ac_cv_with_xml=$withval], [ac_cv_with_xml=yes]) +AC_CACHE_CHECK([whether to build with the XML object], [ac_cv_with_xml], [ac_cv_with_xml=yes]) +if test ".$ac_cv_with_xml" = ".yes"; then + CPPFLAGS="$CPPFLAGS -DJS_HAS_XML_SUPPORT=1" +fi + dnl # configure option --with-dso AC_ARG_WITH([dso], AS_HELP_STRING([--with-dso], [build without DSO object (allows run-time process extending)]), diff --git a/src/include/switch_xml.h b/src/include/switch_xml.h index 842006cb42..2f6e27a0ee 100644 --- a/src/include/switch_xml.h +++ b/src/include/switch_xml.h @@ -319,7 +319,9 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate(const char *section, const char *params); SWITCH_DECLARE(switch_status_t) switch_xml_locate_domain(const char *domain_name, char *params, switch_xml_t *root, switch_xml_t *domain); -SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *user_name, const char *domain_name, +SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *key, + const char *user_name, + const char *domain_name, const char *ip, switch_xml_t *root, switch_xml_t *domain, diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index 075026850f..822af3ebae 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -41,6 +41,66 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load); SWITCH_MODULE_DEFINITION(mod_commands, mod_commands_load, NULL, NULL); +SWITCH_STANDARD_API(find_user_function) +{ + switch_xml_t x_domain, x_user, xml = NULL; + int argc; + char *mydata = NULL, *argv[3]; + char *key, *user, *domain; + char *xmlstr, *xs; + + if (!cmd) { + stream->write_function(stream, "bad args\n"); + goto end; + } + + mydata = strdup(cmd); + assert(mydata); + + argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); + + if (argc < 3) { + stream->write_function(stream, "bad args\n"); + goto end; + } + + key = argv[0]; + user = argv[1]; + domain = argv[2]; + + if (!(key && user && domain)) { + stream->write_function(stream, "bad args\n"); + goto end; + } + + if (switch_xml_locate_user(key, user, domain, NULL, &xml, &x_domain, &x_user, NULL) != SWITCH_STATUS_SUCCESS) { + stream->write_function(stream, "can't find user [%s@%s]\n", user, domain); + goto end; + } + + + end: + + if (xml) { + xmlstr = switch_xml_toxml(x_user); + assert(xmlstr); + if ((xs = strstr(xmlstr, "?>"))) { + xs += 2; + } else { + xs = xmlstr; + } + stream->write_function(stream, "%s", xs); + free(xmlstr); + switch_xml_free(xml); + + } + + free(mydata); + return SWITCH_STATUS_SUCCESS; + +} + + SWITCH_STANDARD_API(regex_function) { switch_regex_t *re = NULL; @@ -1782,6 +1842,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load) SWITCH_ADD_API(commands_api_interface, "qq", "Eval a conditional", cond_function, " ? : "); SWITCH_ADD_API(commands_api_interface, "regex", "Eval a regex", regex_function, "|[|]"); SWITCH_ADD_API(commands_api_interface, "uuid_chat", "Send a chat message", uuid_chat, UUID_CHAT_SYNTAX); + SWITCH_ADD_API(commands_api_interface, "find_user_xml", "find a usere", find_user_function, " @"); /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_NOUNLOAD; diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c index cce49404f3..4001d89728 100644 --- a/src/mod/applications/mod_dptools/mod_dptools.c +++ b/src/mod/applications/mod_dptools/mod_dptools.c @@ -109,7 +109,7 @@ SWITCH_STANDARD_APP(set_user_function) *domain++ = '\0'; - if (switch_xml_locate_user(user, domain, NULL, &xml, &x_domain, &x_user, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, NULL) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", user, domain); goto done; } diff --git a/src/mod/applications/mod_voicemail/mod_voicemail.c b/src/mod/applications/mod_voicemail/mod_voicemail.c index 10ed475a03..29aec0b305 100644 --- a/src/mod/applications/mod_voicemail/mod_voicemail.c +++ b/src/mod/applications/mod_voicemail/mod_voicemail.c @@ -1570,7 +1570,7 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro assert(xtra); - if (switch_xml_locate_user(myid, domain_name, switch_channel_get_variable(channel, "network_addr"), + if (switch_xml_locate_user("id", myid, domain_name, switch_channel_get_variable(channel, "network_addr"), &x_domain_root, &x_domain, &x_user, xtra) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", myid, domain_name); ok = 0; @@ -1753,7 +1753,7 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, cons assert(xtra); x_user = x_domain = x_domain_root = NULL; - if (switch_xml_locate_user(id, domain_name, switch_channel_get_variable(channel, "network_addr"), + if (switch_xml_locate_user("id", id, domain_name, switch_channel_get_variable(channel, "network_addr"), &x_domain_root, &x_domain, &x_user, xtra) == SWITCH_STATUS_SUCCESS) { if ((x_params = switch_xml_child(x_user, "params"))) { for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) { diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index e7f7425917..1dae459cbc 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -893,7 +893,7 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t co domain_name = realm; } - if (switch_xml_locate_user(username, domain_name, ip, &xml, &domain, &user, pbuf) != SWITCH_STATUS_SUCCESS) { + if (switch_xml_locate_user("id", username, domain_name, ip, &xml, &domain, &user, pbuf) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", username, domain_name); ret = AUTH_FORBIDDEN; goto end; diff --git a/src/mod/languages/mod_spidermonkey/sm.mak b/src/mod/languages/mod_spidermonkey/sm.mak index 86617568e4..450f24a2be 100644 --- a/src/mod/languages/mod_spidermonkey/sm.mak +++ b/src/mod/languages/mod_spidermonkey/sm.mak @@ -2,7 +2,7 @@ switch_srcdir=../../../.. JS_DIR=$(switch_srcdir)/libs/js JSLA=$(JS_DIR)/libjs.la -LOCAL_CFLAGS+=-I$(JS_DIR)/src -I$(JS_DIR)/nsprpub/dist/include/nspr -DXP_UNIX -I../mod_spidermonkey -DJS_THREADSAFE -DJS_HAS_FILE_OBJECT=1 +LOCAL_CFLAGS+=-I$(JS_DIR)/src -I$(JS_DIR)/nsprpub/dist/include/nspr -DXP_UNIX -I../mod_spidermonkey -DJS_THREADSAFE -DJS_HAS_FILE_OBJECT=1 -DJS_HAS_XML_SUPPORT=1 LOCAL_LDFLAGS+=-L$(JS_DIR)/nsprpub/pr/src -L$(JS_DIR)/nsprpub/dist/lib -lnspr4 LOCAL_LIBADD+=$(JSLA) diff --git a/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c b/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c index 5c54bcc3b6..c4be9bb89d 100644 --- a/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c +++ b/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c @@ -172,7 +172,7 @@ static abyss_bool http_directory_auth(TSession *r, char *domain_name) *pass++ = '\0'; } - if (switch_xml_locate_user(user, domain_name, NULL, &x_domain_root, &x_domain, &x_user, "mailbox=check") != SWITCH_STATUS_SUCCESS) { + if (switch_xml_locate_user("id", user, domain_name, NULL, &x_domain_root, &x_domain, &x_user, "mailbox=check") != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", user, domain_name); goto fail; } diff --git a/src/switch_xml.cpp b/src/switch_xml.cpp index 47da443bfc..419450e51f 100644 --- a/src/switch_xml.cpp +++ b/src/switch_xml.cpp @@ -1296,7 +1296,8 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate_domain(const char *domain_name } -SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *user_name, +SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *key, + const char *user_name, const char *domain_name, const char *ip, switch_xml_t *root, @@ -1311,10 +1312,10 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *user_name, *domain = NULL; if (!switch_strlen_zero(xtra_params)) { - snprintf(params, sizeof(params), "user=%s&domain=%s&ip=%s&%s", + snprintf(params, sizeof(params), "key=%s&user=%s&domain=%s&ip=%s&%s", key, switch_str_nil(user_name), switch_str_nil(domain_name), switch_str_nil(ip), xtra_params); } else { - snprintf(params, sizeof(params), "user=%s&domain=%s&ip=%s", + snprintf(params, sizeof(params), "key=%s&user=%s&domain=%s&ip=%s", key, switch_str_nil(user_name), switch_str_nil(domain_name), switch_str_nil(ip)); xtra_params = ""; } @@ -1336,7 +1337,7 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate_user(const char *user_name, } } - if ((*user = switch_xml_find_child(*domain, "user", "id", user_name))) { + if ((*user = switch_xml_find_child(*domain, "user", key, user_name))) { return SWITCH_STATUS_SUCCESS; }