[Freeswitch-trunk] [commit] r13694 - in freeswitch/trunk: libs/speex patches src src/include src/mod/applications/mod_limit src/mod/applications/mod_voicemail src/mod/asr_tts/mod_pocketsphinx

FreeSWITCH SVN anthm at freeswitch.org
Mon Jun 8 14:52:51 PDT 2009


Author: anthm
Date: Mon Jun  8 16:52:50 2009
New Revision: 13694

Log:
patch

Added:
   freeswitch/trunk/patches/asr.diff
Modified:
   freeswitch/trunk/libs/speex/config.h.in
   freeswitch/trunk/src/include/switch_core.h
   freeswitch/trunk/src/include/switch_ivr.h
   freeswitch/trunk/src/include/switch_module_interfaces.h
   freeswitch/trunk/src/mod/applications/mod_limit/Makefile
   freeswitch/trunk/src/mod/applications/mod_voicemail/Makefile
   freeswitch/trunk/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c
   freeswitch/trunk/src/switch_core_asr.c
   freeswitch/trunk/src/switch_core_speech.c
   freeswitch/trunk/src/switch_ivr_async.c

Modified: freeswitch/trunk/libs/speex/config.h.in
==============================================================================
--- freeswitch/trunk/libs/speex/config.h.in	(original)
+++ freeswitch/trunk/libs/speex/config.h.in	Mon Jun  8 16:52:50 2009
@@ -96,13 +96,13 @@
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
-/* The size of a `int', as computed by sizeof. */
+/* The size of `int', as computed by sizeof. */
 #undef SIZEOF_INT
 
-/* The size of a `long', as computed by sizeof. */
+/* The size of `long', as computed by sizeof. */
 #undef SIZEOF_LONG
 
-/* The size of a `short', as computed by sizeof. */
+/* The size of `short', as computed by sizeof. */
 #undef SIZEOF_SHORT
 
 /* Version extra */

Added: freeswitch/trunk/patches/asr.diff
==============================================================================
--- (empty file)
+++ freeswitch/trunk/patches/asr.diff	Mon Jun  8 16:52:50 2009
@@ -0,0 +1,562 @@
+Index: src/switch_ivr_async.c
+===================================================================
+--- src/switch_ivr_async.c	(revision 13692)
++++ src/switch_ivr_async.c	(working copy)
+@@ -2027,14 +2027,14 @@
+ 	return SWITCH_STATUS_FALSE;
+ }
+ 
+-SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_load_grammar(switch_core_session_t *session, char *grammar, char *path)
++SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_load_grammar(switch_core_session_t *session, char *grammar, char *name)
+ {
+ 	switch_channel_t *channel = switch_core_session_get_channel(session);
+ 	switch_asr_flag_t flags = SWITCH_ASR_FLAG_NONE;
+ 	struct speech_thread_handle *sth = switch_channel_get_private(channel, SWITCH_SPEECH_KEY);
+ 
+ 	if (sth) {
+-		if (switch_core_asr_load_grammar(sth->ah, grammar, path) != SWITCH_STATUS_SUCCESS) {
++		if (switch_core_asr_load_grammar(sth->ah, grammar, name) != SWITCH_STATUS_SUCCESS) {
+ 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Error loading Grammar\n");
+ 			switch_core_asr_close(sth->ah, &flags);
+ 			switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
+@@ -2045,14 +2045,14 @@
+ 	return SWITCH_STATUS_FALSE;
+ }
+ 
+-SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_core_session_t *session, const char *grammar)
++SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_core_session_t *session, const char *name)
+ {
+ 	switch_channel_t *channel = switch_core_session_get_channel(session);
+ 	switch_asr_flag_t flags = SWITCH_ASR_FLAG_NONE;
+ 	struct speech_thread_handle *sth = switch_channel_get_private(channel, SWITCH_SPEECH_KEY);
+ 
+ 	if (sth) {
+-		if (switch_core_asr_unload_grammar(sth->ah, grammar) != SWITCH_STATUS_SUCCESS) {
++		if (switch_core_asr_unload_grammar(sth->ah, name) != SWITCH_STATUS_SUCCESS) {
+ 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Error unloading Grammar\n");
+ 			switch_core_asr_close(sth->ah, &flags);
+ 			switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
+@@ -2065,7 +2065,7 @@
+ 
+ SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech(switch_core_session_t *session,
+ 														 const char *mod_name,
+-														 const char *grammar, const char *path, const char *dest, switch_asr_handle_t *ah)
++														 const char *grammar, const char *name, const char *dest, switch_asr_handle_t *ah)
+ {
+ 	switch_channel_t *channel = switch_core_session_get_channel(session);
+ 	switch_status_t status;
+@@ -2085,7 +2085,7 @@
+ 	}
+ 
+ 	if (sth) {
+-		if (switch_core_asr_load_grammar(sth->ah, grammar, path) != SWITCH_STATUS_SUCCESS) {
++		if (switch_core_asr_load_grammar(sth->ah, grammar, name) != SWITCH_STATUS_SUCCESS) {
+ 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Error loading Grammar\n");
+ 			switch_core_asr_close(sth->ah, &flags);
+ 			return SWITCH_STATUS_FALSE;
+@@ -2100,7 +2100,7 @@
+ 							 read_impl.actual_samples_per_second, dest, &flags,
+ 							 switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) {
+ 
+-		if (switch_core_asr_load_grammar(ah, grammar, path) != SWITCH_STATUS_SUCCESS) {
++		if (switch_core_asr_load_grammar(ah, grammar, name) != SWITCH_STATUS_SUCCESS) {
+ 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Error loading Grammar\n");
+ 			switch_core_asr_close(ah, &flags);
+ 			switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
+Index: src/switch_core_asr.c
+===================================================================
+--- src/switch_core_asr.c	(revision 13692)
++++ src/switch_core_asr.c	(working copy)
+@@ -26,6 +26,7 @@
+  * Anthony Minessale II <anthm at freeswitch.org>
+  * Michael Jerris <mike at jerris.com>
+  * Paul D. Tinsley <pdt at jackhammer.org>
++ * Christopher M. Rienzo <chris at rienzo.net>
+  *
+  *
+  * switch_core_asr.c -- Main Core Library (Speech Detection Interface)
+@@ -79,30 +80,74 @@
+ 	return ah->asr_interface->asr_open(ah, codec, rate, dest, flags);
+ }
+ 
+-SWITCH_DECLARE(switch_status_t) switch_core_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *path)
++SWITCH_DECLARE(switch_status_t) switch_core_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *name)
+ {
+-	char *epath = NULL;
+-	switch_status_t status;
++	switch_status_t status = SWITCH_STATUS_SUCCESS;
++	char *param_string = NULL;
++	char *data = NULL;
++	char *lgrammar = NULL;
+ 
+ 	switch_assert(ah != NULL);
+ 
+-	if (!switch_is_file_path(path)) {
+-		epath = switch_mprintf("%s%s%s", SWITCH_GLOBAL_dirs.grammar_dir, SWITCH_PATH_SEPARATOR, path);
+-		path = epath;
++	if (switch_strlen_zero(grammar)) {
++		status = SWITCH_STATUS_FALSE;
++		goto done;
+ 	}
+ 
+-	status = ah->asr_interface->asr_load_grammar(ah, grammar, path);
+-	switch_safe_free(epath);
++	/* Set ASR parameters from params in the grammar string
++	 * Params are defined as follows {name1=val1,name2=val2,name3=val3}grammar text
++	 */
++	lgrammar = strdup(grammar);
++	data = lgrammar;
+ 
++	/* strip leading spaces */
++	while (data && *data == ' ') {
++		data++;
++	}
++	if (switch_strlen_zero(data)) {
++		status = SWITCH_STATUS_FALSE;
++		goto done;
++	}
++	
++	/* extract params */
++	if (*data == '{') {
++		param_string = data + 1;
++		data = switch_find_end_paren(data, '{', '}');
++		if (switch_strlen_zero(data)) {
++			status = SWITCH_STATUS_FALSE;
++			goto done;
++		} else {	
++			*data = '\0';
++			data++;
++		}
++	}
++
++	/* set ASR params */
++	if (!switch_strlen_zero(param_string)) {
++		char *param[256] = { 0 };
++		switch_separate_string(param_string, ',', param, (sizeof(param) / sizeof(param[0])));
++		for (int i = 0; param[i]; ++i) {
++			char *param_pair[2] = { 0 };
++			if(switch_separate_string(param[i], '=', param_pair, (sizeof(param_pair) / sizeof(param_pair[0]))) == 2) {
++				switch_core_asr_text_param(ah, param_pair[0], param_pair[1]);
++			}
++		}
++	}
++
++	status = ah->asr_interface->asr_load_grammar(ah, data, name);
++
++ done:
++
++	switch_safe_free(lgrammar);
+ 	return status;
+ }
+ 
+-SWITCH_DECLARE(switch_status_t) switch_core_asr_unload_grammar(switch_asr_handle_t *ah, const char *grammar)
++SWITCH_DECLARE(switch_status_t) switch_core_asr_unload_grammar(switch_asr_handle_t *ah, const char *name)
+ {
+ 	switch_status_t status;
+ 
+ 	switch_assert(ah != NULL);
+-	status = ah->asr_interface->asr_unload_grammar(ah, grammar);
++	status = ah->asr_interface->asr_unload_grammar(ah, name);
+ 
+ 	return status;
+ }
+@@ -158,6 +203,46 @@
+ 	return ah->asr_interface->asr_get_results(ah, xmlstr, flags);
+ }
+ 
++SWITCH_DECLARE(switch_status_t) switch_core_asr_start_input_timers(switch_asr_handle_t *ah)
++{
++	switch_status_t status = SWITCH_STATUS_SUCCESS;
++
++	switch_assert(ah != NULL);
++
++	if (ah->asr_interface->asr_start_input_timers) {
++		status = ah->asr_interface->asr_start_input_timers(ah);
++	}
++
++	return status;
++}
++
++SWITCH_DECLARE(void) switch_core_asr_text_param(switch_asr_handle_t *ah, char *param, const char *val)
++{
++	switch_assert(ah != NULL);
++
++	if (ah->asr_interface->asr_text_param) {
++		ah->asr_interface->asr_text_param(ah, param, val);
++	}
++}
++
++SWITCH_DECLARE(void) switch_core_asr_numeric_param(switch_asr_handle_t *ah, char *param, int val)
++{
++	switch_assert(ah != NULL);
++
++	if (ah->asr_interface->asr_numeric_param) {
++		ah->asr_interface->asr_numeric_param(ah, param, val);
++	}
++}
++
++SWITCH_DECLARE(void) switch_core_asr_float_param(switch_asr_handle_t *ah, char *param, double val)
++{
++	switch_assert(ah != NULL);
++
++	if (ah->asr_interface->asr_float_param) {
++		ah->asr_interface->asr_float_param(ah, param, val);
++	}
++}
++
+ /* For Emacs:
+  * Local Variables:
+  * mode:c
+Index: src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c
+===================================================================
+--- src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c	(revision 13692)
++++ src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c	(working copy)
+@@ -111,7 +111,7 @@
+ }
+ 
+ /*! function to load a grammar to the asr interface */
+-static switch_status_t pocketsphinx_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *path)
++static switch_status_t pocketsphinx_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *name)
+ {
+ 	char *jsgf, *dic, *model, *rate = NULL;
+ 	pocketsphinx_t *ps = (pocketsphinx_t *) ah->private_info;
+@@ -199,7 +199,7 @@
+ }
+ 
+ /*! function to unload a grammar to the asr interface */
+-static switch_status_t pocketsphinx_asr_unload_grammar(switch_asr_handle_t *ah, const char *grammar)
++static switch_status_t pocketsphinx_asr_unload_grammar(switch_asr_handle_t *ah, const char *name)
+ {
+ 	return SWITCH_STATUS_SUCCESS;
+ }
+@@ -506,6 +506,10 @@
+ 	asr_interface->asr_pause = pocketsphinx_asr_pause;
+ 	asr_interface->asr_check_results = pocketsphinx_asr_check_results;
+ 	asr_interface->asr_get_results = pocketsphinx_asr_get_results;
++	asr_interface->asr_start_input_timers = NULL;
++	asr_interface->asr_text_param = NULL;
++	asr_interface->asr_numeric_param = NULL;
++	asr_interface->asr_float_param = NULL;
+ 
+ 	err_set_logfp(NULL);
+ 
+Index: src/mod/applications/mod_voicemail/Makefile
+===================================================================
+--- src/mod/applications/mod_voicemail/Makefile	(revision 13692)
++++ src/mod/applications/mod_voicemail/Makefile	(working copy)
+@@ -1,3 +1,4 @@
+ BASE=../../../..
+ include $(BASE)/build/modmake.rules
+ LOCAL_CFLAGS += `if test -f $(BASE)/.libs/libfreeswitch_la-switch_odbc.o ; then echo -DSWITCH_HAVE_ODBC; fi ;`
++LOCAL_LIBADD += -liodbc
+Index: src/mod/applications/mod_limit/Makefile
+===================================================================
+--- src/mod/applications/mod_limit/Makefile	(revision 13692)
++++ src/mod/applications/mod_limit/Makefile	(working copy)
+@@ -1,3 +1,4 @@
+ BASE=../../../..
+ include $(BASE)/build/modmake.rules
+ LOCAL_CFLAGS += `if test -f $(BASE)/.libs/libfreeswitch_la-switch_odbc.o ; then echo -DSWITCH_HAVE_ODBC; fi ;`
++LOCAL_LIBADD += -liodbc
+Index: src/switch_core_speech.c
+===================================================================
+--- src/switch_core_speech.c	(revision 13692)
++++ src/switch_core_speech.c	(working copy)
+@@ -22,10 +22,11 @@
+  * the Initial Developer. All Rights Reserved.
+  *
+  * Contributor(s):
+- * 
++ *
+  * Anthony Minessale II <anthm at freeswitch.org>
+  * Michael Jerris <mike at jerris.com>
+  * Paul D. Tinsley <pdt at jackhammer.org>
++ * Christopher M. Rienzo <chris at rienzo.net>
+  *
+  *
+  * switch_core_speech.c -- Main Core Library (speech functions)
+@@ -92,9 +93,64 @@
+ 
+ SWITCH_DECLARE(switch_status_t) switch_core_speech_feed_tts(switch_speech_handle_t *sh, char *text, switch_speech_flag_t *flags)
+ {
++	switch_status_t status = SWITCH_STATUS_SUCCESS;
++	char *param_string = NULL;
++	char *data = NULL;
++	char *ltext = NULL;
++
+ 	switch_assert(sh != NULL);
+ 
+-	return sh->speech_interface->speech_feed_tts(sh, text, flags);
++	if (switch_strlen_zero(text)) {
++		status = SWITCH_STATUS_FALSE;
++		goto done;
++	}
++
++	/* Set TTS parameters from params in the text string
++	 * Params are defined as follows {name1=val1,name2=val2,name3=val3}text to speak
++	 */
++	ltext = strdup(text);
++	data = ltext;
++
++	/* strip leading spaces */
++	while (data && *data == ' ') {
++		data++;
++	}
++	if (switch_strlen_zero(data)) {
++		status = SWITCH_STATUS_FALSE;
++		goto done;
++	}
++	
++	/* extract params */
++	if (*data == '{') {
++		param_string = data + 1;
++		data = switch_find_end_paren(data, '{', '}');
++		if (switch_strlen_zero(data)) {
++			status = SWITCH_STATUS_FALSE;
++			goto done;
++		} else {
++			*data = '\0';
++			data++;
++		}
++	}
++
++	/* set TTS params */
++	if (!switch_strlen_zero(param_string)) {
++		char *param[256] = { 0 };
++		switch_separate_string(param_string, ',', param, (sizeof(param) / sizeof(param[0])));
++		for (int i = 0; param[i]; ++i) {
++			char *param_pair[2] = { 0 };
++			if(switch_separate_string(param[i], '=', param_pair, (sizeof(param_pair) / sizeof(param_pair[0]))) == 2) {
++				switch_core_speech_text_param_tts(sh, param_pair[0], param_pair[1]);
++			}
++		}
++	}
++
++	status = sh->speech_interface->speech_feed_tts(sh, data, flags);
++
++ done:
++
++	switch_safe_free(ltext);
++	return status;	
+ }
+ 
+ SWITCH_DECLARE(void) switch_core_speech_flush_tts(switch_speech_handle_t *sh)
+Index: src/include/switch_module_interfaces.h
+===================================================================
+--- src/include/switch_module_interfaces.h	(revision 13692)
++++ src/include/switch_module_interfaces.h	(working copy)
+@@ -342,9 +342,9 @@
+ 	/*! function to open the asr interface */
+ 	switch_status_t (*asr_open) (switch_asr_handle_t *ah, const char *codec, int rate, const char *dest, switch_asr_flag_t *flags);
+ 	/*! function to load a grammar to the asr interface */
+-	switch_status_t (*asr_load_grammar) (switch_asr_handle_t *ah, const char *grammar, const char *path);
++	switch_status_t (*asr_load_grammar) (switch_asr_handle_t *ah, const char *grammar, const char *name);
+ 	/*! function to unload a grammar to the asr interface */
+-	switch_status_t (*asr_unload_grammar) (switch_asr_handle_t *ah, const char *grammar);
++	switch_status_t (*asr_unload_grammar) (switch_asr_handle_t *ah, const char *name);
+ 	/*! function to close the asr interface */
+ 	switch_status_t (*asr_close) (switch_asr_handle_t *ah, switch_asr_flag_t *flags);
+ 	/*! function to feed audio to the ASR */
+@@ -357,6 +357,11 @@
+ 	switch_status_t (*asr_check_results) (switch_asr_handle_t *ah, switch_asr_flag_t *flags);
+ 	/*! function to read results from the ASR */
+ 	switch_status_t (*asr_get_results) (switch_asr_handle_t *ah, char **xmlstr, switch_asr_flag_t *flags);
++	/*! function to start ASR input timers */
++	switch_status_t (*asr_start_input_timers) (switch_asr_handle_t *ah);
++	void (*asr_text_param) (switch_asr_handle_t *ah, char *param, const char *val);
++	void (*asr_numeric_param) (switch_asr_handle_t *ah, char *param, int val);
++	void (*asr_float_param) (switch_asr_handle_t *ah, char *param, double val);
+ 	switch_thread_rwlock_t *rwlock;
+ 	int refs;
+ 	switch_mutex_t *reflock;
+@@ -409,7 +414,7 @@
+ };
+ 
+ 
+-/*! an abstract representation of a asr/tts speech interface. */
++/*! an abstract representation of a tts speech interface. */
+ struct switch_speech_handle {
+ 	/*! the interface of the module that implemented the current speech interface */
+ 	switch_speech_interface_t *speech_interface;
+Index: src/include/switch_ivr.h
+===================================================================
+--- src/include/switch_ivr.h	(revision 13692)
++++ src/include/switch_ivr.h	(working copy)
+@@ -148,15 +148,15 @@
+   \brief Engage background Speech detection on a session
+   \param session the session to attach
+   \param mod_name the module name of the ASR library
+-  \param grammar the grammar name
+-  \param path the path to the grammar file
++  \param grammar the grammar text, URI, or local file name
++  \param name the grammar name
+   \param dest the destination address
+   \param ah an ASR handle to use (NULL to create one)
+   \return SWITCH_STATUS_SUCCESS if all is well
+ */
+ SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech(switch_core_session_t *session,
+ 														 const char *mod_name,
+-														 const char *grammar, const char *path, const char *dest, switch_asr_handle_t *ah);
++														 const char *grammar, const char *name, const char *dest, switch_asr_handle_t *ah);
+ 
+ /*!
+   \brief Stop background Speech detection on a session
+@@ -182,19 +182,19 @@
+ /*!
+   \brief Load a grammar on a background speech detection handle
+   \param session The session to change the grammar on
+-  \param grammar the grammar name
+-  \param path the grammar path
++  \param grammar the grammar text, URI, or local file name
++  \param name the grammar name
+   \return SWITCH_STATUS_SUCCESS if all is well
+ */
+-SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_load_grammar(switch_core_session_t *session, char *grammar, char *path);
++SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_load_grammar(switch_core_session_t *session, char *grammar, char *name);
+ 
+ /*!
+   \brief Unload a grammar on a background speech detection handle
+   \param session The session to change the grammar on
+-  \param grammar the grammar name
++  \param name the grammar name
+   \return SWITCH_STATUS_SUCCESS if all is well
+ */
+-SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_core_session_t *session, const char *grammar);
++SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_core_session_t *session, const char *name);
+ 
+ /*!
+   \brief Record a session to disk
+Index: src/include/switch_core.h
+===================================================================
+--- src/include/switch_core.h	(revision 13692)
++++ src/include/switch_core.h	(working copy)
+@@ -1623,19 +1623,19 @@
+ /*!
+   \brief Load a grammar to an asr handle
+   \param ah the handle to load to
+-  \param grammar the name of the grammar
+-  \param path the path to the grammaar file
++  \param grammar the grammar text, file path, or URI
++  \param name the grammar name
+   \return SWITCH_STATUS_SUCCESS
+ */
+-SWITCH_DECLARE(switch_status_t) switch_core_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *path);
++SWITCH_DECLARE(switch_status_t) switch_core_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *name);
+ 
+ /*!
+   \brief Unload a grammar from an asr handle
+   \param ah the handle to unload the grammar from
+-  \param grammar the grammar to unload
++  \param name the name of the grammar to unload
+   \return SWITCH_STATUS_SUCCESS
+ */
+-SWITCH_DECLARE(switch_status_t) switch_core_asr_unload_grammar(switch_asr_handle_t *ah, const char *grammar);
++SWITCH_DECLARE(switch_status_t) switch_core_asr_unload_grammar(switch_asr_handle_t *ah, const char *name);
+ 
+ /*!
+   \brief Pause detection on an asr handle
+@@ -1651,6 +1651,37 @@
+ */
+ SWITCH_DECLARE(switch_status_t) switch_core_asr_resume(switch_asr_handle_t *ah);
+ 
++/*!
++  \brief Start input timers on an asr handle
++  \param ah the handle to start timers on
++  \return SWITCH_STATUS_SUCCESS
++*/
++SWITCH_DECLARE(switch_status_t) switch_core_asr_start_input_timers(switch_asr_handle_t *ah);
++
++/*!
++  \brief Set a text parameter on an asr handle
++  \param sh the asr handle
++  \param param the parameter
++  \param val the value
++*/
++SWITCH_DECLARE(void) switch_core_asr_text_param(switch_asr_handle_t *ah, char *param, const char *val);
++
++/*!
++  \brief Set a numeric parameter on an asr handle
++  \param sh the asr handle
++  \param param the parameter
++  \param val the value
++*/
++SWITCH_DECLARE(void) switch_core_asr_numeric_param(switch_asr_handle_t *ah, char *param, int val);
++
++/*!
++  \brief Set a float parameter on an asr handle
++  \param sh the asr handle
++  \param param the parameter
++  \param val the value
++*/
++SWITCH_DECLARE(void) switch_core_asr_float_param(switch_asr_handle_t *ah, char *param, double val);
++
+ ///\}
+ 
+ 
+@@ -1659,7 +1690,7 @@
+ ///\{
+ /*! 
+   \brief Open a directory handle
+-  \param dh a direcotry handle to use
++  \param dh a directory handle to use
+   \param module_name the directory module to use
+   \param source the source of the db (ip, hostname, path etc)
+   \param dsn the username or designation of the lookup
+@@ -1672,7 +1703,7 @@
+ 
+ /*! 
+   \brief Query a directory handle
+-  \param dh a direcotry handle to use
++  \param dh a directory handle to use
+   \param base the base to query against
+   \param query a string of filters or query data
+   \return SWITCH_STATUS_SUCCESS if the query is successful
+@@ -1681,23 +1712,23 @@
+ 
+ /*! 
+   \brief Obtain the next record in a lookup
+-  \param dh a direcotry handle to use
++  \param dh a directory handle to use
+   \return SWITCH_STATUS_SUCCESS if another record exists
+ */
+ SWITCH_DECLARE(switch_status_t) switch_core_directory_next(switch_directory_handle_t *dh);
+ 
+ /*! 
+   \brief Obtain the next name/value pair in the current record
+-  \param dh a direcotry handle to use
++  \param dh a directory handle to use
+   \param var a pointer to pointer of the name to fill in
+-  \param val a pointer to poinbter of the value to fill in
++  \param val a pointer to pointer of the value to fill in
+   \return SWITCH_STATUS_SUCCESS if an item exists
+ */
+ SWITCH_DECLARE(switch_status_t) switch_core_directory_next_pair(switch_directory_handle_t *dh, char **var, char **val);
+ 
+ /*! 
+   \brief Close an open directory handle
+-  \param dh a direcotry handle to close
++  \param dh a directory handle to close
+   \return SWITCH_STATUS_SUCCESS if handle was closed
+ */
+ SWITCH_DECLARE(switch_status_t) switch_core_directory_close(switch_directory_handle_t *dh);
+Index: libs/speex/config.h.in
+===================================================================
+--- libs/speex/config.h.in	(revision 13692)
++++ libs/speex/config.h.in	(working copy)
+@@ -96,13 +96,13 @@
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+ 
+-/* The size of a `int', as computed by sizeof. */
++/* The size of `int', as computed by sizeof. */
+ #undef SIZEOF_INT
+ 
+-/* The size of a `long', as computed by sizeof. */
++/* The size of `long', as computed by sizeof. */
+ #undef SIZEOF_LONG
+ 
+-/* The size of a `short', as computed by sizeof. */
++/* The size of `short', as computed by sizeof. */
+ #undef SIZEOF_SHORT
+ 
+ /* Version extra */

Modified: freeswitch/trunk/src/include/switch_core.h
==============================================================================
--- freeswitch/trunk/src/include/switch_core.h	(original)
+++ freeswitch/trunk/src/include/switch_core.h	Mon Jun  8 16:52:50 2009
@@ -1623,19 +1623,19 @@
 /*!
   \brief Load a grammar to an asr handle
   \param ah the handle to load to
-  \param grammar the name of the grammar
-  \param path the path to the grammaar file
+  \param grammar the grammar text, file path, or URI
+  \param name the grammar name
   \return SWITCH_STATUS_SUCCESS
 */
-SWITCH_DECLARE(switch_status_t) switch_core_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *path);
+SWITCH_DECLARE(switch_status_t) switch_core_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *name);
 
 /*!
   \brief Unload a grammar from an asr handle
   \param ah the handle to unload the grammar from
-  \param grammar the grammar to unload
+  \param name the name of the grammar to unload
   \return SWITCH_STATUS_SUCCESS
 */
-SWITCH_DECLARE(switch_status_t) switch_core_asr_unload_grammar(switch_asr_handle_t *ah, const char *grammar);
+SWITCH_DECLARE(switch_status_t) switch_core_asr_unload_grammar(switch_asr_handle_t *ah, const char *name);
 
 /*!
   \brief Pause detection on an asr handle
@@ -1651,6 +1651,37 @@
 */
 SWITCH_DECLARE(switch_status_t) switch_core_asr_resume(switch_asr_handle_t *ah);
 
+/*!
+  \brief Start input timers on an asr handle
+  \param ah the handle to start timers on
+  \return SWITCH_STATUS_SUCCESS
+*/
+SWITCH_DECLARE(switch_status_t) switch_core_asr_start_input_timers(switch_asr_handle_t *ah);
+
+/*!
+  \brief Set a text parameter on an asr handle
+  \param sh the asr handle
+  \param param the parameter
+  \param val the value
+*/
+SWITCH_DECLARE(void) switch_core_asr_text_param(switch_asr_handle_t *ah, char *param, const char *val);
+
+/*!
+  \brief Set a numeric parameter on an asr handle
+  \param sh the asr handle
+  \param param the parameter
+  \param val the value
+*/
+SWITCH_DECLARE(void) switch_core_asr_numeric_param(switch_asr_handle_t *ah, char *param, int val);
+
+/*!
+  \brief Set a float parameter on an asr handle
+  \param sh the asr handle
+  \param param the parameter
+  \param val the value
+*/
+SWITCH_DECLARE(void) switch_core_asr_float_param(switch_asr_handle_t *ah, char *param, double val);
+
 ///\}
 
 
@@ -1659,7 +1690,7 @@
 ///\{
 /*! 
   \brief Open a directory handle
-  \param dh a direcotry handle to use
+  \param dh a directory handle to use
   \param module_name the directory module to use
   \param source the source of the db (ip, hostname, path etc)
   \param dsn the username or designation of the lookup
@@ -1672,7 +1703,7 @@
 
 /*! 
   \brief Query a directory handle
-  \param dh a direcotry handle to use
+  \param dh a directory handle to use
   \param base the base to query against
   \param query a string of filters or query data
   \return SWITCH_STATUS_SUCCESS if the query is successful
@@ -1681,23 +1712,23 @@
 
 /*! 
   \brief Obtain the next record in a lookup
-  \param dh a direcotry handle to use
+  \param dh a directory handle to use
   \return SWITCH_STATUS_SUCCESS if another record exists
 */
 SWITCH_DECLARE(switch_status_t) switch_core_directory_next(switch_directory_handle_t *dh);
 
 /*! 
   \brief Obtain the next name/value pair in the current record
-  \param dh a direcotry handle to use
+  \param dh a directory handle to use
   \param var a pointer to pointer of the name to fill in
-  \param val a pointer to poinbter of the value to fill in
+  \param val a pointer to pointer of the value to fill in
   \return SWITCH_STATUS_SUCCESS if an item exists
 */
 SWITCH_DECLARE(switch_status_t) switch_core_directory_next_pair(switch_directory_handle_t *dh, char **var, char **val);
 
 /*! 
   \brief Close an open directory handle
-  \param dh a direcotry handle to close
+  \param dh a directory handle to close
   \return SWITCH_STATUS_SUCCESS if handle was closed
 */
 SWITCH_DECLARE(switch_status_t) switch_core_directory_close(switch_directory_handle_t *dh);

Modified: freeswitch/trunk/src/include/switch_ivr.h
==============================================================================
--- freeswitch/trunk/src/include/switch_ivr.h	(original)
+++ freeswitch/trunk/src/include/switch_ivr.h	Mon Jun  8 16:52:50 2009
@@ -148,15 +148,15 @@
   \brief Engage background Speech detection on a session
   \param session the session to attach
   \param mod_name the module name of the ASR library
-  \param grammar the grammar name
-  \param path the path to the grammar file
+  \param grammar the grammar text, URI, or local file name
+  \param name the grammar name
   \param dest the destination address
   \param ah an ASR handle to use (NULL to create one)
   \return SWITCH_STATUS_SUCCESS if all is well
 */
 SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech(switch_core_session_t *session,
 														 const char *mod_name,
-														 const char *grammar, const char *path, const char *dest, switch_asr_handle_t *ah);
+														 const char *grammar, const char *name, const char *dest, switch_asr_handle_t *ah);
 
 /*!
   \brief Stop background Speech detection on a session
@@ -182,19 +182,19 @@
 /*!
   \brief Load a grammar on a background speech detection handle
   \param session The session to change the grammar on
-  \param grammar the grammar name
-  \param path the grammar path
+  \param grammar the grammar text, URI, or local file name
+  \param name the grammar name
   \return SWITCH_STATUS_SUCCESS if all is well
 */
-SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_load_grammar(switch_core_session_t *session, char *grammar, char *path);
+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_load_grammar(switch_core_session_t *session, char *grammar, char *name);
 
 /*!
   \brief Unload a grammar on a background speech detection handle
   \param session The session to change the grammar on
-  \param grammar the grammar name
+  \param name the grammar name
   \return SWITCH_STATUS_SUCCESS if all is well
 */
-SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_core_session_t *session, const char *grammar);
+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_core_session_t *session, const char *name);
 
 /*!
   \brief Record a session to disk

Modified: freeswitch/trunk/src/include/switch_module_interfaces.h
==============================================================================
--- freeswitch/trunk/src/include/switch_module_interfaces.h	(original)
+++ freeswitch/trunk/src/include/switch_module_interfaces.h	Mon Jun  8 16:52:50 2009
@@ -342,9 +342,9 @@
 	/*! function to open the asr interface */
 	switch_status_t (*asr_open) (switch_asr_handle_t *ah, const char *codec, int rate, const char *dest, switch_asr_flag_t *flags);
 	/*! function to load a grammar to the asr interface */
-	switch_status_t (*asr_load_grammar) (switch_asr_handle_t *ah, const char *grammar, const char *path);
+	switch_status_t (*asr_load_grammar) (switch_asr_handle_t *ah, const char *grammar, const char *name);
 	/*! function to unload a grammar to the asr interface */
-	switch_status_t (*asr_unload_grammar) (switch_asr_handle_t *ah, const char *grammar);
+	switch_status_t (*asr_unload_grammar) (switch_asr_handle_t *ah, const char *name);
 	/*! function to close the asr interface */
 	switch_status_t (*asr_close) (switch_asr_handle_t *ah, switch_asr_flag_t *flags);
 	/*! function to feed audio to the ASR */
@@ -357,6 +357,11 @@
 	switch_status_t (*asr_check_results) (switch_asr_handle_t *ah, switch_asr_flag_t *flags);
 	/*! function to read results from the ASR */
 	switch_status_t (*asr_get_results) (switch_asr_handle_t *ah, char **xmlstr, switch_asr_flag_t *flags);
+	/*! function to start ASR input timers */
+	switch_status_t (*asr_start_input_timers) (switch_asr_handle_t *ah);
+	void (*asr_text_param) (switch_asr_handle_t *ah, char *param, const char *val);
+	void (*asr_numeric_param) (switch_asr_handle_t *ah, char *param, int val);
+	void (*asr_float_param) (switch_asr_handle_t *ah, char *param, double val);
 	switch_thread_rwlock_t *rwlock;
 	int refs;
 	switch_mutex_t *reflock;
@@ -409,7 +414,7 @@
 };
 
 
-/*! an abstract representation of a asr/tts speech interface. */
+/*! an abstract representation of a tts speech interface. */
 struct switch_speech_handle {
 	/*! the interface of the module that implemented the current speech interface */
 	switch_speech_interface_t *speech_interface;

Modified: freeswitch/trunk/src/mod/applications/mod_limit/Makefile
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_limit/Makefile	(original)
+++ freeswitch/trunk/src/mod/applications/mod_limit/Makefile	Mon Jun  8 16:52:50 2009
@@ -1,3 +1,4 @@
 BASE=../../../..
 include $(BASE)/build/modmake.rules
 LOCAL_CFLAGS += `if test -f $(BASE)/.libs/libfreeswitch_la-switch_odbc.o ; then echo -DSWITCH_HAVE_ODBC; fi ;`
+LOCAL_LIBADD += -liodbc

Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/Makefile
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_voicemail/Makefile	(original)
+++ freeswitch/trunk/src/mod/applications/mod_voicemail/Makefile	Mon Jun  8 16:52:50 2009
@@ -1,3 +1,4 @@
 BASE=../../../..
 include $(BASE)/build/modmake.rules
 LOCAL_CFLAGS += `if test -f $(BASE)/.libs/libfreeswitch_la-switch_odbc.o ; then echo -DSWITCH_HAVE_ODBC; fi ;`
+LOCAL_LIBADD += -liodbc

Modified: freeswitch/trunk/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c
==============================================================================
--- freeswitch/trunk/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c	(original)
+++ freeswitch/trunk/src/mod/asr_tts/mod_pocketsphinx/mod_pocketsphinx.c	Mon Jun  8 16:52:50 2009
@@ -111,7 +111,7 @@
 }
 
 /*! function to load a grammar to the asr interface */
-static switch_status_t pocketsphinx_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *path)
+static switch_status_t pocketsphinx_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *name)
 {
 	char *jsgf, *dic, *model, *rate = NULL;
 	pocketsphinx_t *ps = (pocketsphinx_t *) ah->private_info;
@@ -199,7 +199,7 @@
 }
 
 /*! function to unload a grammar to the asr interface */
-static switch_status_t pocketsphinx_asr_unload_grammar(switch_asr_handle_t *ah, const char *grammar)
+static switch_status_t pocketsphinx_asr_unload_grammar(switch_asr_handle_t *ah, const char *name)
 {
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -506,6 +506,10 @@
 	asr_interface->asr_pause = pocketsphinx_asr_pause;
 	asr_interface->asr_check_results = pocketsphinx_asr_check_results;
 	asr_interface->asr_get_results = pocketsphinx_asr_get_results;
+	asr_interface->asr_start_input_timers = NULL;
+	asr_interface->asr_text_param = NULL;
+	asr_interface->asr_numeric_param = NULL;
+	asr_interface->asr_float_param = NULL;
 
 	err_set_logfp(NULL);
 

Modified: freeswitch/trunk/src/switch_core_asr.c
==============================================================================
--- freeswitch/trunk/src/switch_core_asr.c	(original)
+++ freeswitch/trunk/src/switch_core_asr.c	Mon Jun  8 16:52:50 2009
@@ -26,6 +26,7 @@
  * Anthony Minessale II <anthm at freeswitch.org>
  * Michael Jerris <mike at jerris.com>
  * Paul D. Tinsley <pdt at jackhammer.org>
+ * Christopher M. Rienzo <chris at rienzo.net>
  *
  *
  * switch_core_asr.c -- Main Core Library (Speech Detection Interface)
@@ -79,30 +80,74 @@
 	return ah->asr_interface->asr_open(ah, codec, rate, dest, flags);
 }
 
-SWITCH_DECLARE(switch_status_t) switch_core_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *path)
+SWITCH_DECLARE(switch_status_t) switch_core_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *name)
 {
-	char *epath = NULL;
-	switch_status_t status;
+	switch_status_t status = SWITCH_STATUS_SUCCESS;
+	char *param_string = NULL;
+	char *data = NULL;
+	char *lgrammar = NULL;
 
 	switch_assert(ah != NULL);
 
-	if (!switch_is_file_path(path)) {
-		epath = switch_mprintf("%s%s%s", SWITCH_GLOBAL_dirs.grammar_dir, SWITCH_PATH_SEPARATOR, path);
-		path = epath;
+	if (switch_strlen_zero(grammar)) {
+		status = SWITCH_STATUS_FALSE;
+		goto done;
+	}
+
+	/* Set ASR parameters from params in the grammar string
+	 * Params are defined as follows {name1=val1,name2=val2,name3=val3}grammar text
+	 */
+	lgrammar = strdup(grammar);
+	data = lgrammar;
+
+	/* strip leading spaces */
+	while (data && *data == ' ') {
+		data++;
+	}
+	if (switch_strlen_zero(data)) {
+		status = SWITCH_STATUS_FALSE;
+		goto done;
+	}
+	
+	/* extract params */
+	if (*data == '{') {
+		param_string = data + 1;
+		data = switch_find_end_paren(data, '{', '}');
+		if (switch_strlen_zero(data)) {
+			status = SWITCH_STATUS_FALSE;
+			goto done;
+		} else {	
+			*data = '\0';
+			data++;
+		}
+	}
+
+	/* set ASR params */
+	if (!switch_strlen_zero(param_string)) {
+		char *param[256] = { 0 };
+		switch_separate_string(param_string, ',', param, (sizeof(param) / sizeof(param[0])));
+		for (int i = 0; param[i]; ++i) {
+			char *param_pair[2] = { 0 };
+			if(switch_separate_string(param[i], '=', param_pair, (sizeof(param_pair) / sizeof(param_pair[0]))) == 2) {
+				switch_core_asr_text_param(ah, param_pair[0], param_pair[1]);
+			}
+		}
 	}
 
-	status = ah->asr_interface->asr_load_grammar(ah, grammar, path);
-	switch_safe_free(epath);
+	status = ah->asr_interface->asr_load_grammar(ah, data, name);
 
+ done:
+
+	switch_safe_free(lgrammar);
 	return status;
 }
 
-SWITCH_DECLARE(switch_status_t) switch_core_asr_unload_grammar(switch_asr_handle_t *ah, const char *grammar)
+SWITCH_DECLARE(switch_status_t) switch_core_asr_unload_grammar(switch_asr_handle_t *ah, const char *name)
 {
 	switch_status_t status;
 
 	switch_assert(ah != NULL);
-	status = ah->asr_interface->asr_unload_grammar(ah, grammar);
+	status = ah->asr_interface->asr_unload_grammar(ah, name);
 
 	return status;
 }
@@ -158,6 +203,46 @@
 	return ah->asr_interface->asr_get_results(ah, xmlstr, flags);
 }
 
+SWITCH_DECLARE(switch_status_t) switch_core_asr_start_input_timers(switch_asr_handle_t *ah)
+{
+	switch_status_t status = SWITCH_STATUS_SUCCESS;
+
+	switch_assert(ah != NULL);
+
+	if (ah->asr_interface->asr_start_input_timers) {
+		status = ah->asr_interface->asr_start_input_timers(ah);
+	}
+
+	return status;
+}
+
+SWITCH_DECLARE(void) switch_core_asr_text_param(switch_asr_handle_t *ah, char *param, const char *val)
+{
+	switch_assert(ah != NULL);
+
+	if (ah->asr_interface->asr_text_param) {
+		ah->asr_interface->asr_text_param(ah, param, val);
+	}
+}
+
+SWITCH_DECLARE(void) switch_core_asr_numeric_param(switch_asr_handle_t *ah, char *param, int val)
+{
+	switch_assert(ah != NULL);
+
+	if (ah->asr_interface->asr_numeric_param) {
+		ah->asr_interface->asr_numeric_param(ah, param, val);
+	}
+}
+
+SWITCH_DECLARE(void) switch_core_asr_float_param(switch_asr_handle_t *ah, char *param, double val)
+{
+	switch_assert(ah != NULL);
+
+	if (ah->asr_interface->asr_float_param) {
+		ah->asr_interface->asr_float_param(ah, param, val);
+	}
+}
+
 /* For Emacs:
  * Local Variables:
  * mode:c

Modified: freeswitch/trunk/src/switch_core_speech.c
==============================================================================
--- freeswitch/trunk/src/switch_core_speech.c	(original)
+++ freeswitch/trunk/src/switch_core_speech.c	Mon Jun  8 16:52:50 2009
@@ -22,10 +22,11 @@
  * the Initial Developer. All Rights Reserved.
  *
  * Contributor(s):
- * 
+ *
  * Anthony Minessale II <anthm at freeswitch.org>
  * Michael Jerris <mike at jerris.com>
  * Paul D. Tinsley <pdt at jackhammer.org>
+ * Christopher M. Rienzo <chris at rienzo.net>
  *
  *
  * switch_core_speech.c -- Main Core Library (speech functions)
@@ -92,9 +93,64 @@
 
 SWITCH_DECLARE(switch_status_t) switch_core_speech_feed_tts(switch_speech_handle_t *sh, char *text, switch_speech_flag_t *flags)
 {
+	switch_status_t status = SWITCH_STATUS_SUCCESS;
+	char *param_string = NULL;
+	char *data = NULL;
+	char *ltext = NULL;
+
 	switch_assert(sh != NULL);
 
-	return sh->speech_interface->speech_feed_tts(sh, text, flags);
+	if (switch_strlen_zero(text)) {
+		status = SWITCH_STATUS_FALSE;
+		goto done;
+	}
+
+	/* Set TTS parameters from params in the text string
+	 * Params are defined as follows {name1=val1,name2=val2,name3=val3}text to speak
+	 */
+	ltext = strdup(text);
+	data = ltext;
+
+	/* strip leading spaces */
+	while (data && *data == ' ') {
+		data++;
+	}
+	if (switch_strlen_zero(data)) {
+		status = SWITCH_STATUS_FALSE;
+		goto done;
+	}
+	
+	/* extract params */
+	if (*data == '{') {
+		param_string = data + 1;
+		data = switch_find_end_paren(data, '{', '}');
+		if (switch_strlen_zero(data)) {
+			status = SWITCH_STATUS_FALSE;
+			goto done;
+		} else {
+			*data = '\0';
+			data++;
+		}
+	}
+
+	/* set TTS params */
+	if (!switch_strlen_zero(param_string)) {
+		char *param[256] = { 0 };
+		switch_separate_string(param_string, ',', param, (sizeof(param) / sizeof(param[0])));
+		for (int i = 0; param[i]; ++i) {
+			char *param_pair[2] = { 0 };
+			if(switch_separate_string(param[i], '=', param_pair, (sizeof(param_pair) / sizeof(param_pair[0]))) == 2) {
+				switch_core_speech_text_param_tts(sh, param_pair[0], param_pair[1]);
+			}
+		}
+	}
+
+	status = sh->speech_interface->speech_feed_tts(sh, data, flags);
+
+ done:
+
+	switch_safe_free(ltext);
+	return status;	
 }
 
 SWITCH_DECLARE(void) switch_core_speech_flush_tts(switch_speech_handle_t *sh)

Modified: freeswitch/trunk/src/switch_ivr_async.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_async.c	(original)
+++ freeswitch/trunk/src/switch_ivr_async.c	Mon Jun  8 16:52:50 2009
@@ -2027,14 +2027,14 @@
 	return SWITCH_STATUS_FALSE;
 }
 
-SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_load_grammar(switch_core_session_t *session, char *grammar, char *path)
+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_load_grammar(switch_core_session_t *session, char *grammar, char *name)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	switch_asr_flag_t flags = SWITCH_ASR_FLAG_NONE;
 	struct speech_thread_handle *sth = switch_channel_get_private(channel, SWITCH_SPEECH_KEY);
 
 	if (sth) {
-		if (switch_core_asr_load_grammar(sth->ah, grammar, path) != SWITCH_STATUS_SUCCESS) {
+		if (switch_core_asr_load_grammar(sth->ah, grammar, name) != SWITCH_STATUS_SUCCESS) {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Error loading Grammar\n");
 			switch_core_asr_close(sth->ah, &flags);
 			switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
@@ -2045,14 +2045,14 @@
 	return SWITCH_STATUS_FALSE;
 }
 
-SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_core_session_t *session, const char *grammar)
+SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech_unload_grammar(switch_core_session_t *session, const char *name)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	switch_asr_flag_t flags = SWITCH_ASR_FLAG_NONE;
 	struct speech_thread_handle *sth = switch_channel_get_private(channel, SWITCH_SPEECH_KEY);
 
 	if (sth) {
-		if (switch_core_asr_unload_grammar(sth->ah, grammar) != SWITCH_STATUS_SUCCESS) {
+		if (switch_core_asr_unload_grammar(sth->ah, name) != SWITCH_STATUS_SUCCESS) {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Error unloading Grammar\n");
 			switch_core_asr_close(sth->ah, &flags);
 			switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
@@ -2065,7 +2065,7 @@
 
 SWITCH_DECLARE(switch_status_t) switch_ivr_detect_speech(switch_core_session_t *session,
 														 const char *mod_name,
-														 const char *grammar, const char *path, const char *dest, switch_asr_handle_t *ah)
+														 const char *grammar, const char *name, const char *dest, switch_asr_handle_t *ah)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	switch_status_t status;
@@ -2085,7 +2085,7 @@
 	}
 
 	if (sth) {
-		if (switch_core_asr_load_grammar(sth->ah, grammar, path) != SWITCH_STATUS_SUCCESS) {
+		if (switch_core_asr_load_grammar(sth->ah, grammar, name) != SWITCH_STATUS_SUCCESS) {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Error loading Grammar\n");
 			switch_core_asr_close(sth->ah, &flags);
 			return SWITCH_STATUS_FALSE;
@@ -2100,7 +2100,7 @@
 							 read_impl.actual_samples_per_second, dest, &flags,
 							 switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) {
 
-		if (switch_core_asr_load_grammar(ah, grammar, path) != SWITCH_STATUS_SUCCESS) {
+		if (switch_core_asr_load_grammar(ah, grammar, name) != SWITCH_STATUS_SUCCESS) {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Error loading Grammar\n");
 			switch_core_asr_close(ah, &flags);
 			switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);



More information about the Freeswitch-trunk mailing list