Revision
14389
Author
mikej
Date
2009-07-27 14:05:59 -0500 (Mon, 27 Jul 2009)

Log Message

mod_voicemail: allow Voicemail FF REW key to have configurable millisec interval AND allow REW to limit at the begining of the recording. (MODAPP-311)

Modified Paths

Diff

Modified: freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml (14388 => 14389)


--- freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml	2009-07-27 18:54:27 UTC (rev 14388)
+++ freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml	2009-07-27 19:05:59 UTC (rev 14389)
@@ -33,6 +33,8 @@
       <param name="ff-key" value="6"/>
       <param name="rew-key" value="4"/>
       <param name="skip-greet-key" value="#"/>
+      <param name="ff-msec" value="3000"/>
+      <param name="rew-msec" value="6000"/>
       <!--<param name="previous-message-key" value=""/>-->
       <!--<param name="next-message-key" value=""/>-->
       <param name="record-silence-threshold" value="200"/>

Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (14388 => 14389)


--- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c	2009-07-27 18:54:27 UTC (rev 14388)
+++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c	2009-07-27 19:05:59 UTC (rev 14389)
@@ -106,6 +106,8 @@
 	char rew_key[2];
 	char prev_msg_key[2];
 	char next_msg_key[2];
+        uint32_t ff_msec;
+        uint32_t rew_msec;
 	char urgent_key[2];
 	char operator_key[2];
 	char vmain_key[2];
@@ -306,6 +308,7 @@
 static switch_xml_config_string_options_t config_dtmf = { NULL, 2, "[0-9#\\*]" };
 static switch_xml_config_string_options_t config_login_keys = { NULL, 16, "[0-9#\\*]*" };
 static switch_xml_config_string_options_t config_file_ext = { NULL, 10, NULL };
+static switch_xml_config_int_options_t config_int_0_60000 = { SWITCH_TRUE, 0, SWITCH_TRUE, 60000 };
 static switch_xml_config_int_options_t config_int_0_10000 = { SWITCH_TRUE, 0, SWITCH_TRUE, 10000 };
 static switch_xml_config_int_options_t config_int_0_1000 = { SWITCH_TRUE, 0, SWITCH_TRUE, 1000 };
 static switch_xml_config_int_options_t config_int_digit_timeout = { SWITCH_TRUE, 0, SWITCH_TRUE, 30000 };
@@ -509,6 +512,10 @@
                 &profile->prev_msg_key, "", &config_dtmf, NULL, NULL);
         SWITCH_CONFIG_SET_ITEM(profile->config[i++], "next-message-key", SWITCH_CONFIG_STRING, CONFIG_RELOADABLE,
                 &profile->next_msg_key, "", &config_dtmf, NULL, NULL);
+        SWITCH_CONFIG_SET_ITEM(profile->config[i++], "ff-msec", SWITCH_CONFIG_INT, CONFIG_RELOADABLE,
+                &profile->ff_msec, 3000, &config_int_0_60000, NULL, NULL);
+        SWITCH_CONFIG_SET_ITEM(profile->config[i++], "rew-msec", SWITCH_CONFIG_INT, CONFIG_RELOADABLE,
+                &profile->rew_msec, 6000, &config_int_0_60000, NULL, NULL);
 	SWITCH_CONFIG_SET_ITEM(profile->config[i++], "urgent-key", SWITCH_CONFIG_STRING, CONFIG_RELOADABLE, 
 		&profile->urgent_key, "*", &config_dtmf, NULL, NULL);
 	SWITCH_CONFIG_SET_ITEM(profile->config[i++], "operator-key", SWITCH_CONFIG_STRING, CONFIG_RELOADABLE, 
@@ -907,14 +914,19 @@
 			}
 
 			if (dtmf->digit == *cc->profile->ff_key) {
-				int samps = 24000;
+				int samps = ((cc->profile->ff_msec * fh->samplerate) / 1000);
 				switch_core_file_seek(fh, &pos, samps, SEEK_CUR);
 				return SWITCH_STATUS_SUCCESS;
 			}
 
 			if (dtmf->digit == *cc->profile->rew_key) {
-				int samps = -48000;
-				switch_core_file_seek(fh, &pos, samps, SEEK_CUR);
+				int samps = 0- ((cc->profile->rew_msec * fh->samplerate) / 1000);
+				if (fh->pos + samps < 0) {
+					unsigned int seekpos = 0;
+					switch_core_file_seek(fh, &seekpos, 0, SEEK_SET);
+				} else {
+					switch_core_file_seek(fh, &pos, samps, SEEK_CUR);
+				}
 				return SWITCH_STATUS_SUCCESS;
 			}
 			if (!cc->noexit && dtmf->digit == *cc->profile->terminator_key) {