Bug 5727 - reduce duplicate code
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7619 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
85efb20313
commit
eeb58dcd81
|
@ -1603,10 +1603,44 @@ static void prep_email_sub_vars(struct ast_channel *ast, struct ast_vm_user *vmu
|
||||||
pbx_builtin_setvar_helper(ast, "VM_DATE", date);
|
pbx_builtin_setvar_helper(ast, "VM_DATE", date);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fill in *tm for current time according to the proper timezone, if any.
|
||||||
|
* Return tm so it can be used as a function argument.
|
||||||
|
*/
|
||||||
|
static const struct tm *vmu_tm(const struct ast_vm_user *vmu, struct tm *tm)
|
||||||
|
{
|
||||||
|
const struct vm_zone *z = NULL;
|
||||||
|
time_t t = time(NULL);
|
||||||
|
|
||||||
|
/* Does this user have a timezone specified? */
|
||||||
|
if (!ast_strlen_zero(vmu->zonetag)) {
|
||||||
|
/* Find the zone in the list */
|
||||||
|
for (z = zones; z ; z = z->next)
|
||||||
|
if (!strcmp(z->name, vmu->zonetag))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ast_localtime(&t, tm, z ? z->timezone : NULL);
|
||||||
|
return tm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* same as mkstemp, but return a FILE * */
|
||||||
|
static FILE *vm_mkftemp(char *template)
|
||||||
|
{
|
||||||
|
FILE *p = NULL;
|
||||||
|
int pfd = mkstemp(template);
|
||||||
|
if (pfd > -1) {
|
||||||
|
p = fdopen(pfd, "w");
|
||||||
|
if (!p) {
|
||||||
|
close(pfd);
|
||||||
|
pfd = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *context, char *mailbox, char *cidnum, char *cidname, char *attach, char *format, int duration, int attach_user_voicemail)
|
static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *context, char *mailbox, char *cidnum, char *cidname, char *attach, char *format, int duration, int attach_user_voicemail)
|
||||||
{
|
{
|
||||||
FILE *p=NULL;
|
FILE *p=NULL;
|
||||||
int pfd;
|
|
||||||
char date[256];
|
char date[256];
|
||||||
char host[MAXHOSTNAMELEN] = "";
|
char host[MAXHOSTNAMELEN] = "";
|
||||||
char who[256];
|
char who[256];
|
||||||
|
@ -1615,9 +1649,8 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *c
|
||||||
char dur[256];
|
char dur[256];
|
||||||
char tmp[80] = "/tmp/astmail-XXXXXX";
|
char tmp[80] = "/tmp/astmail-XXXXXX";
|
||||||
char tmp2[256];
|
char tmp2[256];
|
||||||
time_t t;
|
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
struct vm_zone *the_zone = NULL;
|
|
||||||
if (vmu && ast_strlen_zero(vmu->email)) {
|
if (vmu && ast_strlen_zero(vmu->email)) {
|
||||||
ast_log(LOG_WARNING, "E-mail address missing for mailbox [%s]. E-mail will not be sent.\n", vmu->mailbox);
|
ast_log(LOG_WARNING, "E-mail address missing for mailbox [%s]. E-mail will not be sent.\n", vmu->mailbox);
|
||||||
return(0);
|
return(0);
|
||||||
|
@ -1627,15 +1660,11 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *c
|
||||||
ast_log(LOG_DEBUG, "Attaching file '%s', format '%s', uservm is '%d', global is %d\n", attach, format, attach_user_voicemail, ast_test_flag((&globalflags), VM_ATTACH));
|
ast_log(LOG_DEBUG, "Attaching file '%s', format '%s', uservm is '%d', global is %d\n", attach, format, attach_user_voicemail, ast_test_flag((&globalflags), VM_ATTACH));
|
||||||
/* Make a temporary file instead of piping directly to sendmail, in case the mail
|
/* Make a temporary file instead of piping directly to sendmail, in case the mail
|
||||||
command hangs */
|
command hangs */
|
||||||
pfd = mkstemp(tmp);
|
p = vm_mkftemp(tmp);
|
||||||
if (pfd > -1) {
|
if (p == NULL) {
|
||||||
p = fdopen(pfd, "w");
|
ast_log(LOG_WARNING, "Unable to launch '%s'\n", mailcmd);
|
||||||
if (!p) {
|
return -1;
|
||||||
close(pfd);
|
} else {
|
||||||
pfd = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (p) {
|
|
||||||
gethostname(host, sizeof(host)-1);
|
gethostname(host, sizeof(host)-1);
|
||||||
if (strchr(srcemail, '@'))
|
if (strchr(srcemail, '@'))
|
||||||
ast_copy_string(who, srcemail, sizeof(who));
|
ast_copy_string(who, srcemail, sizeof(who));
|
||||||
|
@ -1643,27 +1672,7 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *c
|
||||||
snprintf(who, sizeof(who), "%s@%s", srcemail, host);
|
snprintf(who, sizeof(who), "%s@%s", srcemail, host);
|
||||||
}
|
}
|
||||||
snprintf(dur, sizeof(dur), "%d:%02d", duration / 60, duration % 60);
|
snprintf(dur, sizeof(dur), "%d:%02d", duration / 60, duration % 60);
|
||||||
time(&t);
|
strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %z", vmu_tm(vmu, &tm));
|
||||||
|
|
||||||
/* Does this user have a timezone specified? */
|
|
||||||
if (!ast_strlen_zero(vmu->zonetag)) {
|
|
||||||
/* Find the zone in the list */
|
|
||||||
struct vm_zone *z;
|
|
||||||
z = zones;
|
|
||||||
while (z) {
|
|
||||||
if (!strcmp(z->name, vmu->zonetag)) {
|
|
||||||
the_zone = z;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
z = z->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (the_zone)
|
|
||||||
ast_localtime(&t,&tm,the_zone->timezone);
|
|
||||||
else
|
|
||||||
ast_localtime(&t,&tm,NULL);
|
|
||||||
strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %z", &tm);
|
|
||||||
fprintf(p, "Date: %s\n", date);
|
fprintf(p, "Date: %s\n", date);
|
||||||
|
|
||||||
/* Set date format for voicemail mail */
|
/* Set date format for voicemail mail */
|
||||||
|
@ -1758,37 +1767,25 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *c
|
||||||
snprintf(tmp2, sizeof(tmp2), "( %s < %s ; rm -f %s ) &", mailcmd, tmp, tmp);
|
snprintf(tmp2, sizeof(tmp2), "( %s < %s ; rm -f %s ) &", mailcmd, tmp, tmp);
|
||||||
ast_safe_system(tmp2);
|
ast_safe_system(tmp2);
|
||||||
ast_log(LOG_DEBUG, "Sent mail to %s with command '%s'\n", vmu->email, mailcmd);
|
ast_log(LOG_DEBUG, "Sent mail to %s with command '%s'\n", vmu->email, mailcmd);
|
||||||
} else {
|
|
||||||
ast_log(LOG_WARNING, "Unable to launch '%s'\n", mailcmd);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sendpage(char *srcemail, char *pager, int msgnum, char *context, char *mailbox, char *cidnum, char *cidname, int duration, struct ast_vm_user *vmu)
|
static int sendpage(char *srcemail, char *pager, int msgnum, char *context, char *mailbox, char *cidnum, char *cidname, int duration, struct ast_vm_user *vmu)
|
||||||
{
|
{
|
||||||
FILE *p=NULL;
|
|
||||||
int pfd;
|
|
||||||
char date[256];
|
char date[256];
|
||||||
char host[MAXHOSTNAMELEN]="";
|
char host[MAXHOSTNAMELEN]="";
|
||||||
char who[256];
|
char who[256];
|
||||||
char dur[256];
|
char dur[256];
|
||||||
char tmp[80] = "/tmp/astmail-XXXXXX";
|
char tmp[80] = "/tmp/astmail-XXXXXX";
|
||||||
char tmp2[256];
|
char tmp2[256];
|
||||||
time_t t;
|
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
struct vm_zone *the_zone = NULL;
|
FILE *p = vm_mkftemp(tmp);
|
||||||
pfd = mkstemp(tmp);
|
|
||||||
|
|
||||||
if (pfd > -1) {
|
if (p == NULL) {
|
||||||
p = fdopen(pfd, "w");
|
ast_log(LOG_WARNING, "Unable to launch '%s'\n", mailcmd);
|
||||||
if (!p) {
|
return -1;
|
||||||
close(pfd);
|
} else {
|
||||||
pfd = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p) {
|
|
||||||
gethostname(host, sizeof(host)-1);
|
gethostname(host, sizeof(host)-1);
|
||||||
if (strchr(srcemail, '@'))
|
if (strchr(srcemail, '@'))
|
||||||
ast_copy_string(who, srcemail, sizeof(who));
|
ast_copy_string(who, srcemail, sizeof(who));
|
||||||
|
@ -1796,28 +1793,7 @@ static int sendpage(char *srcemail, char *pager, int msgnum, char *context, char
|
||||||
snprintf(who, sizeof(who), "%s@%s", srcemail, host);
|
snprintf(who, sizeof(who), "%s@%s", srcemail, host);
|
||||||
}
|
}
|
||||||
snprintf(dur, sizeof(dur), "%d:%02d", duration / 60, duration % 60);
|
snprintf(dur, sizeof(dur), "%d:%02d", duration / 60, duration % 60);
|
||||||
time(&t);
|
strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %z", vmu_tm(vmu, &tm));
|
||||||
|
|
||||||
/* Does this user have a timezone specified? */
|
|
||||||
if (!ast_strlen_zero(vmu->zonetag)) {
|
|
||||||
/* Find the zone in the list */
|
|
||||||
struct vm_zone *z;
|
|
||||||
z = zones;
|
|
||||||
while (z) {
|
|
||||||
if (!strcmp(z->name, vmu->zonetag)) {
|
|
||||||
the_zone = z;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
z = z->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (the_zone)
|
|
||||||
ast_localtime(&t,&tm,the_zone->timezone);
|
|
||||||
else
|
|
||||||
ast_localtime(&t,&tm,NULL);
|
|
||||||
|
|
||||||
strftime(date, sizeof(date), "%a, %d %b %Y %H:%M:%S %z", &tm);
|
|
||||||
fprintf(p, "Date: %s\n", date);
|
fprintf(p, "Date: %s\n", date);
|
||||||
|
|
||||||
if (*pagerfromstring) {
|
if (*pagerfromstring) {
|
||||||
|
@ -1874,9 +1850,6 @@ static int sendpage(char *srcemail, char *pager, int msgnum, char *context, char
|
||||||
snprintf(tmp2, sizeof(tmp2), "( %s < %s ; rm -f %s ) &", mailcmd, tmp, tmp);
|
snprintf(tmp2, sizeof(tmp2), "( %s < %s ; rm -f %s ) &", mailcmd, tmp, tmp);
|
||||||
ast_safe_system(tmp2);
|
ast_safe_system(tmp2);
|
||||||
ast_log(LOG_DEBUG, "Sent page to %s with command '%s'\n", pager, mailcmd);
|
ast_log(LOG_DEBUG, "Sent page to %s with command '%s'\n", pager, mailcmd);
|
||||||
} else {
|
|
||||||
ast_log(LOG_WARNING, "Unable to launch '%s'\n", mailcmd);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2360,7 +2333,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
|
||||||
char tmp[256] = "", *tmpptr;
|
char tmp[256] = "", *tmpptr;
|
||||||
struct ast_vm_user *vmu;
|
struct ast_vm_user *vmu;
|
||||||
struct ast_vm_user svm;
|
struct ast_vm_user svm;
|
||||||
char *category = NULL;
|
const char *category = NULL;
|
||||||
|
|
||||||
ast_copy_string(tmp, ext, sizeof(tmp));
|
ast_copy_string(tmp, ext, sizeof(tmp));
|
||||||
ext = tmp;
|
ext = tmp;
|
||||||
|
@ -4751,8 +4724,7 @@ static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, st
|
||||||
unsigned char buf[256];
|
unsigned char buf[256];
|
||||||
int bytes=0;
|
int bytes=0;
|
||||||
|
|
||||||
if (adsi_available(chan))
|
if (adsi_available(chan)) {
|
||||||
{
|
|
||||||
bytes += adsi_logo(buf + bytes);
|
bytes += adsi_logo(buf + bytes);
|
||||||
bytes += adsi_display(buf + bytes, ADSI_COMM_PAGE, 3, ADSI_JUST_CENT, 0, "Temp Greeting Menu", "");
|
bytes += adsi_display(buf + bytes, ADSI_COMM_PAGE, 3, ADSI_JUST_CENT, 0, "Temp Greeting Menu", "");
|
||||||
bytes += adsi_display(buf + bytes, ADSI_COMM_PAGE, 4, ADSI_JUST_CENT, 0, "Not Done", "");
|
bytes += adsi_display(buf + bytes, ADSI_COMM_PAGE, 4, ADSI_JUST_CENT, 0, "Not Done", "");
|
||||||
|
@ -4760,39 +4732,37 @@ static int vm_tempgreeting(struct ast_channel *chan, struct ast_vm_user *vmu, st
|
||||||
bytes += adsi_voice_mode(buf + bytes, 0);
|
bytes += adsi_voice_mode(buf + bytes, 0);
|
||||||
adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DISPLAY);
|
adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DISPLAY);
|
||||||
}
|
}
|
||||||
snprintf(prefile,sizeof(prefile), "%s%s/%s/temp", VM_SPOOL_DIR, vmu->context, vms->username);
|
snprintf(prefile, sizeof(prefile), "%s%s/%s/temp", VM_SPOOL_DIR, vmu->context, vms->username);
|
||||||
while((cmd >= 0) && (cmd != 't')) {
|
while (cmd >= 0 && cmd != 't') {
|
||||||
if (cmd)
|
if (cmd)
|
||||||
retries = 0;
|
retries = 0;
|
||||||
if (ast_fileexists(prefile, NULL, NULL) > 0) {
|
if (ast_fileexists(prefile, NULL, NULL) <= 0) {
|
||||||
|
play_record_review(chan, "vm-rec-temp", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain);
|
||||||
|
cmd = 't';
|
||||||
|
} else {
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case '1':
|
case '1':
|
||||||
cmd = play_record_review(chan,"vm-rec-temp",prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain);
|
cmd = play_record_review(chan, "vm-rec-temp", prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain);
|
||||||
break;
|
break;
|
||||||
case '2':
|
case '2':
|
||||||
ast_filedelete(prefile, NULL);
|
ast_filedelete(prefile, NULL);
|
||||||
ast_play_and_wait(chan,"vm-tempremoved");
|
ast_play_and_wait(chan, "vm-tempremoved");
|
||||||
cmd = 't';
|
cmd = 't';
|
||||||
break;
|
break;
|
||||||
case '*':
|
case '*':
|
||||||
cmd = 't';
|
cmd = 't';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (ast_fileexists(prefile, NULL, NULL) > 0) {
|
cmd = ast_play_and_wait(chan,
|
||||||
cmd = ast_play_and_wait(chan,"vm-tempgreeting2");
|
ast_fileexists(prefile, NULL, NULL) > 0 ? /* XXX always true ? */
|
||||||
} else {
|
"vm-tempgreeting2" : "vm-tempgreeting");
|
||||||
cmd = ast_play_and_wait(chan,"vm-tempgreeting");
|
if (!cmd)
|
||||||
} if (!cmd) {
|
|
||||||
cmd = ast_waitfordigit(chan,6000);
|
cmd = ast_waitfordigit(chan,6000);
|
||||||
} if (!cmd) {
|
if (!cmd)
|
||||||
retries++;
|
retries++;
|
||||||
} if (retries > 3) {
|
if (retries > 3)
|
||||||
cmd = 't';
|
cmd = 't';
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
play_record_review(chan,"vm-rec-temp",prefile, maxgreet, fmtc, 0, vmu, &duration, NULL, record_gain);
|
|
||||||
cmd = 't';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (cmd == 't')
|
if (cmd == 't')
|
||||||
|
|
Loading…
Reference in New Issue