[Freeswitch-svn] [commit] r10847 - freeswitch/branches/cseket/src/mod/applications/mod_voicemail

FreeSWITCH SVN cseket at freeswitch.org
Wed Dec 17 02:17:08 PST 2008


Author: cseket
Date: Wed Dec 17 05:17:07 2008
New Revision: 10847

Log:
MODAPP-177

Modified:
   freeswitch/branches/cseket/src/mod/applications/mod_voicemail/mod_voicemail.c

Modified: freeswitch/branches/cseket/src/mod/applications/mod_voicemail/mod_voicemail.c
==============================================================================
--- freeswitch/branches/cseket/src/mod/applications/mod_voicemail/mod_voicemail.c	(original)
+++ freeswitch/branches/cseket/src/mod/applications/mod_voicemail/mod_voicemail.c	Wed Dec 17 05:17:07 2008
@@ -51,7 +51,7 @@
 
 static switch_status_t voicemail_inject(const char *data);
 
-const char *global_cf = "voicemail.conf";
+static const char *global_cf = "voicemail.conf";
 static struct {
 	switch_hash_t *profile_hash;
 	int debug;
@@ -273,7 +273,6 @@
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", global_cf);
 		return profile;
 	}
-	
 	if (!(x_profiles = switch_xml_child(cfg, "profiles"))) {
 		goto end;
 	}
@@ -1666,12 +1665,11 @@
 #define FREE_DOMAIN_ROOT() if (x_domain_root) switch_xml_free(x_domain_root); x_user = x_domain = x_domain_root = NULL
 
 
-static void voicemail_check_main(switch_core_session_t *session, const char *profile_name, const char *domain_name, const char *id, int auth)
+static void voicemail_check_main(switch_core_session_t *session, vm_profile_t *profile, const char *domain_name, const char *id, int auth)
 {
 	vm_check_state_t vm_check_state = VM_CHECK_START;
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	switch_caller_profile_t *caller_profile = switch_channel_get_caller_profile(channel);
-	vm_profile_t *profile;
 	switch_xml_t x_domain = NULL, x_domain_root = NULL, x_user = NULL, x_params, x_param;
 	switch_status_t status;
 	char pass_buf[80] = "", *mypass = NULL, id_buf[80] = "", *myfolder = NULL;
@@ -1692,7 +1690,7 @@
 	switch_input_args_t args = { 0 };
 	const char *caller_id_name = NULL;
 	const char *caller_id_number = NULL;
-	
+
 	if (!(caller_id_name = switch_channel_get_variable(channel, "effective_caller_id_name"))) {
 		caller_id_name = caller_profile->caller_id_name;
 	}
@@ -1701,11 +1699,6 @@
 		caller_id_number = caller_profile->caller_id_number;
 	}
 
-	if (!(profile = get_profile(profile_name))) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error invalid profile %s\n", profile_name);
-		return;
-	}
-
 	timeout = profile->digit_timeout;
 	attempts = profile->max_login_attempts;
 	status = switch_ivr_phrase_macro(session, VM_HELLO_MACRO, NULL, NULL, &args);
@@ -2216,8 +2209,6 @@
 
   end:
 
-	switch_thread_rwlock_unlock(profile->rwlock);
-
 	if (switch_channel_ready(channel)) {
 		if (failed) {
 			status = switch_ivr_phrase_macro(session, VM_ABORT_MACRO, NULL, NULL, NULL);
@@ -2681,12 +2672,11 @@
 	return status;
 }
 
-static switch_status_t voicemail_leave_main(switch_core_session_t *session, const char *profile_name, const char *domain_name, const char *id)
+static switch_status_t voicemail_leave_main(switch_core_session_t *session, vm_profile_t *profile, const char *domain_name, const char *id)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	char sql[256];
 	prefs_callback_t cbt;
-	vm_profile_t *profile;
 	char *uuid = switch_core_session_get_uuid(session);
 	char *file_path = NULL;
 	char *dir_path = NULL;
@@ -2732,11 +2722,6 @@
 
 	memset(&cbt, 0, sizeof(cbt));
 
-	if (!(profile = get_profile(profile_name))) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error invalid profile %s\n", profile_name);
- 		return SWITCH_STATUS_FALSE;;
-	}
-
 	if (id) {
 		int ok = 1;
 		switch_event_t *params = NULL;
@@ -2875,7 +2860,7 @@
 	if (*buf != '\0') {
 greet_key_press:
 		if (!strcasecmp(buf, profile->main_menu_key)) {
-			voicemail_check_main(session, profile_name, domain_name, id, 0);
+			voicemail_check_main(session, profile, domain_name, id, 0);
 		} else if (!strcasecmp(buf, profile->operator_key) && !switch_strlen_zero(profile->operator_key)) {
 			int argc;
 			char *argv[4];
@@ -2977,8 +2962,6 @@
 
  end:
 
-	switch_thread_rwlock_unlock(profile->rwlock);
-
 	if (x_domain_root) {
 		switch_xml_free(x_domain_root);
 		x_domain_root = NULL;
@@ -3002,6 +2985,7 @@
 	int argc = 0;
 	char *argv[6] = { 0 };
 	char *mydata = NULL;
+	vm_profile_t * profile = NULL;
 	const char *profile_name = NULL;
 	const char *domain_name = NULL;
 	const char *id = NULL;
@@ -3059,11 +3043,19 @@
 		return;
 	}
 
+	if (!(profile = get_profile(profile_name))) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error invalid profile %s\n", profile_name);
+		return;
+	}
+
 	if (check) {
-		voicemail_check_main(session, profile_name, domain_name, id, auth);
+		voicemail_check_main(session, profile, domain_name, id, auth);
 	} else {
-		voicemail_leave_main(session, profile_name, domain_name, id);
+		voicemail_leave_main(session, profile, domain_name, id);
 	}
+
+	switch_thread_rwlock_unlock(profile->rwlock);
+	
 }
 
 #define BOXCOUNT_SYNTAX "<user>@<domain>[|[new|saved|new-urgent|saved-urgent|all]]"



More information about the Freeswitch-svn mailing list