-Mon Apr 23 14:11:42 EDT 2007
+Wed Nov 28 21:37:06 EST 2007
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)]),
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,
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;
SWITCH_ADD_API(commands_api_interface, "qq", "Eval a conditional", cond_function, "<expr> ? <true val> : <false val>");
SWITCH_ADD_API(commands_api_interface, "regex", "Eval a regex", regex_function, "<data>|<pattern>[|<subst string>]");
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, "<key> <user>@<domain>");
/* indicate that the module should continue to be loaded */
return SWITCH_STATUS_NOUNLOAD;
*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;
}
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;
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) {
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;
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)
*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;
}
}
-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,
*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 = "";
}
}
}
- 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;
}