[Asterisk-cvs] asterisk/apps app_voicemail.c,1.137,1.138

markster at lists.digium.com markster at lists.digium.com
Mon Aug 16 00:19:37 CDT 2004


Update of /usr/cvsroot/asterisk/apps
In directory localhost.localdomain:/tmp/cvs-serv1670/apps

Modified Files:
	app_voicemail.c 
Log Message:
Merge MOG's first serious patch (new message patch) (bug #2071)


Index: app_voicemail.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_voicemail.c,v
retrieving revision 1.137
retrieving revision 1.138
diff -u -d -r1.137 -r1.138
--- app_voicemail.c	6 Aug 2004 21:30:39 -0000	1.137
+++ app_voicemail.c	16 Aug 2004 04:05:43 -0000	1.138
@@ -143,6 +143,7 @@
 	int delete;
 	int alloced;
 	int saycid;
+	int svmail;
 	int review;
 	int operator;
 	int envelope;
@@ -262,6 +263,7 @@
 static int reviewvm;
 static int calloper;
 static int saycidinfo;
+static int svmailinfo;
 static int hearenv;
 static int skipaftercmd;
 static char dialcontext[80];
@@ -293,6 +295,8 @@
 		vmu->operator = 1;
 	if (saycidinfo)
 		vmu->saycid = 1;
+	if (svmailinfo)
+		vmu->svmail = 1; 
 	if (hearenv)
 		vmu->envelope = 1;
 	if (callcontext)
@@ -331,6 +335,11 @@
 					vmu->saycid = 1;
 				else
 					vmu->saycid = 0;
+			} else if (!strcasecmp(var,"sendvoicemail")){
+				if(ast_true(value))
+					vmu->svmail =1;
+				else
+					vmu->svmail =0;
 			} else if (!strcasecmp(var, "review")){
 				if(ast_true(value))
 					vmu->review = 1;
@@ -2609,7 +2618,7 @@
 	return 0;
 }
 
-static int forward_message(struct ast_channel *chan, char *context, char *dir, int curmsg, struct ast_vm_user *sender, char *fmt)
+static int forward_message(struct ast_channel *chan, char *context, char *dir, int curmsg, struct ast_vm_user *sender, char *fmt,int flag)
 {
 	char username[70];
 	char sys[256];
@@ -2666,90 +2675,97 @@
 	if (!extensions || !valid_extensions)
 		return res;
 	vmtmp = extensions;
-	cmd = vm_forwardoptions(chan, sender, dir, curmsg, vmfmts, context);
-	if (!cmd) {
-		while(!res && vmtmp) {
-			/* if (play_and_wait(chan, "vm-savedto"))
-				break;
-			*/
-			snprintf(todir, sizeof(todir), "%s/voicemail/%s/%s/INBOX",  (char *)ast_config_AST_SPOOL_DIR, vmtmp->context, vmtmp->mailbox);
-			snprintf(sys, sizeof(sys), "mkdir -p %s\n", todir);
-			snprintf(ext_context, sizeof(ext_context), "%s@%s", vmtmp->mailbox, vmtmp->context);
-			ast_log(LOG_DEBUG, sys);
-			ast_safe_system(sys);
+	if(flag==1)/*Send VoiceMail*/
+	{
+		cmd=leave_voicemail(chan,username,0,0,0);
+	}
 	
-			todircount = count_messages(todir);
-			strncpy(tmp, fmt, sizeof(tmp) - 1);
-			stringp = tmp;
-			while((s = strsep(&stringp, "|"))) {
-				/* XXX This is a hack -- we should use build_filename or similar XXX */
-				if (!strcasecmp(s, "wav49"))
-					s = "WAV";
-				snprintf(sys, sizeof(sys), "cp %s/msg%04d.%s %s/msg%04d.%s\n", dir, curmsg, s, todir, todircount, s);
+	else /*Forward VoiceMail*/
+	{
+		cmd = vm_forwardoptions(chan, sender, dir, curmsg, vmfmts, context);
+		if (!cmd) {
+			while(!res && vmtmp) {
+				/* if (play_and_wait(chan, "vm-savedto"))
+					break;
+				*/
+				snprintf(todir, sizeof(todir), "%s/voicemail/%s/%s/INBOX",  (char *)ast_config_AST_SPOOL_DIR, vmtmp->context, vmtmp->mailbox);
+				snprintf(sys, sizeof(sys), "mkdir -p %s\n", todir);
+				snprintf(ext_context, sizeof(ext_context), "%s@%s", vmtmp->mailbox, vmtmp->context);
 				ast_log(LOG_DEBUG, sys);
 				ast_safe_system(sys);
-			}
-			snprintf(sys, sizeof(sys), "cp %s/msg%04d.txt %s/msg%04d.txt\n", dir, curmsg, todir, todircount);
-			ast_log(LOG_DEBUG, sys);
-			ast_safe_system(sys);
-			snprintf(fn, sizeof(fn), "%s/msg%04d", todir,todircount);
+		
+				todircount = count_messages(todir);
+				strncpy(tmp, fmt, sizeof(tmp) - 1);
+				stringp = tmp;
+				while((s = strsep(&stringp, "|"))) {
+					/* XXX This is a hack -- we should use build_filename or similar XXX */
+					if (!strcasecmp(s, "wav49"))
+						s = "WAV";
+					snprintf(sys, sizeof(sys), "cp %s/msg%04d.%s %s/msg%04d.%s\n", dir, curmsg, s, todir, todircount, s);
+					ast_log(LOG_DEBUG, sys);
+					ast_safe_system(sys);
+				}
+				snprintf(sys, sizeof(sys), "cp %s/msg%04d.txt %s/msg%04d.txt\n", dir, curmsg, todir, todircount);
+				ast_log(LOG_DEBUG, sys);
+				ast_safe_system(sys);
+				snprintf(fn, sizeof(fn), "%s/msg%04d", todir,todircount);
 	
-			/* load the information on the source message so we can send an e-mail like a new message */
-			snprintf(miffile, sizeof(miffile), "%s/msg%04d.txt", dir, curmsg);
-			if ((mif=ast_load(miffile))) {
+				/* load the information on the source message so we can send an e-mail like a new message */
+				snprintf(miffile, sizeof(miffile), "%s/msg%04d.txt", dir, curmsg);
+				if ((mif=ast_load(miffile))) {
 	
-				/* set callerid and duration variables */
-				snprintf(callerid, sizeof(callerid), "FWD from: %s from %s", sender->fullname, ast_variable_retrieve(mif, NULL, "callerid"));
-				s = ast_variable_retrieve(mif, NULL, "duration");
-				if (s)
-					duration = atoi(s);
-				else
-					duration = 0;
-				if (!ast_strlen_zero(vmtmp->email)) {
-					int attach_user_voicemail = attach_voicemail;
-					char *myserveremail = serveremail;
-					if (vmtmp->attach > -1)
-						attach_user_voicemail = vmtmp->attach;
-					if (!ast_strlen_zero(vmtmp->serveremail))
-						myserveremail = vmtmp->serveremail;
-					sendmail(myserveremail, vmtmp, todircount, vmtmp->mailbox, callerid, fn, tmp, duration, attach_user_voicemail);
-				}
+					/* set callerid and duration variables */
+					snprintf(callerid, sizeof(callerid), "FWD from: %s from %s", sender->fullname, ast_variable_retrieve(mif, NULL, "callerid"));
+					s = ast_variable_retrieve(mif, NULL, "duration");
+					if (s)
+						duration = atoi(s);
+					else
+						duration = 0;
+					if (!ast_strlen_zero(vmtmp->email)) {
+						int attach_user_voicemail = attach_voicemail;
+						char *myserveremail = serveremail;
+						if (vmtmp->attach > -1)
+							attach_user_voicemail = vmtmp->attach;
+						if (!ast_strlen_zero(vmtmp->serveremail))
+							myserveremail = vmtmp->serveremail;
+						sendmail(myserveremail, vmtmp, todircount, vmtmp->mailbox, callerid, fn, tmp, duration, attach_user_voicemail);
+					}
 			     
-				if (!ast_strlen_zero(vmtmp->pager)) {
-					char *myserveremail = serveremail;
-					if (!ast_strlen_zero(vmtmp->serveremail))
-						myserveremail = vmtmp->serveremail;
-					sendpage(myserveremail, vmtmp->pager, todircount, vmtmp->mailbox, callerid, duration, vmtmp);
-				}
+					if (!ast_strlen_zero(vmtmp->pager)) {
+						char *myserveremail = serveremail;
+						if (!ast_strlen_zero(vmtmp->serveremail))
+							myserveremail = vmtmp->serveremail;
+						sendpage(myserveremail, vmtmp->pager, todircount, vmtmp->mailbox, callerid, duration, vmtmp);
+					}
 				  
-				ast_destroy(mif); /* or here */
-			}
-			/* Leave voicemail for someone */
-			manager_event(EVENT_FLAG_CALL, "MessageWaiting", "Mailbox: %s\r\nWaiting: %d\r\n", ext_context, ast_app_has_voicemail(ext_context));
-			run_externnotify(chan->context, ext_context);
+					ast_destroy(mif); /* or here */
+				}
+				/* Leave voicemail for someone */
+				manager_event(EVENT_FLAG_CALL, "MessageWaiting", "Mailbox: %s\r\nWaiting: %d\r\n", ext_context, ast_app_has_voicemail(ext_context));
+				run_externnotify(chan->context, ext_context);
 	
-			saved_messages++;
-			vmfree = vmtmp;
-			vmtmp = vmtmp->next;
-			free_user(vmfree);
-		}
-		if (saved_messages > 0) {
-			/* give confirmation that the message was saved */
-			/* commented out since we can't forward batches yet
-			if (saved_messages == 1)
-				res = play_and_wait(chan, "vm-message");
-			else
-				res = play_and_wait(chan, "vm-messages");
-			if (!res)
-				res = play_and_wait(chan, "vm-saved"); */
-			if (!res)
-				res = play_and_wait(chan, "vm-msgsaved");
+				saved_messages++;
+				vmfree = vmtmp;
+				vmtmp = vmtmp->next;
+				free_user(vmfree);
+			}
+			if (saved_messages > 0) {
+				/* give confirmation that the message was saved */
+				/* commented out since we can't forward batches yet
+				if (saved_messages == 1)
+					res = play_and_wait(chan, "vm-message");
+				else
+					res = play_and_wait(chan, "vm-messages");
+				if (!res)
+					res = play_and_wait(chan, "vm-saved"); */
+				if (!res)
+					res = play_and_wait(chan, "vm-msgsaved");
+			}	
 		}
 	}
 	return res ? res : cmd;
 }
 
-
 static int wait_file2(struct ast_channel *chan, struct vm_state *vms, char *file)
 {
 	int res;
@@ -3733,6 +3749,14 @@
 						cmd = 't';
 						break;
 
+					case '5': /* Leave VoiceMail */
+						if(vmu->svmail)
+							cmd = forward_message(chan, context, vms.curdir, vms.curmsg, vmu, vmfmts,1);
+						else
+							cmd = play_and_wait(chan,"vm-sorry");
+						cmd='t';
+						break;
+					
 					case '*': /* Return to main menu */
 						cmd = 't';
 						break;
@@ -3752,6 +3776,8 @@
 						if (!ast_strlen_zero(vmu->dialout) && !cmd) {
 							cmd = play_and_wait(chan, "vm-tomakecall");
 						}
+						if(vmu->svmail&&!cmd)
+							cmd=play_and_wait(chan, "vm-leavemsg");
 						if (!cmd)
 							cmd = play_and_wait(chan, "vm-starmain");
 						if (!cmd)
@@ -3808,7 +3834,7 @@
 	
 			case '8':
 				if(vms.lastmsg > -1)
-					cmd = forward_message(chan, context, vms.curdir, vms.curmsg, vmu, vmfmts);
+					cmd = forward_message(chan, context, vms.curdir, vms.curmsg, vmu, vmfmts,0);
 				else
 					cmd = play_and_wait(chan, "vm-nomore");
 				break;
@@ -4172,6 +4198,7 @@
 	char *notifystr = NULL;
 	char *astattach;
 	char *astsaycid;
+	char *send_voicemail;
 	char *astcallop;
 	char *astreview;
 	char *astskipcmd;
@@ -4329,6 +4356,13 @@
 		} 
 		saycidinfo = ast_true(astsaycid);
 
+		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);
+	
 		hearenv = 1;
 		if (!(asthearenv = ast_variable_retrieve(cfg, "general", "envelope"))) {
 			ast_log(LOG_DEBUG,"ENVELOPE before msg enabled globally\n");
@@ -4347,9 +4381,9 @@
                         strncpy(dialcontext, dialoutcxt, sizeof(dialcontext) - 1);
                         ast_log(LOG_DEBUG, "found dialout context: %s\n", dialcontext);
                 } else {
-                        dialcontext[0] = '\0';
-                }
-	 		
+                        dialcontext[0] = '\0';	
+		}
+		
 		if ((callbackcxt = ast_variable_retrieve(cfg, "general", "callback"))) {
 			strncpy(callcontext, callbackcxt, sizeof(callcontext) -1);
 			ast_log(LOG_DEBUG, "found callback context: %s\n", callcontext);
@@ -4966,9 +5000,3 @@
 {
 	return ASTERISK_GPL_KEY;
 }
-
-
-
-	
-
-




More information about the svn-commits mailing list