mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Merged revisions 47693 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ................ r47693 | kpfleming | 2006-11-15 14:27:38 -0600 (Wed, 15 Nov 2006) | 12 lines Merged revisions 47677 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r47677 | kpfleming | 2006-11-15 11:56:42 -0600 (Wed, 15 Nov 2006) | 4 lines ensure that message duration is included in email notifications for forwarded messages (BE-96, fix by me after corydon used his clue-bat on me) ensure that duration in the message metadata is updated if prepending is done during forwarding (related to BE-96) remove prototype for API call that does not exist ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@47694 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -3773,11 +3773,11 @@ static int get_folder2(struct ast_channel *chan, char *fn, int start) | ||||
| 	return res; | ||||
| } | ||||
|  | ||||
| static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu, char *curdir, int curmsg, char *vmfts, char *context, signed char record_gain) | ||||
| static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu, char *curdir, int curmsg, char *vmfmts, | ||||
| 			     char *context, signed char record_gain, long *duration, struct vm_state *vms) | ||||
| { | ||||
| 	int cmd = 0; | ||||
| 	int retries = 0; | ||||
| 	int duration = 0; | ||||
| 	signed char zero_gain = 0; | ||||
|  | ||||
| 	while ((cmd >= 0) && (cmd != 't') && (cmd != '*')) { | ||||
| @@ -3785,15 +3785,52 @@ static int vm_forwardoptions(struct ast_channel *chan, struct ast_vm_user *vmu, | ||||
| 			retries = 0; | ||||
| 		switch (cmd) { | ||||
| 		case '1':  | ||||
| 			/* prepend a message to the current message and return */ | ||||
| 			/* prepend a message to the current message, update the metadata and return */ | ||||
| 		{ | ||||
| 			char file[200]; | ||||
| 			snprintf(file, sizeof(file), "%s/msg%04d", curdir, curmsg); | ||||
| 			char msgfile[PATH_MAX]; | ||||
| 			char textfile[PATH_MAX]; | ||||
| 			int prepend_duration = 0; | ||||
| 			struct ast_config *msg_cfg; | ||||
| 			const char *duration_str; | ||||
|  | ||||
| 			make_file(msgfile, sizeof(msgfile), curdir, curmsg); | ||||
| 			strcpy(textfile, msgfile); | ||||
| 			strncat(textfile, ".txt", sizeof(textfile) - 1); | ||||
| 			*duration = 0; | ||||
|  | ||||
| 			/* if we can't read the message metadata, stop now */ | ||||
| 			if (!(msg_cfg = ast_config_load(textfile))) { | ||||
| 				cmd = 0; | ||||
| 				break; | ||||
| 			} | ||||
|  | ||||
| 			if (record_gain) | ||||
| 				ast_channel_setoption(chan, AST_OPTION_RXGAIN, &record_gain, sizeof(record_gain), 0); | ||||
| 			cmd = ast_play_and_prepend(chan, NULL, file, 0, vmfmts, &duration, 1, silencethreshold, maxsilence); | ||||
|  | ||||
| 			cmd = ast_play_and_prepend(chan, NULL, msgfile, 0, vmfmts, &prepend_duration, 1, silencethreshold, maxsilence); | ||||
| 			if (record_gain) | ||||
| 				ast_channel_setoption(chan, AST_OPTION_RXGAIN, &zero_gain, sizeof(zero_gain), 0); | ||||
|  | ||||
| 			 | ||||
| 			if ((duration_str = ast_variable_retrieve(msg_cfg, "message", "duration"))) | ||||
| 				*duration = atoi(duration_str); | ||||
|  | ||||
| 			if (prepend_duration) { | ||||
| 				struct ast_category *msg_cat; | ||||
| 				/* need enough space for a maximum-length message duration */ | ||||
| 				char duration_str[12]; | ||||
|  | ||||
| 				*duration += prepend_duration; | ||||
| 				msg_cat = ast_category_get(msg_cfg, "message"); | ||||
| 				snprintf(duration_str, 11, "%ld", *duration); | ||||
| 				if (!ast_variable_update(msg_cat, "duration", duration_str, NULL)) { | ||||
| 					config_text_file_save(textfile, msg_cfg, "app_voicemail"); | ||||
| 					STORE(curdir, vmu->mailbox, context, curmsg, chan, vmu, vmfmts, *duration, vms); | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			ast_config_destroy(msg_cfg); | ||||
|  | ||||
| 			break; | ||||
| 		} | ||||
| 		case '2':  | ||||
| @@ -4023,8 +4060,10 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st | ||||
| 	} else { | ||||
|  | ||||
| 		/* Forward VoiceMail */ | ||||
| 		long duration = 0; | ||||
|  | ||||
| 		RETRIEVE(dir, curmsg); | ||||
| 		cmd = vm_forwardoptions(chan, sender, dir, curmsg, vmfmts, context, record_gain); | ||||
| 		cmd = vm_forwardoptions(chan, sender, dir, curmsg, vmfmts, context, record_gain, &duration, vms); | ||||
| 		if (!cmd) { | ||||
| 			AST_LIST_TRAVERSE_SAFE_BEGIN(&extensions, vmtmp, list) { | ||||
| #ifdef IMAP_STORAGE | ||||
| @@ -4085,7 +4124,7 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st | ||||
|  				/* NULL category for IMAP storage */ | ||||
|  				sendmail(myserveremail, vmtmp, todircount, vmtmp->context, vmtmp->mailbox, chan->cid.cid_num, chan->cid.cid_name, vms->fn, fmt, duration, attach_user_voicemail, chan, NULL); | ||||
| #else | ||||
| 				copy_message(chan, sender, 0, curmsg, 0, vmtmp, fmt); | ||||
| 				copy_message(chan, sender, 0, curmsg, duration, vmtmp, fmt); | ||||
| #endif | ||||
| 				saved_messages++; | ||||
| 				AST_LIST_REMOVE_CURRENT(&extensions, list); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user