[Freeswitch-svn] [commit] r5888 - in freeswitch/trunk/src: include mod/applications/mod_dptools

Freeswitch SVN anthm at freeswitch.org
Tue Oct 16 10:36:40 EDT 2007


Author: anthm
Date: Tue Oct 16 10:36:39 2007
New Revision: 5888

Modified:
   freeswitch/trunk/src/include/switch_types.h
   freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c

Log:
add playback_terminators variable
This is valid for playback, gentones, record and speak
value may be a string of valid terminator characters, or the word 'none'
the default of * will always work unless overridden by 'none'. This is for backward compat.

  <extension name="8000">
    <condition field="destination_number" expression="^8000$">
      <action application="answer"/>
      <!--both * and # will stop the playback-->
      <action application="set" data="playback_terminators=#*"/>
      <action application="playback" data="/ram/swimp.raw"/>
    </condition>
  </extension>






Modified: freeswitch/trunk/src/include/switch_types.h
==============================================================================
--- freeswitch/trunk/src/include/switch_types.h	(original)
+++ freeswitch/trunk/src/include/switch_types.h	Tue Oct 16 10:36:39 2007
@@ -97,6 +97,7 @@
 #define SWITCH_PATH_SEPARATOR "/"
 #endif
 #define SWITCH_URL_SEPARATOR "://"
+#define SWITCH_PLAYBACK_TERMINATORS_VARIABLE "playback_terminators"
 #define SWITCH_CACHE_SPEECH_HANDLES_VARIABLE "cache_speech_handles"
 #define SWITCH_CACHE_SPEECH_HANDLES_OBJ_NAME "__cache_speech_handles_obj__"
 #define SWITCH_BYPASS_MEDIA_VARIABLE "bypass_media"

Modified: freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c	(original)
+++ freeswitch/trunk/src/mod/applications/mod_dptools/mod_dptools.c	Tue Oct 16 10:36:39 2007
@@ -898,15 +898,33 @@
 */
 static switch_status_t on_dtmf(switch_core_session_t *session, void *input, switch_input_type_t itype, void *buf, unsigned int buflen)
 {
-
+	
 
 	switch (itype) {
-	case SWITCH_INPUT_TYPE_DTMF:{
+	case SWITCH_INPUT_TYPE_DTMF:
+		{
 			char *dtmf = (char *) input;
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Digits %s\n", dtmf);
+			char *terminators;
+			switch_channel_t *channel = switch_core_session_get_channel(session);
+			char *p;
+			
+			assert(channel);
 
-			if (*dtmf == '*') {
-				return SWITCH_STATUS_BREAK;
+			if (!(terminators = switch_channel_get_variable(channel, SWITCH_PLAYBACK_TERMINATORS_VARIABLE))) {
+				terminators = "*";
+			}
+			if (!strcasecmp(terminators, "none")) {
+				terminators = NULL;
+			}
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Digits %s\n", dtmf);
+			
+			for (p = terminators; p && *p; p++) {
+				char *d;
+				for (d = dtmf; d && *d; d++) {
+					if (*p == *d) {
+						return SWITCH_STATUS_BREAK;
+					}
+				}
 			}
 		}
 		break;



More information about the Freeswitch-svn mailing list