mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-15 00:41:02 +00:00
Merge voicemail internationalization (bug #1485)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3309 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
#include <asterisk/dsp.h>
|
||||
#include <asterisk/localtime.h>
|
||||
#include <asterisk/cli.h>
|
||||
#include <asterisk/utils.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
@@ -85,6 +86,35 @@ static inline void sql_close(void) { }
|
||||
#define MAX_DATETIME_FORMAT 512
|
||||
#define MAX_NUM_CID_CONTEXTS 10
|
||||
|
||||
/* Syntaxes supported, not really language codes.
|
||||
en - English
|
||||
de - German
|
||||
es - Spanish
|
||||
fr - French
|
||||
nl - Dutch
|
||||
pt - Portuguese
|
||||
|
||||
German requires the following additional soundfile:
|
||||
1F einE (feminine)
|
||||
|
||||
Spanish requires the following additional soundfile:
|
||||
1M un (masculine)
|
||||
|
||||
Dutch, Portuguese & Spanish require the following additional soundfiles:
|
||||
vm-INBOXs singular of 'new'
|
||||
vm-Olds singular of 'old/heard/read'
|
||||
|
||||
NB these are plural:
|
||||
vm-INBOX nieuwe (nl)
|
||||
vm-Old oude (nl)
|
||||
|
||||
Dutch also uses:
|
||||
nl-om 'at'?
|
||||
|
||||
Spanish also uses:
|
||||
vm-youhaveno
|
||||
|
||||
*/
|
||||
|
||||
struct baseio {
|
||||
int iocp;
|
||||
@@ -96,15 +126,16 @@ struct baseio {
|
||||
|
||||
/* Structure for linked list of users */
|
||||
struct ast_vm_user {
|
||||
char context[80];
|
||||
char mailbox[80];
|
||||
char password[80];
|
||||
char fullname[80];
|
||||
char email[80];
|
||||
char pager[80];
|
||||
char serveremail[80];
|
||||
char mailcmd[160]; /* Configurable mail command */
|
||||
char zonetag[80];
|
||||
char context[80]; /* Voicemail context */
|
||||
char mailbox[80]; /* Mailbox id, unique within vm context */
|
||||
char password[80]; /* Secret pin code, numbers only */
|
||||
char fullname[80]; /* Full name, for directory app */
|
||||
char email[80]; /* E-mail address */
|
||||
char pager[80]; /* E-mail address to pager (no attachment) */
|
||||
char serveremail[80]; /* From: Mail address */
|
||||
char mailcmd[160]; /* Configurable mail command */
|
||||
char language[MAX_LANGUAGE]; /* Config: Language setting */
|
||||
char zonetag[80]; /* Time zone */
|
||||
char callback[80];
|
||||
char dialout[80];
|
||||
char exit[80];
|
||||
@@ -287,6 +318,8 @@ static void apply_options(struct ast_vm_user *vmu, char *options)
|
||||
vmu->attach = 0;
|
||||
} else if (!strcasecmp(var, "serveremail")) {
|
||||
strncpy(vmu->serveremail, value, sizeof(vmu->serveremail) - 1);
|
||||
} else if (!strcasecmp(var, "language")) {
|
||||
strncpy(vmu->language, value, sizeof(vmu->language) - 1);
|
||||
} else if (!strcasecmp(var, "tz")) {
|
||||
strncpy(vmu->zonetag, value, sizeof(vmu->zonetag) - 1);
|
||||
} else if (!strcasecmp(var, "delete")) {
|
||||
@@ -825,7 +858,7 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *m
|
||||
time(&t);
|
||||
|
||||
/* Does this user have a timezone specified? */
|
||||
if (strlen(vmu->zonetag)) {
|
||||
if (!ast_strlen_zero(vmu->zonetag)) {
|
||||
/* Find the zone in the list */
|
||||
struct vm_zone *z;
|
||||
z = zones;
|
||||
@@ -974,7 +1007,7 @@ static int sendpage(char *srcemail, char *pager, int msgnum, char *mailbox, char
|
||||
time(&t);
|
||||
|
||||
/* Does this user have a timezone specified? */
|
||||
if (strlen(vmu->zonetag)) {
|
||||
if (!ast_strlen_zero(vmu->zonetag)) {
|
||||
/* Find the zone in the list */
|
||||
struct vm_zone *z;
|
||||
z = zones;
|
||||
@@ -1654,6 +1687,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
|
||||
char *context;
|
||||
char ecodes[16] = "#";
|
||||
char tmp[256] = "", *tmpptr;
|
||||
char language[MAX_LANGUAGE];
|
||||
struct ast_vm_user *vmu;
|
||||
struct ast_vm_user svm;
|
||||
|
||||
@@ -1699,7 +1733,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
|
||||
if (ast_exists_extension(chan, strlen(chan->macrocontext) ? chan->macrocontext : chan->context, "a", 1, chan->callerid))
|
||||
strcat(ecodes, "*");
|
||||
/* Play the beginning intro if desired */
|
||||
if (strlen(prefile)) {
|
||||
if (!ast_strlen_zero(prefile)) {
|
||||
if (ast_fileexists(prefile, NULL, NULL) > 0) {
|
||||
if (ast_streamfile(chan, prefile, chan->language) > -1)
|
||||
res = ast_waitstream(chan, ecodes);
|
||||
@@ -1733,9 +1767,9 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
|
||||
other than the operator -- an automated attendant or mailbox login for example */
|
||||
if (res == '*') {
|
||||
strncpy(chan->exten, "a", sizeof(chan->exten) - 1);
|
||||
if (strlen(vmu->exit)) {
|
||||
if (!ast_strlen_zero(vmu->exit)) {
|
||||
strncpy(chan->context, vmu->exit, sizeof(chan->context) - 1);
|
||||
} else if (strlen(chan->macrocontext)) {
|
||||
} else if (!ast_strlen_zero(chan->macrocontext)) {
|
||||
strncpy(chan->context, chan->macrocontext, sizeof(chan->context) - 1);
|
||||
}
|
||||
chan->priority = 0;
|
||||
@@ -1746,9 +1780,9 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
|
||||
if (res == '0') {
|
||||
transfer:
|
||||
strncpy(chan->exten, "o", sizeof(chan->exten) - 1);
|
||||
if (strlen(vmu->exit)) {
|
||||
if (!ast_strlen_zero(vmu->exit)) {
|
||||
strncpy(chan->context, vmu->exit, sizeof(chan->context) - 1);
|
||||
} else if (strlen(chan->macrocontext)) {
|
||||
} else if (!ast_strlen_zero(chan->macrocontext)) {
|
||||
strncpy(chan->context, chan->macrocontext, sizeof(chan->context) - 1);
|
||||
}
|
||||
chan->priority = 0;
|
||||
@@ -1767,7 +1801,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
|
||||
}
|
||||
/* The meat of recording the message... All the announcements and beeps have been played*/
|
||||
strncpy(fmt, vmfmts, sizeof(fmt) - 1);
|
||||
if (strlen(fmt)) {
|
||||
if (!ast_strlen_zero(fmt)) {
|
||||
msgnum = 0;
|
||||
do {
|
||||
make_file(fn, sizeof(fn), dir, msgnum);
|
||||
@@ -1873,10 +1907,10 @@ static int count_messages(char *dir)
|
||||
return x;
|
||||
}
|
||||
|
||||
static int say_and_wait(struct ast_channel *chan, int num)
|
||||
static int say_and_wait(struct ast_channel *chan, int num, char *language)
|
||||
{
|
||||
int d;
|
||||
d = ast_say_number(chan, num, AST_DIGIT_ANY, chan->language, (char *) NULL);
|
||||
d = ast_say_number(chan, num, AST_DIGIT_ANY, language, (char *) NULL);
|
||||
return d;
|
||||
}
|
||||
|
||||
@@ -2169,7 +2203,7 @@ static void adsi_message(struct ast_channel *chan, char *folder, int msg, int la
|
||||
stringp=buf;
|
||||
strsep(&stringp, "=");
|
||||
val = strsep(&stringp, "=");
|
||||
if (val && strlen(val)) {
|
||||
if (val && !ast_strlen_zero(val)) {
|
||||
if (!strcmp(buf, "callerid"))
|
||||
strncpy(cid, val, sizeof(cid) - 1);
|
||||
if (!strcmp(buf, "origdate"))
|
||||
@@ -2202,7 +2236,7 @@ static void adsi_message(struct ast_channel *chan, char *folder, int msg, int la
|
||||
}
|
||||
}
|
||||
|
||||
if (strlen(cid)) {
|
||||
if (!ast_strlen_zero(cid)) {
|
||||
ast_callerid_parse(cid, &name, &num);
|
||||
if (!name)
|
||||
name = num;
|
||||
@@ -2392,32 +2426,46 @@ static void adsi_goodbye(struct ast_channel *chan)
|
||||
adsi_transmit_message(chan, buf, bytes, ADSI_MSG_DISPLAY);
|
||||
}
|
||||
|
||||
/*--- get_folder: Folder menu ---*/
|
||||
/* Plays "press 1 for INBOX messages" etc
|
||||
Should possibly be internationalized
|
||||
*/
|
||||
static int get_folder(struct ast_channel *chan, int start)
|
||||
{
|
||||
int x;
|
||||
int d;
|
||||
char fn[256];
|
||||
d = play_and_wait(chan, "vm-press");
|
||||
d = play_and_wait(chan, "vm-press"); /* "Press" */
|
||||
if (d)
|
||||
return d;
|
||||
for (x = start; x< 5; x++) {
|
||||
for (x = start; x< 5; x++) { /* For all folders */
|
||||
if ((d = ast_say_number(chan, x, AST_DIGIT_ANY, chan->language, (char *) NULL)))
|
||||
return d;
|
||||
d = play_and_wait(chan, "vm-for");
|
||||
if (d)
|
||||
return d;
|
||||
snprintf(fn, sizeof(fn), "vm-%s", mbox(x));
|
||||
d = play_and_wait(chan, fn);
|
||||
if (d)
|
||||
return d;
|
||||
d = play_and_wait(chan, "vm-messages");
|
||||
d = play_and_wait(chan, "vm-for"); /* "for" */
|
||||
if (d)
|
||||
return d;
|
||||
if (!strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "fr") || !strcasecmp(chan->language, "pt")) { /* Spanish, French or Portuguese syntax */
|
||||
d = play_and_wait(chan, "vm-messages"); /* "messages */
|
||||
if (d)
|
||||
return d;
|
||||
snprintf(fn, sizeof(fn), "vm-%s", mbox(x)); /* Folder name */
|
||||
d = play_and_wait(chan, fn);
|
||||
if (d)
|
||||
return d;
|
||||
} else { /* Default English */
|
||||
snprintf(fn, sizeof(fn), "vm-%s", mbox(x)); /* Folder name */
|
||||
d = play_and_wait(chan, fn);
|
||||
if (d)
|
||||
return d;
|
||||
d = play_and_wait(chan, "vm-messages"); /* "messages */
|
||||
if (d)
|
||||
return d;
|
||||
}
|
||||
d = ast_waitfordigit(chan, 500);
|
||||
if (d)
|
||||
return d;
|
||||
}
|
||||
d = play_and_wait(chan, "vm-tocancel");
|
||||
d = play_and_wait(chan, "vm-tocancel"); /* "or pound to cancel" */
|
||||
if (d)
|
||||
return d;
|
||||
d = ast_waitfordigit(chan, 4000);
|
||||
@@ -2427,7 +2475,7 @@ static int get_folder(struct ast_channel *chan, int start)
|
||||
static int get_folder2(struct ast_channel *chan, char *fn, int start)
|
||||
{
|
||||
int res = 0;
|
||||
res = play_and_wait(chan, fn);
|
||||
res = play_and_wait(chan, fn); /* Folder name */
|
||||
while (((res < '0') || (res > '9')) &&
|
||||
(res != '#') && (res >= 0)) {
|
||||
res = get_folder(chan, 0);
|
||||
@@ -2461,8 +2509,10 @@ static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu,
|
||||
break;
|
||||
default:
|
||||
cmd = play_and_wait(chan,"vm-forwardoptions");
|
||||
/* "Press 1 to prepend a message or 2 to forward the message without prepending" */
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan,"vm-starmain");
|
||||
/* "press star to return to the main menu" */
|
||||
if (!cmd)
|
||||
cmd = ast_waitfordigit(chan,6000);
|
||||
if (!cmd)
|
||||
@@ -2489,19 +2539,19 @@ static int notify_new_message(struct ast_channel *chan, struct ast_vm_user *vmu,
|
||||
stringp = fmt;
|
||||
strsep(&stringp, "|");
|
||||
|
||||
if (strlen(vmu->email)) {
|
||||
if (!ast_strlen_zero(vmu->email)) {
|
||||
int attach_user_voicemail = attach_voicemail;
|
||||
char *myserveremail = serveremail;
|
||||
if (vmu->attach > -1)
|
||||
attach_user_voicemail = vmu->attach;
|
||||
if (strlen(vmu->serveremail))
|
||||
if (!ast_strlen_zero(vmu->serveremail))
|
||||
myserveremail = vmu->serveremail;
|
||||
sendmail(myserveremail, vmu, msgnum, vmu->mailbox, callerid, fn, fmt, duration, attach_user_voicemail);
|
||||
}
|
||||
|
||||
if (strlen(vmu->pager)) {
|
||||
if (!ast_strlen_zero(vmu->pager)) {
|
||||
char *myserveremail = serveremail;
|
||||
if (strlen(vmu->serveremail))
|
||||
if (!ast_strlen_zero(vmu->serveremail))
|
||||
myserveremail = vmu->serveremail;
|
||||
sendpage(myserveremail, vmu->pager, msgnum, vmu->mailbox, callerid, duration, vmu);
|
||||
}
|
||||
@@ -2538,13 +2588,13 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
|
||||
int saved_messages = 0, found = 0;
|
||||
int valid_extensions = 0;
|
||||
while (!res && !valid_extensions) {
|
||||
res = ast_streamfile(chan, "vm-extension", chan->language);
|
||||
res = ast_streamfile(chan, "vm-extension", chan->language); /* "extension" */
|
||||
if (res)
|
||||
break;
|
||||
if ((res = ast_readstring(chan, username, sizeof(username) - 1, 2000, 10000, "#") < 0))
|
||||
break;
|
||||
/* start all over if no username */
|
||||
if (!strlen(username))
|
||||
if (ast_strlen_zero(username))
|
||||
continue;
|
||||
stringp = username;
|
||||
s = strsep(&stringp, "*");
|
||||
@@ -2569,7 +2619,7 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
|
||||
/* break from the loop of reading the extensions */
|
||||
if (valid_extensions)
|
||||
break;
|
||||
/* invalid extension, try again */
|
||||
/* "I am sorry, that's not a valid extension. Please try again." */
|
||||
res = play_and_wait(chan, "pbx-invalid");
|
||||
}
|
||||
/* check if we're clear to proceed */
|
||||
@@ -2615,19 +2665,19 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
|
||||
duration = atoi(s);
|
||||
else
|
||||
duration = 0;
|
||||
if (strlen(vmtmp->email)) {
|
||||
if (!ast_strlen_zero(vmtmp->email)) {
|
||||
int attach_user_voicemail = attach_voicemail;
|
||||
char *myserveremail = serveremail;
|
||||
if (vmtmp->attach > -1)
|
||||
attach_user_voicemail = vmtmp->attach;
|
||||
if (strlen(vmtmp->serveremail))
|
||||
if (!ast_strlen_zero(vmtmp->serveremail))
|
||||
myserveremail = vmtmp->serveremail;
|
||||
sendmail(myserveremail, vmtmp, todircount, vmtmp->mailbox, callerid, fn, tmp, duration, attach_user_voicemail);
|
||||
}
|
||||
|
||||
if (strlen(vmtmp->pager)) {
|
||||
if (!ast_strlen_zero(vmtmp->pager)) {
|
||||
char *myserveremail = serveremail;
|
||||
if (strlen(vmtmp->serveremail))
|
||||
if (!ast_strlen_zero(vmtmp->serveremail))
|
||||
myserveremail = vmtmp->serveremail;
|
||||
sendpage(myserveremail, vmtmp->pager, todircount, vmtmp->mailbox, callerid, duration, vmtmp);
|
||||
}
|
||||
@@ -2644,7 +2694,7 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
|
||||
free_user(vmfree);
|
||||
}
|
||||
if (saved_messages > 0) {
|
||||
/* give confirmatopm that the message was saved */
|
||||
/* give confirmation that the message was saved */
|
||||
/* commented out since we can't forward batches yet
|
||||
if (saved_messages == 1)
|
||||
res = play_and_wait(chan, "vm-message");
|
||||
@@ -2689,7 +2739,7 @@ static int play_message_datetime(struct ast_channel *chan, struct ast_vm_user *v
|
||||
t = tin;
|
||||
|
||||
/* Does this user have a timezone specified? */
|
||||
if (strlen(vmu->zonetag)) {
|
||||
if (!ast_strlen_zero(vmu->zonetag)) {
|
||||
/* Find the zone in the list */
|
||||
struct vm_zone *z;
|
||||
z = zones;
|
||||
@@ -2721,6 +2771,8 @@ static int play_message_datetime(struct ast_channel *chan, struct ast_vm_user *v
|
||||
#endif
|
||||
if (the_zone)
|
||||
res = ast_say_date_with_format(chan, t, AST_DIGIT_ANY, chan->language, the_zone->msg_format, the_zone->timezone);
|
||||
else if (!strcasecmp(chan->language,"nl")) /* DUTCH syntax */
|
||||
res = ast_say_date_with_format(chan, t, AST_DIGIT_ANY, chan->language, "'vm-received' q 'digits/nl-om' HM", NULL);
|
||||
else
|
||||
res = ast_say_date_with_format(chan, t, AST_DIGIT_ANY, chan->language, "'vm-received' q 'digits/at' IMp", NULL);
|
||||
#if 0
|
||||
@@ -2747,7 +2799,7 @@ static int play_message_callerid(struct ast_channel *chan, struct vm_state *vms,
|
||||
/* Strip off caller ID number from name */
|
||||
ast_log(LOG_DEBUG, "VM-CID: composite caller ID received: %s, context: %s\n", cid, context);
|
||||
ast_callerid_parse(cid, &name, &callerid);
|
||||
if((callerid != NULL)&&(!res)&&(strlen(callerid))){
|
||||
if((callerid != NULL)&&(!res)&&(!ast_strlen_zero(callerid))){
|
||||
/* Check for internal contexts and only */
|
||||
/* say extension when the call didn't come from an internal context in the list */
|
||||
for(i = 0 ; i < MAX_NUM_CID_CONTEXTS ; i++){
|
||||
@@ -2758,7 +2810,7 @@ static int play_message_callerid(struct ast_channel *chan, struct vm_state *vms,
|
||||
if(i != MAX_NUM_CID_CONTEXTS){ /* internal context? */
|
||||
if(!res) {
|
||||
snprintf(prefile, sizeof(prefile), "voicemail/%s/%s/greet", context, callerid);
|
||||
if (strlen(prefile)) {
|
||||
if (!ast_strlen_zero(prefile)) {
|
||||
/* See if we can find a recorded name for this person instead of their extension number */
|
||||
if (ast_fileexists(prefile, NULL, NULL) > 0) {
|
||||
ast_verbose(VERBOSE_PREFIX_3 "Playing envelope info: CID number '%s' matches mailbox number, playing recorded name\n", callerid);
|
||||
@@ -2805,11 +2857,11 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc
|
||||
make_file(vms->fn, sizeof(vms->fn), vms->curdir, msg);
|
||||
adsi_message(chan, vms->curbox, msg, vms->lastmsg, vms->deleted[msg], vms->fn);
|
||||
if (!msg)
|
||||
res = wait_file2(chan, vms, "vm-first");
|
||||
res = wait_file2(chan, vms, "vm-first"); /* "First" */
|
||||
else if (msg == vms->lastmsg)
|
||||
res = wait_file2(chan, vms, "vm-last");
|
||||
res = wait_file2(chan, vms, "vm-last"); /* "last" */
|
||||
if (!res) {
|
||||
res = wait_file2(chan, vms, "vm-message");
|
||||
res = wait_file2(chan, vms, "vm-message"); /* "message" */
|
||||
if (msg && (msg != vms->lastmsg)) {
|
||||
if (!res)
|
||||
res = ast_say_number(chan, msg + 1, AST_DIGIT_ANY, chan->language, (char *) NULL);
|
||||
@@ -2817,7 +2869,6 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc
|
||||
}
|
||||
|
||||
/* Retrieve info from VM attribute file */
|
||||
|
||||
make_file(vms->fn2, sizeof(vms->fn2), vms->curdir, vms->curmsg);
|
||||
snprintf(filename,sizeof(filename), "%s.txt", vms->fn2);
|
||||
msg_cfg = ast_load(filename);
|
||||
@@ -2898,6 +2949,7 @@ static void close_mailbox(struct vm_state *vms, struct ast_vm_user *vmu)
|
||||
memset(vms->heard, 0, sizeof(vms->heard));
|
||||
}
|
||||
|
||||
/* Default English syntax */
|
||||
static int vm_intro(struct ast_channel *chan,struct vm_state *vms)
|
||||
{
|
||||
/* Introduce messages they have */
|
||||
@@ -2905,7 +2957,7 @@ static int vm_intro(struct ast_channel *chan,struct vm_state *vms)
|
||||
res = play_and_wait(chan, "vm-youhave");
|
||||
if (!res) {
|
||||
if (vms->newmessages) {
|
||||
res = say_and_wait(chan, vms->newmessages);
|
||||
res = say_and_wait(chan, vms->newmessages, chan->language);
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-INBOX");
|
||||
if (vms->oldmessages && !res)
|
||||
@@ -2919,7 +2971,7 @@ static int vm_intro(struct ast_channel *chan,struct vm_state *vms)
|
||||
|
||||
}
|
||||
if (!res && vms->oldmessages) {
|
||||
res = say_and_wait(chan, vms->oldmessages);
|
||||
res = say_and_wait(chan, vms->oldmessages, chan->language);
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-Old");
|
||||
if (!res) {
|
||||
@@ -2940,6 +2992,250 @@ static int vm_intro(struct ast_channel *chan,struct vm_state *vms)
|
||||
return res;
|
||||
}
|
||||
|
||||
/* GERMAN syntax */
|
||||
static int vm_intro_de(struct ast_channel *chan,struct vm_state *vms)
|
||||
{
|
||||
/* Introduce messages they have */
|
||||
int res;
|
||||
res = play_and_wait(chan, "vm-youhave");
|
||||
if (!res) {
|
||||
if (vms->newmessages) {
|
||||
if ((vms->newmessages == 1))
|
||||
res = play_and_wait(chan, "digits/1F");
|
||||
else
|
||||
res = say_and_wait(chan, vms->newmessages, chan->language);
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-INBOX");
|
||||
if (vms->oldmessages && !res)
|
||||
res = play_and_wait(chan, "vm-and");
|
||||
else if (!res) {
|
||||
if ((vms->newmessages == 1))
|
||||
res = play_and_wait(chan, "vm-message");
|
||||
else
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
|
||||
}
|
||||
if (!res && vms->oldmessages) {
|
||||
if (vms->oldmessages == 1)
|
||||
res = play_and_wait(chan, "digits/1F");
|
||||
else
|
||||
res = say_and_wait(chan, vms->oldmessages, chan->language);
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-Old");
|
||||
if (!res) {
|
||||
if (vms->oldmessages == 1)
|
||||
res = play_and_wait(chan, "vm-message");
|
||||
else
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
}
|
||||
if (!res) {
|
||||
if (!vms->oldmessages && !vms->newmessages) {
|
||||
res = play_and_wait(chan, "vm-no");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/* SPANISH syntax */
|
||||
static int vm_intro_es(struct ast_channel *chan,struct vm_state *vms)
|
||||
{
|
||||
/* Introduce messages they have */
|
||||
int res;
|
||||
if (!vms->oldmessages && !vms->newmessages) {
|
||||
res = play_and_wait(chan, "vm-youhaveno");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
} else {
|
||||
res = play_and_wait(chan, "vm-youhave");
|
||||
}
|
||||
if (!res) {
|
||||
if (vms->newmessages) {
|
||||
if (!res) {
|
||||
if ((vms->newmessages == 1)) {
|
||||
res = play_and_wait(chan, "digits/1M");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-message");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-INBOXs");
|
||||
} else {
|
||||
res = say_and_wait(chan, vms->newmessages, chan->language);
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-INBOX");
|
||||
}
|
||||
}
|
||||
if (vms->oldmessages && !res)
|
||||
res = play_and_wait(chan, "vm-and");
|
||||
}
|
||||
if (vms->oldmessages) {
|
||||
if (!res) {
|
||||
if (vms->oldmessages == 1) {
|
||||
res = play_and_wait(chan, "digits/1M");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-message");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-Olds");
|
||||
} else {
|
||||
res = say_and_wait(chan, vms->oldmessages, chan->language);
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-Old");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/* FRENCH syntax */
|
||||
static int vm_intro_fr(struct ast_channel *chan,struct vm_state *vms)
|
||||
{
|
||||
/* Introduce messages they have */
|
||||
int res;
|
||||
res = play_and_wait(chan, "vm-youhave");
|
||||
if (!res) {
|
||||
if (vms->newmessages) {
|
||||
res = say_and_wait(chan, vms->newmessages, chan->language);
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-INBOX");
|
||||
if (vms->oldmessages && !res)
|
||||
res = play_and_wait(chan, "vm-and");
|
||||
else if (!res) {
|
||||
if ((vms->newmessages == 1))
|
||||
res = play_and_wait(chan, "vm-message");
|
||||
else
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
|
||||
}
|
||||
if (!res && vms->oldmessages) {
|
||||
res = say_and_wait(chan, vms->oldmessages, chan->language);
|
||||
if (!res) {
|
||||
if (vms->oldmessages == 1)
|
||||
res = play_and_wait(chan, "vm-message");
|
||||
else
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-Old");
|
||||
}
|
||||
if (!res) {
|
||||
if (!vms->oldmessages && !vms->newmessages) {
|
||||
res = play_and_wait(chan, "vm-no");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/* DUTCH syntax */
|
||||
static int vm_intro_nl(struct ast_channel *chan,struct vm_state *vms)
|
||||
{
|
||||
/* Introduce messages they have */
|
||||
int res;
|
||||
res = play_and_wait(chan, "vm-youhave");
|
||||
if (!res) {
|
||||
if (vms->newmessages) {
|
||||
res = say_and_wait(chan, vms->newmessages, chan->language);
|
||||
if (!res) {
|
||||
if (vms->oldmessages == 1)
|
||||
res = play_and_wait(chan, "vm-INBOXs");
|
||||
else
|
||||
res = play_and_wait(chan, "vm-INBOX");
|
||||
}
|
||||
if (vms->oldmessages && !res)
|
||||
res = play_and_wait(chan, "vm-and");
|
||||
else if (!res) {
|
||||
if ((vms->newmessages == 1))
|
||||
res = play_and_wait(chan, "vm-message");
|
||||
else
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
|
||||
}
|
||||
if (!res && vms->oldmessages) {
|
||||
res = say_and_wait(chan, vms->oldmessages, chan->language);
|
||||
if (!res) {
|
||||
if (vms->oldmessages == 1)
|
||||
res = play_and_wait(chan, "vm-Olds");
|
||||
else
|
||||
res = play_and_wait(chan, "vm-Old");
|
||||
}
|
||||
if (!res) {
|
||||
if (vms->oldmessages == 1)
|
||||
res = play_and_wait(chan, "vm-message");
|
||||
else
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
}
|
||||
if (!res) {
|
||||
if (!vms->oldmessages && !vms->newmessages) {
|
||||
res = play_and_wait(chan, "vm-no");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/* PORTUGUESE syntax */
|
||||
static int vm_intro_pt(struct ast_channel *chan,struct vm_state *vms)
|
||||
{
|
||||
/* Introduce messages they have */
|
||||
int res;
|
||||
res = play_and_wait(chan, "vm-youhave");
|
||||
if (!res) {
|
||||
if (vms->newmessages) {
|
||||
res = ast_say_number(chan, vms->newmessages, AST_DIGIT_ANY, chan->language, "f");
|
||||
if (!res) {
|
||||
if ((vms->newmessages == 1)) {
|
||||
res = play_and_wait(chan, "vm-message");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-INBOXs");
|
||||
} else {
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-INBOX");
|
||||
}
|
||||
}
|
||||
if (vms->oldmessages && !res)
|
||||
res = play_and_wait(chan, "vm-and");
|
||||
}
|
||||
if (!res && vms->oldmessages) {
|
||||
res = ast_say_number(chan, vms->oldmessages, AST_DIGIT_ANY, chan->language, "f");
|
||||
if (!res) {
|
||||
if (vms->oldmessages == 1) {
|
||||
res = play_and_wait(chan, "vm-message");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-Olds");
|
||||
} else {
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-Old");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!res) {
|
||||
if (!vms->oldmessages && !vms->newmessages) {
|
||||
res = play_and_wait(chan, "vm-no");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static int vm_instructions(struct ast_channel *chan, struct vm_state *vms)
|
||||
{
|
||||
int res = 0;
|
||||
@@ -2948,10 +3244,17 @@ static int vm_instructions(struct ast_channel *chan, struct vm_state *vms)
|
||||
if (vms->starting) {
|
||||
if (vms->lastmsg > -1) {
|
||||
res = play_and_wait(chan, "vm-onefor");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, vms->vmbox);
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
if (!strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "fr") || !strcasecmp(chan->language, "pt")) { /* Spanish, French & Portuguese Syntax */
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
if (!res)
|
||||
res = play_and_wait(chan, vms->vmbox);
|
||||
} else { /* Default English syntax */
|
||||
if (!res)
|
||||
res = play_and_wait(chan, vms->vmbox);
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
}
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-opts");
|
||||
@@ -3068,6 +3371,65 @@ static int vm_options(struct ast_channel *chan, struct ast_vm_user *vmu, struct
|
||||
return cmd;
|
||||
}
|
||||
|
||||
/* Default English syntax */
|
||||
static int vm_browse_messages(struct ast_channel *chan, struct vm_state *vms, struct ast_vm_user *vmu, int lastmsg, int curmsg, char *fn, char *curbox)
|
||||
{
|
||||
int cmd=0;
|
||||
|
||||
if (lastmsg > -1) {
|
||||
cmd = play_message(chan, vmu, vms, curmsg);
|
||||
} else {
|
||||
cmd = play_and_wait(chan, "vm-youhave");
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-no");
|
||||
if (!cmd) {
|
||||
snprintf(fn, sizeof(fn) + sizeof(curbox) + 2, "vm-%s", curbox);
|
||||
cmd = play_and_wait(chan, fn);
|
||||
}
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
|
||||
/* SPANISH syntax */
|
||||
static int vm_browse_messages_es(struct ast_channel *chan, struct vm_state *vms, struct ast_vm_user *vmu, int lastmsg, int curmsg, char *fn, char *curbox)
|
||||
{
|
||||
int cmd=0;
|
||||
|
||||
if (lastmsg > -1) {
|
||||
cmd = play_message(chan, vmu, vms, curmsg);
|
||||
} else {
|
||||
cmd = play_and_wait(chan, "vm-youhaveno");
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
if (!cmd) {
|
||||
snprintf(fn, sizeof(fn) + sizeof(curbox) + 2, "vm-%s", curbox);
|
||||
cmd = play_and_wait(chan, fn);
|
||||
}
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
|
||||
/* PORTUGUESE syntax */
|
||||
static int vm_browse_messages_pt(struct ast_channel *chan, struct vm_state *vms, struct ast_vm_user *vmu, int lastmsg, int curmsg, char *fn, char *curbox)
|
||||
{
|
||||
int cmd=0;
|
||||
|
||||
if (lastmsg > -1) {
|
||||
cmd = play_message(chan, vmu, vms, curmsg);
|
||||
} else {
|
||||
cmd = play_and_wait(chan, "vm-no");
|
||||
if (!cmd) {
|
||||
snprintf(fn, sizeof(fn) + sizeof(curbox) + 2, "vm-%s", curbox);
|
||||
cmd = play_and_wait(chan, fn);
|
||||
}
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
|
||||
static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
{
|
||||
/* XXX This is, admittedly, some pretty horrendus code. For some
|
||||
@@ -3099,7 +3461,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
if (chan->_state != AST_STATE_UP)
|
||||
ast_answer(chan);
|
||||
|
||||
if (data && strlen(data)) {
|
||||
if (data && !ast_strlen_zero(data)) {
|
||||
strncpy(tmp, data, sizeof(tmp) - 1);
|
||||
ext = tmp;
|
||||
|
||||
@@ -3126,7 +3488,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
strncpy(prefixstr, ext, sizeof(prefixstr) - 1);
|
||||
else
|
||||
strncpy(vms.username, ext, sizeof(vms.username) - 1);
|
||||
if (strlen(vms.username) && (vmu = find_user(&vmus, context ,vms.username)))
|
||||
if (!ast_strlen_zero(vms.username) && (vmu = find_user(&vmus, context ,vms.username)))
|
||||
skipuser++;
|
||||
else
|
||||
valid = 0;
|
||||
@@ -3150,7 +3512,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
ast_log(LOG_WARNING, "Couldn't read username\n");
|
||||
goto out;
|
||||
}
|
||||
if (!strlen(vms.username)) {
|
||||
if (ast_strlen_zero(vms.username)) {
|
||||
if (option_verbose > 2)
|
||||
ast_verbose(VERBOSE_PREFIX_3 "Username not entered\n");
|
||||
res = 0;
|
||||
@@ -3198,6 +3560,9 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
/* Set language from config to override channel language */
|
||||
if (vmu->language && !ast_strlen_zero(vmu->language))
|
||||
strncpy(chan->language, vmu->language, sizeof(chan->language)-1);
|
||||
snprintf(vms.curdir, sizeof(vms.curdir), "%s/voicemail/%s", (char *)ast_config_AST_SPOOL_DIR, vmu->context);
|
||||
mkdir(vms.curdir, 0700);
|
||||
snprintf(vms.curdir, sizeof(vms.curdir), "%s/voicemail/%s/%s", (char *)ast_config_AST_SPOOL_DIR, vmu->context, vms.username);
|
||||
@@ -3219,7 +3584,20 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
if (useadsi)
|
||||
adsi_status(chan, vms.newmessages, vms.oldmessages, vms.lastmsg);
|
||||
res = 0;
|
||||
cmd = vm_intro(chan, &vms);
|
||||
/* Play voicemail intro - syntax is different for different languages */
|
||||
if (!strcasecmp(chan->language, "de")) { /* GERMAN syntax */
|
||||
cmd = vm_intro_de(chan, &vms);
|
||||
} else if (!strcasecmp(chan->language, "es")) { /* SPANISH syntax */
|
||||
cmd = vm_intro_es(chan, &vms);
|
||||
} else if (!strcasecmp(chan->language, "fr")) { /* FRENCH syntax */
|
||||
cmd = vm_intro_fr(chan, &vms);
|
||||
} else if (!strcasecmp(chan->language, "nl")) { /* DUTCH syntax */
|
||||
cmd = vm_intro_nl(chan, &vms);
|
||||
} else if (!strcasecmp(chan->language, "pt")) { /* PORTUGUESE syntax */
|
||||
cmd = vm_intro_pt(chan, &vms);
|
||||
} else { /* Default to ENGLISH */
|
||||
cmd = vm_intro(chan, &vms);
|
||||
}
|
||||
vms.repeats = 0;
|
||||
vms.starting = 1;
|
||||
while((cmd > -1) && (cmd != 't') && (cmd != '#')) {
|
||||
@@ -3229,18 +3607,12 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
vms.curmsg = 0;
|
||||
/* Fall through */
|
||||
case '5':
|
||||
if (vms.lastmsg > -1) {
|
||||
cmd = play_message(chan, vmu, &vms, vms.curmsg);
|
||||
} else {
|
||||
cmd = play_and_wait(chan, "vm-youhave");
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-no");
|
||||
if (!cmd) {
|
||||
snprintf(vms.fn, sizeof(vms.fn), "vm-%s", vms.curbox);
|
||||
cmd = play_and_wait(chan, vms.fn);
|
||||
}
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
if (!strcasecmp(chan->language, "es")) { /* SPANISH */
|
||||
cmd = vm_browse_messages_es(chan, &vms, vmu, vms.lastmsg, vms.curmsg, vms.fn, vms.curbox);
|
||||
} else if (!strcasecmp(chan->language, "pt")) { /* PORTUGUESE */
|
||||
cmd = vm_browse_messages_pt(chan, &vms, vmu, vms.lastmsg, vms.curmsg, vms.fn, vms.curbox);
|
||||
} else { /* Default to English syntax */
|
||||
cmd = vm_browse_messages(chan, &vms, vmu, vms.lastmsg, vms.curmsg, vms.fn, vms.curbox);
|
||||
}
|
||||
break;
|
||||
case '2': /* Change folders */
|
||||
@@ -3257,10 +3629,17 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
}
|
||||
if (useadsi)
|
||||
adsi_status2(chan, vms.curbox, vms.lastmsg + 1);
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, vms.vmbox);
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
if (!strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "pt")) { /* SPANISH or PORTUGUESE */
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, vms.vmbox);
|
||||
} else { /* Default to English syntax */
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, vms.vmbox);
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
vms.starting = 1;
|
||||
break;
|
||||
case '3': /* Advanced options */
|
||||
@@ -3277,7 +3656,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
break;
|
||||
case '2': /* Callback */
|
||||
ast_verbose( VERBOSE_PREFIX_3 "Callback Requested\n");
|
||||
if (strlen(vmu->callback) && vms.lastmsg > -1) {
|
||||
if (!ast_strlen_zero(vmu->callback) && vms.lastmsg > -1) {
|
||||
cmd = advanced_options(chan, vmu, &vms, vms.curmsg, 2);
|
||||
if (cmd == 9) {
|
||||
silentexit = 1;
|
||||
@@ -3296,7 +3675,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
cmd = 't';
|
||||
break;
|
||||
case '4': /* Dialout */
|
||||
if (strlen(vmu->dialout)) {
|
||||
if (!ast_strlen_zero(vmu->dialout)) {
|
||||
cmd = dialout(chan, vmu, NULL, vmu->dialout);
|
||||
if (cmd == 9) {
|
||||
silentexit = 1;
|
||||
@@ -3317,14 +3696,14 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
if (!vms.starting) {
|
||||
cmd = play_and_wait(chan, "vm-toreply");
|
||||
}
|
||||
if (strlen(vmu->callback) && !vms.starting && !cmd) {
|
||||
if (!ast_strlen_zero(vmu->callback) && !vms.starting && !cmd) {
|
||||
cmd = play_and_wait(chan, "vm-tocallback");
|
||||
}
|
||||
|
||||
if (!cmd && !vms.starting) {
|
||||
cmd = play_and_wait(chan, "vm-tohearenv");
|
||||
}
|
||||
if (strlen(vmu->dialout) && !cmd) {
|
||||
if (!ast_strlen_zero(vmu->dialout) && !cmd) {
|
||||
cmd = play_and_wait(chan, "vm-tomakecall");
|
||||
}
|
||||
if (!cmd)
|
||||
@@ -3397,23 +3776,39 @@ static int vm_execmain(struct ast_channel *chan, void *data)
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-message");
|
||||
if (!cmd)
|
||||
cmd = say_and_wait(chan, vms.curmsg + 1);
|
||||
cmd = say_and_wait(chan, vms.curmsg + 1, chan->language);
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-savedto");
|
||||
if (!cmd) {
|
||||
snprintf(vms.fn, sizeof(vms.fn), "vm-%s", mbox(box));
|
||||
cmd = play_and_wait(chan, vms.fn);
|
||||
if (!strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "pt")) { /* SPANISH or PORTUGUESE */
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
if (!cmd) {
|
||||
snprintf(vms.fn, sizeof(vms.fn), "vm-%s", mbox(box));
|
||||
cmd = play_and_wait(chan, vms.fn);
|
||||
}
|
||||
} else { /* Default to English */
|
||||
if (!cmd) {
|
||||
snprintf(vms.fn, sizeof(vms.fn), "vm-%s", mbox(box));
|
||||
cmd = play_and_wait(chan, vms.fn);
|
||||
}
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
break;
|
||||
case '*':
|
||||
if (!vms.starting) {
|
||||
cmd = play_and_wait(chan, "vm-onefor");
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, vms.vmbox);
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
if (!strcasecmp(chan->language, "es") || !strcasecmp(chan->language, "pt")) { /* Spanish or Portuguese syntax */
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, vms.vmbox);
|
||||
} else {
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, vms.vmbox);
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-messages");
|
||||
}
|
||||
if (!cmd)
|
||||
cmd = play_and_wait(chan, "vm-opts");
|
||||
} else
|
||||
@@ -3475,13 +3870,13 @@ static int vm_exec(struct ast_channel *chan, void *data)
|
||||
LOCAL_USER_ADD(u);
|
||||
if (chan->_state != AST_STATE_UP)
|
||||
ast_answer(chan);
|
||||
if (data && strlen(data))
|
||||
if (data && !ast_strlen_zero(data))
|
||||
strncpy(tmp, data, sizeof(tmp) - 1);
|
||||
else {
|
||||
res = ast_app_getdata(chan, "vm-whichbox", tmp, sizeof(tmp) - 1, 0);
|
||||
if (res < 0)
|
||||
return res;
|
||||
if (!strlen(tmp))
|
||||
if (ast_strlen_zero(tmp))
|
||||
return 0;
|
||||
}
|
||||
ext = tmp;
|
||||
@@ -3836,7 +4231,7 @@ static int load_config(void)
|
||||
ast_log(LOG_DEBUG,"VM_CID Internal context string: %s\n",s);
|
||||
stringp = ast_strdupa(s);
|
||||
for (x = 0 ; x < MAX_NUM_CID_CONTEXTS ; x++){
|
||||
if ((stringp)&&(strlen(stringp))){
|
||||
if ((stringp)&&(!ast_strlen_zero(stringp))){
|
||||
q = strsep(&stringp,",");
|
||||
while ((*q == ' ')||(*q == '\t')) /* Eat white space between contexts */
|
||||
q++;
|
||||
@@ -4130,7 +4525,7 @@ static int dialout(struct ast_channel *chan, struct ast_vm_user *vmu, char *num,
|
||||
strncpy(destination, num, sizeof(destination) -1);
|
||||
}
|
||||
|
||||
if (strlen(destination)) {
|
||||
if (!ast_strlen_zero(destination)) {
|
||||
if (destination[strlen(destination) -1 ] == '*')
|
||||
return 0;
|
||||
ast_verbose( VERBOSE_PREFIX_3 "Placing outgoing call to extension '%s' in context '%s' from context '%s'\n", destination, outgoing_context, chan->context);
|
||||
@@ -4179,7 +4574,7 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s
|
||||
res = play_message_callerid(chan, vms, cid, context, 0);
|
||||
} else if (option == 2) { /* Call back */
|
||||
|
||||
if (strlen(cid)) {
|
||||
if (!ast_strlen_zero(cid)) {
|
||||
ast_callerid_parse(cid, &name, &num);
|
||||
while ((res > -1) && (res != 't')) {
|
||||
switch(res) {
|
||||
@@ -4196,7 +4591,7 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s
|
||||
|
||||
case '2':
|
||||
/* Want to enter a different number, can only do this if there's a dialout context for this user */
|
||||
if (strlen(vmu->dialout)) {
|
||||
if (!ast_strlen_zero(vmu->dialout)) {
|
||||
res = dialout(chan, vmu, NULL, vmu->dialout);
|
||||
if (res)
|
||||
return 9;
|
||||
@@ -4229,13 +4624,13 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-tocallnum");
|
||||
/* Only prompt for a caller-specified number if there is a dialout context specified */
|
||||
if (strlen(vmu->dialout)) {
|
||||
if (!ast_strlen_zero(vmu->dialout)) {
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-calldiffnum");
|
||||
}
|
||||
} else {
|
||||
res = play_and_wait(chan, "vm-nonumber");
|
||||
if (strlen(vmu->dialout)) {
|
||||
if (!ast_strlen_zero(vmu->dialout)) {
|
||||
if (!res)
|
||||
res = play_and_wait(chan, "vm-toenternumber");
|
||||
}
|
||||
@@ -4261,7 +4656,7 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s
|
||||
}
|
||||
else if (option == 1) { /* Reply */
|
||||
/* Send reply directly to sender */
|
||||
if (strlen(cid)) {
|
||||
if (!ast_strlen_zero(cid)) {
|
||||
ast_callerid_parse(cid, &name, &num);
|
||||
if (!num) {
|
||||
ast_verbose(VERBOSE_PREFIX_3 "No CID number available, no reply sent\n");
|
||||
|
Reference in New Issue
Block a user