From e31f84aa38aadf761f61894112c2d2d426e9debc Mon Sep 17 00:00:00 2001 From: Brian West Date: Thu, 14 May 2009 22:47:44 +0000 Subject: [PATCH] MODAPP-173 you'll need the latest sounds and a make vm-sync to use this git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13314 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- conf/lang/en/vm/sounds.xml | 9 +++++++ .../mod_voicemail/mod_voicemail.c | 25 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/conf/lang/en/vm/sounds.xml b/conf/lang/en/vm/sounds.xml index 03f8303185..96f6404e1b 100644 --- a/conf/lang/en/vm/sounds.xml +++ b/conf/lang/en/vm/sounds.xml @@ -332,4 +332,13 @@ + + + + + + + + + diff --git a/src/mod/applications/mod_voicemail/mod_voicemail.c b/src/mod/applications/mod_voicemail/mod_voicemail.c index 4ff1b616aa..e50fa552fa 100644 --- a/src/mod/applications/mod_voicemail/mod_voicemail.c +++ b/src/mod/applications/mod_voicemail/mod_voicemail.c @@ -1046,6 +1046,7 @@ typedef enum { #define VM_HELLO_MACRO "voicemail_hello" #define VM_GOODBYE_MACRO "voicemail_goodbye" #define VM_MESSAGE_COUNT_MACRO "voicemail_message_count" +#define VM_DISK_QUOTA_EXCEEDED_MACRO "voicemail_disk_quota_exceeded" #define URGENT_FLAG_STRING "A_URGENT" #define NORMAL_FLAG_STRING "B_NORMAL" @@ -2844,6 +2845,7 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, vm_p switch_xml_t x_domain = NULL, x_domain_root = NULL, x_user = NULL, x_params = NULL, x_param = NULL; switch_event_t *vars = NULL; const char *vm_cc = NULL, *vtmp, *vm_ext = NULL; + int disk_quota = 0; switch_event_t *params = NULL; if (!(caller_id_name = switch_channel_get_variable(channel, "effective_caller_id_name"))) { @@ -2888,6 +2890,8 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, vm_p insert_db = switch_true(val); } else if (!strcasecmp(var, "vm-attach-file")) { email_attach = switch_true(val); + } else if (!strcasecmp(var, "vm-disk-quota")) { + disk_quota = atoi(val); } else if (!strcasecmp(var, "vm-alternate-greet-id")) { read_id = switch_core_session_strdup(session, val); } @@ -3032,6 +3036,27 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, vm_p } } + if (disk_quota) { + callback_t cbt = { 0 }; + char sql[256]; + char disk_usage[256]; + + cbt.buf = disk_usage; + cbt.len = sizeof(disk_usage); + + switch_snprintf(sql, sizeof(sql), + "select sum(message_len) from voicemail_msgs where username='%s' and domain='%s'", + id, domain_name); + vm_execute_sql_callback(profile, profile->mutex, sql, sql2str_callback, &cbt); + + if (atoi(disk_usage) >= disk_quota) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Voicemail disk quota is exceeded for %s\n", id); + TRY_CODE(switch_ivr_phrase_macro(session, VM_DISK_QUOTA_EXCEEDED_MACRO, NULL, NULL, NULL)); + goto end; + } + } + + memset(&fh, 0, sizeof(fh)); args.input_callback = control_playback; memset(&cc, 0, sizeof(cc));