[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