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:
parent
1dbd21dc61
commit
a4f55d7fd7
|
@ -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,8 +1740,14 @@ 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;
|
||||
|
|
|
@ -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));
|
||||
|
|
3
vmdb.sql
3
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));
|
||||
|
|
Loading…
Reference in New Issue