Use flags for voicemail (bug #3130)
[asterisk/asterisk.git] / apps / app_voicemail.c
index 595551b..8ab0cf2 100755 (executable)
 #define MAX_DATETIME_FORMAT    512
 #define MAX_NUM_CID_CONTEXTS 10
 
+#define VM_REVIEW              (1 << 0)
+#define VM_OPERATOR            (1 << 1)
+#define VM_SAYCID              (1 << 2)
+#define VM_SVMAIL              (1 << 3)
+#define VM_ENVELOPE            (1 << 4)
+#define VM_SAYDURATION         (1 << 5)
+#define VM_SKIPAFTERCMD        (1 << 6)
+#define VM_FORCENAME           (1 << 7)        /* Have new users record their name */
+#define VM_FORCEGREET          (1 << 8)        /* Have new users record their greetings */
+#define VM_PBXSKIP             (1 << 9)
+#define VM_DIRECFORWARD        (1 << 10)       /* directory_forward */
+#define VM_ATTACH              (1 << 11)
+#define VM_DELETE              (1 << 12)
+#define VM_ALLOCED             (1 << 13)
+
 static int load_config(void);
 
 /* Syntaxes supported, not really language codes.
@@ -142,17 +157,7 @@ struct ast_vm_user {
        char dialout[80];
        char uniqueid[20];              /* Unique integer identifier */
        char exit[80];
-       int attach;
-       int delete;
-       int alloced;
-       int saycid;
-       int svmail;
-       int review;
-       int operator;
-       int envelope;
-       int forcename;
-       int forcegreetings;
-       int sayduration;
+       int flags;                      /* VM_ flags */ 
        int saydurationm;
        struct ast_vm_user *next;
 };
@@ -279,7 +284,6 @@ struct ast_vm_user *users;
 struct ast_vm_user *usersl;
 struct vm_zone *zones = NULL;
 struct vm_zone *zonesl = NULL;
-static int attach_voicemail;
 static int maxsilence;
 static int silencethreshold = 128;
 static char serveremail[80];
@@ -293,16 +297,10 @@ static int maxgreet;
 static int skipms;
 static int maxlogins;
 
-static int reviewvm;
-static int calloper;
-static int saycidinfo;
-static int svmailinfo;
-static int hearenv;
-static int saydurationinfo;
+static struct ast_flags globalflags = {0};
+
 static int saydurationminfo;
-static int skipaftercmd;
-static int forcenm;
-static int forcegrt;
+
 static char dialcontext[80];
 static char callcontext[80];
 static char exitcontext[80];
@@ -311,14 +309,12 @@ static char cidinternalcontexts[MAX_NUM_CID_CONTEXTS][64];
 
 
 static char *emailbody = NULL;
-static int pbxskip = 0;
 static char *emailsubject = NULL;
 static char fromstring[100];
 static char pagerfromstring[100];
 static char emailtitle[100];
 static char charset[32] = "ISO-8859-1";
 
-static int directory_forward;
 static char adsifdn[4] = "\x00\x00\x00\x0F";
 static char adsisec[4] = "\x9B\xDB\xF7\xAC";
 static int adsiver = 1;
@@ -329,25 +325,9 @@ LOCAL_USER_DECL;
 
 static void populate_defaults(struct ast_vm_user *vmu)
 {
-       vmu->attach = -1;
-       if (reviewvm)
-               vmu->review = 1;
-       if (calloper)
-               vmu->operator = 1;
-       if (saycidinfo)
-               vmu->saycid = 1;
-       if (svmailinfo)
-               vmu->svmail = 1; 
-       if (hearenv)
-               vmu->envelope = 1;
-       if (saydurationinfo)
-               vmu->sayduration = 1;
+       ast_copy_flags(vmu, (&globalflags), VM_ATTACH|VM_REVIEW|VM_OPERATOR|VM_SAYCID|VM_SVMAIL|VM_SAYDURATION|VM_FORCENAME|VM_FORCEGREET);     
        if (saydurationminfo>0)
                vmu->saydurationm = saydurationminfo;
-       if (forcenm)
-               vmu->forcename = 1;
-       if (forcegrt)
-               vmu->forcegreetings = 1;
        if (callcontext)
                strncpy(vmu->callback, callcontext, sizeof(vmu->callback) -1);
        if (dialcontext)
@@ -360,10 +340,7 @@ static void apply_option(struct ast_vm_user *vmu, const char *var, const char *v
 {
        int x;
        if (!strcasecmp(var, "attach")) {
-               if (ast_true(value))
-                       vmu->attach = 1;
-               else
-                       vmu->attach = 0;
+               ast_set2_flag(vmu, ast_true(value), VM_ATTACH); 
        } else if (!strcasecmp(var, "serveremail")) {
                strncpy(vmu->serveremail, value, sizeof(vmu->serveremail) - 1);
        } else if (!strcasecmp(var, "language")) {
@@ -371,37 +348,19 @@ static void apply_option(struct ast_vm_user *vmu, const char *var, const char *v
        } else if (!strcasecmp(var, "tz")) {
                strncpy(vmu->zonetag, value, sizeof(vmu->zonetag) - 1);
        } else if (!strcasecmp(var, "delete")) {
-               vmu->delete = ast_true(value);
+               ast_set2_flag(vmu, ast_true(value), VM_DELETE); 
        } else if (!strcasecmp(var, "saycid")){
-               if (ast_true(value))
-                       vmu->saycid = 1;
-               else
-                       vmu->saycid = 0;
+               ast_set2_flag(vmu, ast_true(value), VM_SAYCID); 
        } else if (!strcasecmp(var,"sendvoicemail")){
-               if (ast_true(value))
-                       vmu->svmail =1;
-               else
-                       vmu->svmail =0;
+               ast_set2_flag(vmu, ast_true(value), VM_SVMAIL); 
        } else if (!strcasecmp(var, "review")){
-               if (ast_true(value))
-                       vmu->review = 1;
-               else
-                       vmu->review = 0;
+               ast_set2_flag(vmu, ast_true(value), VM_REVIEW); 
        } else if (!strcasecmp(var, "operator")){
-               if (ast_true(value))
-                       vmu->operator = 1;
-               else
-                       vmu->operator = 0;
+               ast_set2_flag(vmu, ast_true(value), VM_OPERATOR);       
        } else if (!strcasecmp(var, "envelope")){
-               if (ast_true(value))
-                       vmu->envelope = 1;
-               else
-                       vmu->envelope = 0;
+               ast_set2_flag(vmu, ast_true(value), VM_ENVELOPE);       
        } else if (!strcasecmp(var, "sayduration")){
-               if(ast_true(value))
-                       vmu->sayduration = 1;
-               else
-                       vmu->sayduration = 0;
+               ast_set2_flag(vmu, ast_true(value), VM_SAYDURATION);    
        } else if (!strcasecmp(var, "saydurationm")){
                if (sscanf(value, "%d", &x) == 1) {
                        vmu->saydurationm = x;
@@ -409,15 +368,9 @@ static void apply_option(struct ast_vm_user *vmu, const char *var, const char *v
                        ast_log(LOG_WARNING, "Invalid min duration for say duration\n");
                }
        } else if (!strcasecmp(var, "forcename")){
-               if (ast_true(value))
-                       vmu->forcename = 1;
-               else
-                       vmu->forcename = 0;
+               ast_set2_flag(vmu, ast_true(value), VM_FORCENAME);      
        } else if (!strcasecmp(var, "forcegreetings")){
-               if (ast_true(value))
-                       vmu->forcegreetings = 1;
-               else
-                       vmu->forcegreetings = 0;
+               ast_set2_flag(vmu, ast_true(value), VM_FORCEGREET);     
        } else if (!strcasecmp(var, "callback")) {
                strncpy(vmu->callback, value, sizeof(vmu->callback) -1);
        } else if (!strcasecmp(var, "dialout")) {
@@ -466,7 +419,7 @@ static struct ast_vm_user *find_user_realtime(struct ast_vm_user *ivm, const cha
        if (retval) {
                memset(retval, 0, sizeof(struct ast_vm_user));
                if (!ivm)
-                       retval->alloced=1;
+                       ast_set_flag(retval, VM_ALLOCED);       
                if (mailbox) 
                        strncpy(retval->mailbox, mailbox, sizeof(retval->mailbox) - 1);
                if (context) 
@@ -522,10 +475,7 @@ static struct ast_vm_user *find_user(struct ast_vm_user *ivm, const char *contex
                        vmu = malloc(sizeof(struct ast_vm_user));
                if (vmu) {
                        memcpy(vmu, cur, sizeof(struct ast_vm_user));
-                       if (ivm)
-                               vmu->alloced = 0;
-                       else
-                               vmu->alloced = 1;
+                       ast_set2_flag(vmu, ivm, VM_ALLOCED);    
                        vmu->next = NULL;
                }
        } else
@@ -1580,7 +1530,7 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *m
        }
        if (!strcmp(format, "wav49"))
                format = "WAV";
-       ast_log(LOG_DEBUG, "Attaching file '%s', format '%s', uservm is '%d', global is %d\n", attach, format, attach_user_voicemail, attach_voicemail);
+       ast_log(LOG_DEBUG, "Attaching file '%s', format '%s', uservm is '%d', global is %d\n", attach, format, attach_user_voicemail, ast_test_flag((&globalflags), VM_ATTACH));
        /* Make a temporary file instead of piping directly to sendmail, in case the mail
           command hangs */
        pfd = mkstemp(tmp);
@@ -1656,7 +1606,7 @@ static int sendmail(char *srcemail, struct ast_vm_user *vmu, int msgnum, char *m
                if (*emailtitle) {
                        fprintf(p, emailtitle, msgnum + 1, mailbox) ;
                        fprintf(p,"\n") ;
-               } else if (pbxskip)
+               } else if (ast_test_flag((&globalflags), VM_PBXSKIP))
                        fprintf(p, "Subject: New message %d in mailbox %s\n", msgnum + 1, mailbox);
                else
                        fprintf(p, "Subject: [PBX]: New message %d in mailbox %s\n", msgnum + 1, mailbox);
@@ -1852,7 +1802,7 @@ static int invent_message(struct ast_channel *chan, char *context, char *ext, in
 
 static void free_user(struct ast_vm_user *vmu)
 {
-       if (vmu->alloced)
+       if (ast_test_flag(vmu, VM_ALLOCED))
                free(vmu);
 }
 
@@ -2087,7 +2037,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int
                /* Check for a '0' here */
                if (res == '0') {
                        transfer:
-                       if (vmu->operator) {
+                       if (ast_test_flag(vmu, VM_OPERATOR)) {
                                strncpy(chan->exten, "o", sizeof(chan->exten) - 1);
                                if (!ast_strlen_zero(vmu->exit)) {
                                        strncpy(chan->context, vmu->exit, sizeof(chan->context) - 1);
@@ -2860,10 +2810,9 @@ static int notify_new_message(struct ast_channel *chan, struct ast_vm_user *vmu,
                strsep(&stringp, "|");
 
                if (!ast_strlen_zero(vmu->email)) {
-                       int attach_user_voicemail = attach_voicemail;
+                       int attach_user_voicemail = ast_test_flag((&globalflags), VM_ATTACH);
                        char *myserveremail = serveremail;
-                       if (vmu->attach > -1)
-                               attach_user_voicemail = vmu->attach;
+                       attach_user_voicemail = ast_test_flag(vmu, VM_ATTACH);
                        if (!ast_strlen_zero(vmu->serveremail))
                                myserveremail = vmu->serveremail;
                        sendmail(myserveremail, vmu, msgnum, vmu->mailbox, cidnum, cidname, fn, fmt, duration, attach_user_voicemail);
@@ -2879,7 +2828,7 @@ static int notify_new_message(struct ast_channel *chan, struct ast_vm_user *vmu,
                ast_log(LOG_ERROR, "Out of memory\n");
        }
 
-       if (vmu->delete) {
+       if (ast_test_flag(vmu, VM_DELETE)) {
                DELETE(todir, msgnum, fn);
        }
 
@@ -2914,7 +2863,7 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
        while (!res && !valid_extensions) {
                
                int use_directory = 0;
-               if( directory_forward ) {
+               if(ast_test_flag((&globalflags), VM_DIRECFORWARD)) {
                        int done = 0;
                        int retries = 0;
                        cmd=0;
@@ -2981,7 +2930,7 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
                                
                        } else {
                                ast_log(LOG_WARNING, "Could not find the Directory application, disabling directory_forward\n");
-                               directory_forward = 0;
+                               ast_clear_flag((&globalflags), VM_DIRECFORWARD);        
                        }
                } else  {
                        /* Ask for an extension */
@@ -3070,10 +3019,9 @@ static int forward_message(struct ast_channel *chan, char *context, char *dir, i
                                        else
                                                duration = 0;
                                        if (!ast_strlen_zero(vmtmp->email)) {
-                                               int attach_user_voicemail = attach_voicemail;
+                                               int attach_user_voicemail = ast_test_flag((&globalflags), VM_ATTACH);
                                                char *myserveremail = serveremail;
-                                               if (vmtmp->attach > -1)
-                                                       attach_user_voicemail = vmtmp->attach;
+                                               attach_user_voicemail = ast_test_flag(vmtmp, VM_ATTACH);
                                                if (!ast_strlen_zero(vmtmp->serveremail))
                                                        myserveremail = vmtmp->serveremail;
                                                sendmail(myserveremail, vmtmp, todircount, vmtmp->mailbox, chan->cid.cid_num, chan->cid.cid_name, fn, tmp, duration, attach_user_voicemail);
@@ -3334,11 +3282,11 @@ static int play_message(struct ast_channel *chan, struct ast_vm_user *vmu, struc
 
        if (!res)
                res = play_message_category(chan, category);
-       if ((!res)&&(vmu->envelope))
+       if ((!res) && (ast_test_flag(vmu, VM_ENVELOPE)))
                res = play_message_datetime(chan, vmu, origtime, filename);
-       if ((!res)&&(vmu->saycid))
+       if ((!res) && (ast_test_flag(vmu, VM_SAYCID)))
                res = play_message_callerid(chan, vms, cid, context, 0);
-        if ((!res)&&(vmu->sayduration))
+        if ((!res) && (ast_test_flag(vmu, VM_SAYDURATION)))
                 res = play_message_duration(chan, vms, duration, vmu->saydurationm);
        /* Allow pressing '1' to skip envelope / callerid */
        if (res == '1')
@@ -4015,7 +3963,7 @@ static int vm_newuser(struct ast_channel *chan, struct ast_vm_user *vmu, struct
        cmd = ast_play_and_wait(chan,"vm-passchanged");
 
        /* If forcename is set, have the user record their name */      
-       if (vmu->forcename) {
+       if (ast_test_flag(vmu, VM_FORCENAME)) {
                snprintf(prefile,sizeof(prefile),"voicemail/%s/%s/greet",vmu->context, vms->username);
                cmd = play_record_review(chan,"vm-rec-name",prefile, maxgreet, fmtc, 0, vmu, &duration);
                if (cmd < 0 || cmd == 't' || cmd == '#')
@@ -4023,7 +3971,7 @@ static int vm_newuser(struct ast_channel *chan, struct ast_vm_user *vmu, struct
        }
 
        /* If forcegreetings is set, have the user record their greetings */
-       if (vmu->forcegreetings) {
+       if (ast_test_flag(vmu, VM_FORCEGREET)) {
                snprintf(prefile,sizeof(prefile),"voicemail/%s/%s/unavail",vmu->context, vms->username);
                cmd = play_record_review(chan,"vm-rec-unv",prefile, maxgreet, fmtc, 0, vmu, &duration);
                if (cmd < 0 || cmd == 't' || cmd == '#')
@@ -4510,7 +4458,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
 
                /* Check to see if this is a new user */
                if (!strcasecmp(vmu->mailbox, vmu->password) && 
-                       (vmu->forcename || vmu->forcegreetings)) {
+                       (ast_test_flag(vmu, VM_FORCENAME | VM_FORCEGREET))) {
                        if (ast_play_and_wait(chan, "vm-newuser") == -1)
                                ast_log(LOG_WARNING, "Couldn't stream new user file\n");
                        cmd = vm_newuser(chan, vmu, &vms, vmfmts);
@@ -4604,7 +4552,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
                                                break;
 
                                        case '5': /* Leave VoiceMail */
-                                               if (vmu->svmail)
+                                               if (ast_test_flag(vmu, VM_SVMAIL))
                                                        cmd = forward_message(chan, context, vms.curdir, vms.curmsg, vmu, vmfmts,1);
                                                else
                                                        cmd = ast_play_and_wait(chan,"vm-sorry");
@@ -4630,7 +4578,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
                                                if (!ast_strlen_zero(vmu->dialout) && !cmd) {
                                                        cmd = ast_play_and_wait(chan, "vm-tomakecall");
                                                }
-                                               if (vmu->svmail&&!cmd)
+                                               if (ast_test_flag(vmu, VM_SVMAIL) && !cmd)
                                                        cmd=ast_play_and_wait(chan, "vm-leavemsg");
                                                if (!cmd)
                                                        cmd = ast_play_and_wait(chan, "vm-starmain");
@@ -4676,7 +4624,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
                                        cmd = ast_play_and_wait(chan, "vm-deleted");
                                else
                                        cmd = ast_play_and_wait(chan, "vm-undeleted");
-                               if (skipaftercmd) {
+                               if (ast_test_flag((&globalflags), VM_SKIPAFTERCMD)) {
                                        if (vms.curmsg < vms.lastmsg) {
                                                vms.curmsg++;
                                                cmd = play_message(chan, vmu, &vms);
@@ -4717,7 +4665,7 @@ static int vm_execmain(struct ast_channel *chan, void *data)
                                snprintf(vms.fn, sizeof(vms.fn), "vm-%s", mbox(box));
                                if (!cmd)
                                        cmd = vm_play_folder_name(chan, vms.fn);
-                               if (skipaftercmd) {
+                               if (ast_test_flag((&globalflags), VM_SKIPAFTERCMD)) {
                                        if (vms.curmsg < vms.lastmsg) {
                                                vms.curmsg++;
                                                cmd = play_message(chan, vmu, &vms);
@@ -5081,7 +5029,7 @@ static int load_config(void)
        while (cur) {
                l = cur;
                cur = cur->next;
-               l->alloced = 1;
+               ast_set_flag(l, VM_ALLOCED);    
                free_user(l);
        }
        zcur = zones;
@@ -5099,10 +5047,9 @@ static int load_config(void)
                /* General settings */
 
                /* Attach voice message to mail message ? */
-               attach_voicemail = 1;
                if (!(astattach = ast_variable_retrieve(cfg, "general", "attach"))) 
                        astattach = "yes";
-               attach_voicemail = ast_true(astattach);
+               ast_set2_flag((&globalflags), ast_true(astattach), VM_ATTACH);  
 
 #ifdef USE_ODBC_STORAGE
                strncpy(odbc_database, "asterisk", sizeof(odbc_database) - 1);
@@ -5196,16 +5143,14 @@ static int load_config(void)
                }
 
                /* Force new user to record name ? */
-               forcenm = 0;
                if (!(astattach = ast_variable_retrieve(cfg, "general", "forcename"))) 
                        astattach = "no";
-               forcenm = ast_true(astattach);
+               ast_set2_flag((&globalflags), ast_true(astattach), VM_FORCENAME);
 
                /* Force new user to record greetings ? */
-               forcegrt = 0;
                if (!(astattach = ast_variable_retrieve(cfg, "general", "forcegreetings"))) 
                        astattach = "no";
-               forcegrt = ast_true(astattach);
+               ast_set2_flag((&globalflags), ast_true(astattach), VM_FORCEGREET);
 
                if ((s = ast_variable_retrieve(cfg, "general", "cidinternalcontexts"))){
                        ast_log(LOG_DEBUG,"VM_CID Internal context string: %s\n",s);
@@ -5222,47 +5167,41 @@ static int load_config(void)
                                }
                        }
                }
-               reviewvm = 0;
                if (!(astreview = ast_variable_retrieve(cfg, "general", "review"))){
                        ast_log(LOG_DEBUG,"VM Review Option disabled globally\n");
                        astreview = "no";
                }
-               reviewvm = ast_true(astreview);
+               ast_set2_flag((&globalflags), ast_true(astreview), VM_REVIEW);  
 
-               calloper = 0;
                if (!(astcallop = ast_variable_retrieve(cfg, "general", "operator"))){
                        ast_log(LOG_DEBUG,"VM Operator break disabled globally\n");
                        astcallop = "no";
                }
-               calloper = ast_true(astcallop);
+               ast_set2_flag((&globalflags), ast_true(astcallop), VM_OPERATOR);        
 
-               saycidinfo = 0;
                if (!(astsaycid = ast_variable_retrieve(cfg, "general", "saycid"))) {
                        ast_log(LOG_DEBUG,"VM CID Info before msg disabled globally\n");
                        astsaycid = "no";
                } 
-               saycidinfo = ast_true(astsaycid);
+               ast_set2_flag((&globalflags), ast_true(astsaycid), VM_SAYCID);  
 
-               svmailinfo =0;
                if (!(send_voicemail = ast_variable_retrieve(cfg,"general", "sendvoicemail"))){
                        ast_log(LOG_DEBUG,"Send Voicemail msg disabled globally\n");
                        send_voicemail = "no";
                }
-               svmailinfo=ast_true(send_voicemail);
+               ast_set2_flag((&globalflags), ast_true(send_voicemail), VM_SVMAIL);
        
-               hearenv = 1;
                if (!(asthearenv = ast_variable_retrieve(cfg, "general", "envelope"))) {
                        ast_log(LOG_DEBUG,"ENVELOPE before msg enabled globally\n");
                        asthearenv = "yes";
                }
-               hearenv = ast_true(asthearenv); 
+               ast_set2_flag((&globalflags), ast_true(asthearenv), VM_ENVELOPE);       
 
-               saydurationinfo = 0;
                if (!(astsaydurationinfo = ast_variable_retrieve(cfg, "general", "sayduration"))) {
                        ast_log(LOG_DEBUG,"Duration info before msg enabled globally\n");
                        astsaydurationinfo = "yes";
                }
-               saydurationinfo = ast_true(astsaydurationinfo); 
+               ast_set2_flag((&globalflags), ast_true(astsaydurationinfo), VM_SAYDURATION);    
 
                saydurationminfo = 2;
                if ((astsaydurationminfo = ast_variable_retrieve(cfg, "general", "saydurationm"))) {
@@ -5273,12 +5212,11 @@ static int load_config(void)
                        }
                }
 
-               skipaftercmd = 0;
                if (!(astskipcmd = ast_variable_retrieve(cfg, "general", "nextaftercmd"))) {
                        ast_log(LOG_DEBUG,"We are not going to skip to the next msg after save/delete\n");
                        astskipcmd = "no";
                }
-               skipaftercmd = ast_true(astskipcmd);
+               ast_set2_flag((&globalflags), ast_true(astskipcmd), VM_SKIPAFTERCMD);
 
                if ((dialoutcxt = ast_variable_retrieve(cfg, "general", "dialout"))) {
                        strncpy(dialcontext, dialoutcxt, sizeof(dialcontext) - 1);
@@ -5301,10 +5239,9 @@ static int load_config(void)
                        exitcontext[0] = '\0';
                }
 
-               directory_forward = 0;
                if (!(astdirfwd = ast_variable_retrieve(cfg, "general", "usedirectory"))) 
                        astdirfwd = "no";
-               directory_forward = ast_true(astdirfwd);
+               ast_set2_flag((&globalflags), ast_true(astdirfwd), VM_DIRECFORWARD);    
 
                cat = ast_category_browse(cfg, NULL);
                while (cat) {
@@ -5370,7 +5307,7 @@ static int load_config(void)
                        emailsubject = NULL;
                }
                if ((s=ast_variable_retrieve(cfg, "general", "pbxskip")))
-                       pbxskip = ast_true(s);
+                       ast_set2_flag((&globalflags), ast_true(s), VM_PBXSKIP);
                if ((s=ast_variable_retrieve(cfg, "general", "fromstring")))
                        strncpy(fromstring,s,sizeof(fromstring)-1);
                if ((s=ast_variable_retrieve(cfg, "general", "pagerfromstring")))
@@ -5814,7 +5751,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
                        /* If the caller is an ouside caller, and the review option is enabled,
                           allow them to review the message, but let the owner of the box review
                           their OGM's */
-                       if (outsidecaller && !vmu->review)
+                       if (outsidecaller && !ast_test_flag(vmu, VM_REVIEW))
                                return cmd;
                        if (message_exists) {
                                cmd = ast_play_and_wait(chan, "vm-review");
@@ -5825,7 +5762,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
                                        cmd = ast_waitfordigit(chan, 600);
                        }
                        
-                       if (!cmd && outsidecaller && vmu->operator) {
+                       if (!cmd && outsidecaller && ast_test_flag(vmu, VM_OPERATOR)) {
                                cmd = ast_play_and_wait(chan, "vm-reachoper");
                                if (!cmd)
                                        cmd = ast_waitfordigit(chan, 600);