]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
mod_voicemail: Add new api call to get user mailbox settings (MODAPP-325)
authorMarc Olivier Chouinard <mochouinard@moctel.com>
Fri, 25 Sep 2009 19:32:44 +0000 (19:32 +0000)
committerMarc Olivier Chouinard <mochouinard@moctel.com>
Fri, 25 Sep 2009 19:32:44 +0000 (19:32 +0000)
[profile/]<user>@<domain>[|[name_path|greeting_path|password]]

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14982 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/applications/mod_voicemail/mod_voicemail.c

index f53a54d75a62ba35332ab55d212f8bd56da09223..8c29f1fcf96510ca0308ad7ae89fb5bd8695c10f 100644 (file)
@@ -3289,6 +3289,76 @@ done:
        switch_safe_free(dup);
        return SWITCH_STATUS_SUCCESS;
 }
+#define PREFS_SYNTAX "[profile/]<user>@<domain>[|[name_path|greeting_path|password]]"
+SWITCH_STANDARD_API(prefs_api_function)
+{
+    char *dup = NULL;
+    const char *how = "greeting_path";
+    vm_profile_t *profile = NULL;
+    char *id, *domain, *p, *profilename = NULL;
+
+    if (switch_strlen_zero(cmd)) {
+        stream->write_function(stream, "%d", 0);
+        goto done;
+    }
+
+    id = dup = strdup(cmd);
+
+    if ((p = strchr(dup, '/'))) {
+        *p++ = '\0';
+        id = p;
+        profilename = dup;
+    }
+
+    if (!strncasecmp(id, "sip:", 4)) {
+        id += 4;
+    }
+
+    if (switch_strlen_zero(id)) {
+        stream->write_function(stream, "%d", 0);
+        goto done;
+    }
+
+    if ((domain = strchr(id, '@'))) {
+        *domain++ = '\0';
+        if ((p = strchr(domain, '|'))) {
+            *p++ = '\0';
+            how = p;
+        }
+
+        if (!switch_strlen_zero(profilename) && !(profile = get_profile(profilename))) {
+            stream->write_function(stream, "-ERR No such profile\n");
+            goto done;
+        }
+        if (!(profile = get_profile("default"))) {
+            stream->write_function(stream, "-ERR profile 'default' doesn't exist\n");
+            goto done;
+        }
+    } else {
+        stream->write_function(stream, "-ERR No domain specified\n");
+        goto done;
+
+    }
+    char sql[256];
+    prefs_callback_t cbt = {{0}};
+
+    switch_snprintf(sql, sizeof(sql), "select * from voicemail_prefs where username='%s' and domain='%s'", id, domain);
+    vm_execute_sql_callback(profile, profile->mutex, sql, prefs_callback, &cbt);
+
+    if (!strcasecmp(how, "greeting_path")) {
+        stream->write_function(stream, "%s", cbt.greeting_path);
+    } else if (!strcasecmp(how, "name_path")) {
+        stream->write_function(stream, "%s", cbt.name_path);
+    } else if (!strcasecmp(how, "password")) {
+        stream->write_function(stream, "%s", cbt.password);
+    } else {
+        stream->write_function(stream, "%s:%s:%s", cbt.greeting_path, cbt.name_path, cbt.password);
+    } 
+    profile_rwunlock(profile);
+done:
+    switch_safe_free(dup);
+    return SWITCH_STATUS_SUCCESS;
+}
 
 #define parse_profile() {\
                total_new_messages = total_saved_messages = 0;                                  \
@@ -4012,7 +4082,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_voicemail_load)
        SWITCH_ADD_API(commands_api_interface, "voicemail", "voicemail", voicemail_api_function, VOICEMAIL_SYNTAX);
        SWITCH_ADD_API(commands_api_interface, "voicemail_inject", "voicemail_inject", voicemail_inject_api_function, VM_INJECT_USAGE);
        SWITCH_ADD_API(commands_api_interface, "vm_boxcount", "vm_boxcount", boxcount_api_function, BOXCOUNT_SYNTAX);
-
+       SWITCH_ADD_API(commands_api_interface, "vm_prefs", "vm_prefs", prefs_api_function, PREFS_SYNTAX);
 
        return SWITCH_STATUS_SUCCESS;
 }