Merged revisions 47693 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ................ r47693 | kpfleming | 2006-11-15 14:27:38 -0600 (Wed, 15 Nov 2006) | 12 lines Merged revisions 47677 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r47677 | kpfleming | 2006-11-15 11:56:42 -0600 (Wed, 15 Nov 2006) | 4 lines ensure that message duration is included in email notifications for forwarded messages (BE-96, fix by me after corydon used his clue-bat on me) ensure that duration in the message metadata is updated if prepending is done during forwarding (related to BE-96) remove prototype for API call that does not exist ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@47694 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
1c86ec8222
commit
7fe1a6071c
1 changed files with 47 additions and 8 deletions
|
@ -3773,11 +3773,11 @@ static int get_folder2(struct ast_channel *chan, char *fn, int start)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu, char *curdir, int curmsg, char *vmfts, char *context, signed char record_gain)
|
static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu, char *curdir, int curmsg, char *vmfmts,
|
||||||
|
char *context, signed char record_gain, long *duration, struct vm_state *vms)
|
||||||
{
|
{
|
||||||
int cmd = 0;
|
int cmd = 0;
|
||||||
int retries = 0;
|
int retries = 0;
|
||||||
int duration = 0;
|
|
||||||
signed char zero_gain = 0;
|
signed char zero_gain = 0;
|
||||||
|
|
||||||
while ((cmd >= 0) && (cmd != 't') && (cmd != '*')) {
|
while ((cmd >= 0) && (cmd != 't') && (cmd != '*')) {
|
||||||
|
@ -3785,15 +3785,52 @@ static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu,
|
||||||
retries = 0;
|
retries = 0;
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case '1':
|
case '1':
|
||||||
/* prepend a message to the current message and return */
|
/* prepend a message to the current message, update the metadata and return */
|
||||||
{
|
{
|
||||||
char file[200];
|
char msgfile[PATH_MAX];
|
||||||
snprintf(file, sizeof(file), "%s/msg%04d", curdir, curmsg);
|
char textfile[PATH_MAX];
|
||||||
|
int prepend_duration = 0;
|
||||||
|
struct ast_config *msg_cfg;
|
||||||
|
const char *duration_str;
|
||||||
|
|
||||||
|
make_file(msgfile, sizeof(msgfile), curdir, curmsg);
|
||||||
|
strcpy(textfile, msgfile);
|
||||||
|
strncat(textfile, ".txt", sizeof(textfile) - 1);
|
||||||
|
*duration = 0;
|
||||||
|
|
||||||
|
/* if we can't read the message metadata, stop now */
|
||||||
|
if (!(msg_cfg = ast_config_load(textfile))) {
|
||||||
|
cmd = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (record_gain)
|
if (record_gain)
|
||||||
ast_channel_setoption(chan, AST_OPTION_RXGAIN, &record_gain, sizeof(record_gain), 0);
|
ast_channel_setoption(chan, AST_OPTION_RXGAIN, &record_gain, sizeof(record_gain), 0);
|
||||||
cmd = ast_play_and_prepend(chan, NULL, file, 0, vmfmts, &duration, 1, silencethreshold, maxsilence);
|
|
||||||
|
cmd = ast_play_and_prepend(chan, NULL, msgfile, 0, vmfmts, &prepend_duration, 1, silencethreshold, maxsilence);
|
||||||
if (record_gain)
|
if (record_gain)
|
||||||
ast_channel_setoption(chan, AST_OPTION_RXGAIN, &zero_gain, sizeof(zero_gain), 0);
|
ast_channel_setoption(chan, AST_OPTION_RXGAIN, &zero_gain, sizeof(zero_gain), 0);
|
||||||
|
|
||||||
|
|
||||||
|
if ((duration_str = ast_variable_retrieve(msg_cfg, "message", "duration")))
|
||||||
|
*duration = atoi(duration_str);
|
||||||
|
|
||||||
|
if (prepend_duration) {
|
||||||
|
struct ast_category *msg_cat;
|
||||||
|
/* need enough space for a maximum-length message duration */
|
||||||
|
char duration_str[12];
|
||||||
|
|
||||||
|
*duration += prepend_duration;
|
||||||
|
msg_cat = ast_category_get(msg_cfg, "message");
|
||||||
|
snprintf(duration_str, 11, "%ld", *duration);
|
||||||
|
if (!ast_variable_update(msg_cat, "duration", duration_str, NULL)) {
|
||||||
|
config_text_file_save(textfile, msg_cfg, "app_voicemail");
|
||||||
|
STORE(curdir, vmu->mailbox, context, curmsg, chan, vmu, vmfmts, *duration, vms);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ast_config_destroy(msg_cfg);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case '2':
|
case '2':
|
||||||
|
@ -4023,8 +4060,10 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/* Forward VoiceMail */
|
/* Forward VoiceMail */
|
||||||
|
long duration = 0;
|
||||||
|
|
||||||
RETRIEVE(dir, curmsg);
|
RETRIEVE(dir, curmsg);
|
||||||
cmd = vm_forwardoptions(chan, sender, dir, curmsg, vmfmts, context, record_gain);
|
cmd = vm_forwardoptions(chan, sender, dir, curmsg, vmfmts, context, record_gain, &duration, vms);
|
||||||
if (!cmd) {
|
if (!cmd) {
|
||||||
AST_LIST_TRAVERSE_SAFE_BEGIN(&extensions, vmtmp, list) {
|
AST_LIST_TRAVERSE_SAFE_BEGIN(&extensions, vmtmp, list) {
|
||||||
#ifdef IMAP_STORAGE
|
#ifdef IMAP_STORAGE
|
||||||
|
@ -4085,7 +4124,7 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st
|
||||||
/* NULL category for IMAP storage */
|
/* NULL category for IMAP storage */
|
||||||
sendmail(myserveremail, vmtmp, todircount, vmtmp->context, vmtmp->mailbox, chan->cid.cid_num, chan->cid.cid_name, vms->fn, fmt, duration, attach_user_voicemail, chan, NULL);
|
sendmail(myserveremail, vmtmp, todircount, vmtmp->context, vmtmp->mailbox, chan->cid.cid_num, chan->cid.cid_name, vms->fn, fmt, duration, attach_user_voicemail, chan, NULL);
|
||||||
#else
|
#else
|
||||||
copy_message(chan, sender, 0, curmsg, 0, vmtmp, fmt);
|
copy_message(chan, sender, 0, curmsg, duration, vmtmp, fmt);
|
||||||
#endif
|
#endif
|
||||||
saved_messages++;
|
saved_messages++;
|
||||||
AST_LIST_REMOVE_CURRENT(&extensions, list);
|
AST_LIST_REMOVE_CURRENT(&extensions, list);
|
||||||
|
|
Loading…
Reference in a new issue