aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-05-16 23:52:01 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-05-16 23:52:01 +0000
commitfbcbc91c245d3fc42c6c19072524ead53baf40f4 (patch)
tree5197be88622162ba805a4b9c6c8abc4eda6ada42
parente88668993469a912c34a4303b82757251b4b9722 (diff)
Merge Vonage changes to VM2, ready to be edited and updated :)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1035 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xapps/app_voicemail2.c62
-rwxr-xr-xcontrib/scripts/vmdb.sql3
-rwxr-xr-xvmdb.sql3
3 files changed, 56 insertions, 12 deletions
diff --git a/apps/app_voicemail2.c b/apps/app_voicemail2.c
index 911763e1d..06ba301c5 100755
--- a/apps/app_voicemail2.c
+++ b/apps/app_voicemail2.c
@@ -83,6 +83,7 @@ struct ast_vm_user {
char fullname[80];
char email[80];
char pager[80];
+ char options[160];
int alloced;
struct ast_vm_user *next;
};
@@ -187,6 +188,7 @@ static struct ast_vm_user *find_user(struct ast_vm_user *ivm, char *context, cha
*retval->fullname='\0';
*retval->email='\0';
*retval->pager='\0';
+ *retval->options='\0';
retval->alloced=1;
retval->next=NULL;
if (mailbox) {
@@ -197,9 +199,9 @@ static struct ast_vm_user *find_user(struct ast_vm_user *ivm, char *context, cha
}
if (*retval->context) {
- sprintf(query, "SELECT password,fullname,email,pager FROM users WHERE context='%s' AND mailbox='%s'", context, mailbox);
+ sprintf(query, "SELECT password,fullname,email,pager,options FROM users WHERE context='%s' AND mailbox='%s'", context, mailbox);
} else {
- sprintf(query, "SELECT password,fullname,email,pager FROM users WHERE mailbox='%s'", mailbox);
+ sprintf(query, "SELECT password,fullname,email,pager,options FROM users WHERE mailbox='%s'", mailbox);
}
pthread_mutex_lock(&mysqllock);
mysql_query(dbhandler, query);
@@ -217,6 +219,8 @@ static struct ast_vm_user *find_user(struct ast_vm_user *ivm, char *context, cha
strcpy(retval->email, rowval[i]);
} else if (!strcmp(fields[i].name, "pager")) {
strcpy(retval->pager, rowval[i]);
+ } else if (!strcmp(fields[i].name, "options")) {
+ strcpy(retval->options, rowval[i]);
}
}
}
@@ -528,7 +532,31 @@ static int base_encode(char *filename, FILE *so)
return 1;
}
-static int sendmail(char *srcemail, char *email, char *name, int msgnum, char *mailbox, char *callerid, char *attach, char *format, long duration)
+static int getoptionvalue(char *options, char *optionname, char *value)
+{
+ char *c, *d;
+
+ if (!(c=strstr(options, optionname))) {
+ return 0;
+ }
+ if (c!=options && *(c-1)!='|') {
+ return 0;
+ }
+ if (*(c+strlen(optionname))!='=') {
+ return 0;
+ }
+
+ c+=strlen(optionname)+1;
+ if ((d=strchr(c, '|'))) {
+ strncpy(value, c, d-c);
+ *(value+(d-c))='\0';
+ } else {
+ strcpy(value, c);
+ }
+ return(1);
+}
+
+static int sendmail(char *srcemail, char *email, char *name, int msgnum, char *mailbox, char *callerid, char *attach, char *format, long duration, int attach_user_voicemail)
{
FILE *p;
char date[256];
@@ -559,7 +587,7 @@ static int sendmail(char *srcemail, char *email, char *name, int msgnum, char *m
fprintf(p, "Subject: [PBX]: New message %d in mailbox %s\n", msgnum, mailbox);
fprintf(p, "Message-ID: <Asterisk-%d-%s-%d@%s>\n", msgnum, mailbox, getpid(), host);
fprintf(p, "MIME-Version: 1.0\n");
- if (attach_voicemail) {
+ if ((attach_user_voicemail==-1 && attach_voicemail) || attach_user_voicemail==1) {
// Something unique.
snprintf(bound, sizeof(bound), "Boundary=%d%s%d", msgnum, mailbox, getpid());
@@ -574,7 +602,7 @@ static int sendmail(char *srcemail, char *email, char *name, int msgnum, char *m
"in mailbox %s from %s, on %s so you might\n"
"want to check it when you get a chance. Thanks!\n\n\t\t\t\t--Asterisk\n\n", name,
dur, msgnum, mailbox, (callerid ? callerid : "an unknown caller"), date);
- if (attach_voicemail) {
+ if ((attach_user_voicemail==-1 && attach_voicemail) || attach_user_voicemail==1) {
fprintf(p, "--%s\n", bound);
fprintf(p, "Content-Type: audio/x-wav; name=\"msg%04d.%s\"\n", msgnum, format);
fprintf(p, "Content-Transfer-Encoding: BASE64\n");
@@ -1021,8 +1049,14 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
stringp = fmt;
strsep(&stringp, "|");
/* Send e-mail if applicable */
- if (strlen(vmu->email))
- sendmail(serveremail, vmu->email, vmu->fullname, msgnum, ext, chan->callerid, fn, fmt, end - start);
+ if (strlen(vmu->email)) {
+ int attach_user_voicemail=-1;
+ char tmpvalue[160];
+ if (getoptionvalue(vmu->options, "attach", tmpvalue)) {
+ attach_user_voicemail=ast_true(tmpvalue);
+ }
+ sendmail(serveremail, vmu->email, vmu->fullname, msgnum, ext, chan->callerid, fn, fmt, end - start, attach_user_voicemail);
+ }
if (strlen(vmu->pager))
sendpage(serveremail, vmu->pager, msgnum, ext, chan->callerid, end - start);
} else
@@ -1706,9 +1740,15 @@ forward_message(struct ast_channel *chan, char *context, char *dir, int curmsg,
snprintf(callerid, sizeof(callerid), "FWD from: %s from %s", sender->fullname, ast_variable_retrieve(mif, NULL, "callerid"));
duration = atol(ast_variable_retrieve(mif, NULL, "duration"));
- if (strlen(receiver->email))
- sendmail(serveremail, receiver->email, receiver->fullname, todircount, username, callerid, fn, tmp, atol(ast_variable_retrieve(mif, NULL, "duration")));
-
+ if (strlen(receiver->email)) {
+ int attach_user_voicemail=-1;
+ char tmpvalue[160];
+ if (getoptionvalue(receiver->options, "attach", tmpvalue)) {
+ attach_user_voicemail=ast_true(tmpvalue);
+ }
+ sendmail(serveremail, receiver->email, receiver->fullname, todircount, username, callerid, fn, tmp, atol(ast_variable_retrieve(mif, NULL, "duration")), attach_user_voicemail);
+ }
+
if (strlen(receiver->pager))
sendpage(serveremail, receiver->pager, todircount, username, callerid, duration);
@@ -2353,6 +2393,8 @@ static int append_mailbox(char *context, char *mbox, char *data)
strncpy(vmu->email, s, sizeof(vmu->email));
if ((s = strsep(&stringp, ",")))
strncpy(vmu->pager, s, sizeof(vmu->pager));
+ if ((s = strsep(&stringp, ",")))
+ strncpy(vmu->options, s, sizeof(vmu->options));
vmu->next = NULL;
if (usersl)
usersl->next = vmu;
diff --git a/contrib/scripts/vmdb.sql b/contrib/scripts/vmdb.sql
index be70f323d..dbef17316 100755
--- a/contrib/scripts/vmdb.sql
+++ b/contrib/scripts/vmdb.sql
@@ -1 +1,2 @@
-create table users (mailbox VARCHAR(80) NOT NULL PRIMARY KEY, context VARCHAR(80), password VARCHAR(80), fullname VARCHAR(80), email VARCHAR(80), pager VARCHAR(80));
+drop table if exists users;
+create table users (mailbox VARCHAR(80) NOT NULL PRIMARY KEY, context VARCHAR(80), password VARCHAR(80), fullname VARCHAR(80), email VARCHAR(80), pager VARCHAR(80), options VARCHAR(160));
diff --git a/vmdb.sql b/vmdb.sql
index be70f323d..dbef17316 100755
--- a/vmdb.sql
+++ b/vmdb.sql
@@ -1 +1,2 @@
-create table users (mailbox VARCHAR(80) NOT NULL PRIMARY KEY, context VARCHAR(80), password VARCHAR(80), fullname VARCHAR(80), email VARCHAR(80), pager VARCHAR(80));
+drop table if exists users;
+create table users (mailbox VARCHAR(80) NOT NULL PRIMARY KEY, context VARCHAR(80), password VARCHAR(80), fullname VARCHAR(80), email VARCHAR(80), pager VARCHAR(80), options VARCHAR(160));