Merge Vonage changes to VM2, ready to be edited and updated :)
authorMark Spencer <markster@digium.com>
Fri, 16 May 2003 23:52:01 +0000 (23:52 +0000)
committerMark Spencer <markster@digium.com>
Fri, 16 May 2003 23:52:01 +0000 (23:52 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1035 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail2.c
contrib/scripts/vmdb.sql
vmdb.sql

index 911763e..06ba301 100755 (executable)
@@ -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;
index be70f32..dbef173 100755 (executable)
@@ -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));
index be70f32..dbef173 100755 (executable)
--- 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));