make voicemails use the uuid of the channel who recorded it when applicable

This commit is contained in:
Anthony Minessale 2010-05-19 16:06:21 -05:00
parent 909ad64221
commit 98a5a30ac2
1 changed files with 28 additions and 15 deletions

View File

@ -46,7 +46,7 @@ SWITCH_MODULE_DEFINITION(mod_voicemail, mod_voicemail_load, mod_voicemail_shutdo
#define VM_MAX_GREETINGS 9
static switch_status_t voicemail_inject(const char *data);
static switch_status_t voicemail_inject(const char *data, switch_core_session_t *session);
static const char *global_cf = "voicemail.conf";
static struct {
@ -1518,7 +1518,7 @@ static switch_status_t listen_file(switch_core_session_t *session, vm_profile_t
cmd = switch_core_session_sprintf(session, "%s@%s %s %s '%s'", vm_cc, cbt->domain, new_file_path, cbt->cid_number, cbt->cid_name);
if (voicemail_inject(cmd) == SWITCH_STATUS_SUCCESS) {
if (voicemail_inject(cmd, session) == SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_NOTICE, "Sent Carbon Copy to %s\n", vm_cc);
TRY_CODE(switch_ivr_phrase_macro(session, VM_ACK_MACRO, "saved", NULL, NULL));
} else {
@ -2297,7 +2297,10 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
const char *read_flags,
switch_event_t *params,
switch_memory_pool_t *pool,
const char *caller_id_name, const char *caller_id_number, const char *forwarded_by, switch_bool_t copy)
const char *caller_id_name,
const char *caller_id_number,
const char *forwarded_by,
switch_bool_t copy, const char *use_uuid)
{
char *file_path = NULL, *dir_path = NULL;
const char *myid = switch_xml_attr(x_user, "id");
@ -2336,8 +2339,11 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
caller_id_number = tmp;
}
switch_uuid_get(&uuid);
switch_uuid_format(uuid_str, &uuid);
if (!use_uuid) {
switch_uuid_get(&uuid);
switch_uuid_format(uuid_str, &uuid);
use_uuid = uuid_str;
}
if ((filename = strrchr(path, *SWITCH_PATH_SEPARATOR))) {
filename++;
@ -2403,7 +2409,7 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
goto failed;
}
file_path = switch_mprintf("%s%smsg_%s_broadcast_%s", dir_path, SWITCH_PATH_SEPARATOR, uuid_str, filename);
file_path = switch_mprintf("%s%smsg_%s_broadcast_%s", dir_path, SWITCH_PATH_SEPARATOR, use_uuid, filename);
if (copy) {
switch_file_copy(path, file_path, SWITCH_FPROT_FILE_SOURCE_PERMS, pool);
@ -2439,7 +2445,7 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
usql = switch_mprintf("insert into voicemail_msgs(created_epoch, read_epoch, username, domain, uuid, cid_name, "
"cid_number, in_folder, file_path, message_len, flags, read_flags, forwarded_by) "
"values(%ld,0,'%q','%q','%q','%q','%q','%q','%q','%u','','%q','%q')", (long) switch_epoch_time_now(NULL),
myid, domain_name, uuid_str, caller_id_name, caller_id_number,
myid, domain_name, use_uuid, caller_id_name, caller_id_number,
myfolder, file_path, message_len, read_flags, switch_str_nil(forwarded_by));
vm_execute_sql(profile, usql, profile->mutex);
@ -2631,7 +2637,7 @@ static switch_status_t deliver_vm(vm_profile_t *profile,
}
static switch_status_t voicemail_inject(const char *data)
static switch_status_t voicemail_inject(const char *data, switch_core_session_t *session)
{
vm_profile_t *profile;
char *dup = NULL, *user = NULL, *domain = NULL, *profile_name = NULL;
@ -2755,14 +2761,16 @@ static switch_status_t voicemail_inject(const char *data)
switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
status =
deliver_vm(profile, ux, domain, path, 0, read_flags, my_params, pool, cid_name, cid_num, forwarded_by,
SWITCH_TRUE);
SWITCH_TRUE, session ? switch_core_session_get_uuid(session) : NULL);
switch_event_destroy(&my_params);
}
continue;
}
switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
status = deliver_vm(profile, ut, domain, path, 0, read_flags, my_params, pool, cid_name, cid_num, forwarded_by, SWITCH_TRUE);
status = deliver_vm(profile, ut, domain, path, 0, read_flags,
my_params, pool, cid_name, cid_num, forwarded_by, SWITCH_TRUE,
session ? switch_core_session_get_uuid(session) : NULL);
switch_event_destroy(&my_params);
}
}
@ -2783,7 +2791,9 @@ static switch_status_t voicemail_inject(const char *data)
}
switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
status = deliver_vm(profile, ut, domain, path, 0, read_flags, my_params, pool, cid_name, cid_num, forwarded_by, SWITCH_TRUE);
status = deliver_vm(profile, ut, domain, path, 0, read_flags,
my_params, pool, cid_name, cid_num, forwarded_by, SWITCH_TRUE,
session ? switch_core_session_get_uuid(session) : NULL);
switch_event_destroy(&my_params);
}
}
@ -2795,7 +2805,9 @@ static switch_status_t voicemail_inject(const char *data)
if ((status = switch_xml_locate_user_in_domain(user, x_domain, &ut, &x_group)) == SWITCH_STATUS_SUCCESS) {
switch_event_create(&my_params, SWITCH_EVENT_REQUEST_PARAMS);
status = deliver_vm(profile, ut, domain, path, 0, read_flags, my_params, pool, cid_name, cid_num, forwarded_by, SWITCH_TRUE);
status = deliver_vm(profile, ut, domain, path, 0, read_flags,
my_params, pool, cid_name, cid_num, forwarded_by, SWITCH_TRUE,
session ? switch_core_session_get_uuid(session) : NULL);
switch_event_destroy(&my_params);
} else {
status = SWITCH_STATUS_FALSE;
@ -3138,14 +3150,15 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, vm_p
if (x_user) {
switch_channel_get_variables(channel, &vars);
status = deliver_vm(profile, x_user, domain_name, file_path, message_len, read_flags, vars,
switch_core_session_get_pool(session), caller_id_name, caller_id_number, NULL, SWITCH_FALSE);
switch_core_session_get_pool(session), caller_id_name, caller_id_number, NULL, SWITCH_FALSE,
session ? switch_core_session_get_uuid(session) : NULL);
switch_event_destroy(&vars);
if (status == SWITCH_STATUS_SUCCESS) {
if ((vm_cc = switch_channel_get_variable(channel, "vm_cc"))) {
char *cmd = switch_core_session_sprintf(session, "%s %s %s %s %s@%s %s",
vm_cc, file_path, caller_id_number, caller_id_name, id, domain_name, read_flags);
if (voicemail_inject(cmd) == SWITCH_STATUS_SUCCESS) {
if (voicemail_inject(cmd, session) == SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_NOTICE, "Sent Carbon Copy to %s\n", vm_cc);
} else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Failed to Carbon Copy to %s\n", vm_cc);
@ -3936,7 +3949,7 @@ static void do_web(vm_profile_t *profile, const char *user_in, const char *domai
#define VM_INJECT_USAGE "[group=]<box> <sound_file> [<cid_num>] [<cid_name>]"
SWITCH_STANDARD_API(voicemail_inject_api_function)
{
if (voicemail_inject(cmd) == SWITCH_STATUS_SUCCESS) {
if (voicemail_inject(cmd, session) == SWITCH_STATUS_SUCCESS) {
stream->write_function(stream, "%s", "+OK\n");
} else {
stream->write_function(stream, "Error: %s\n", VM_INJECT_USAGE);