Merge Vonage changes to VM2, ready to be edited and updated :)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1035 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Spencer 2003-05-16 23:52:01 +00:00
parent 1dbd21dc61
commit a4f55d7fd7
3 changed files with 56 additions and 12 deletions

View File

@ -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;

View File

@ -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));

View File

@ -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));