From 4fc4be2c39f13566d72f33e977017dd9c4fbf823 Mon Sep 17 00:00:00 2001
From: Traun Leyden <tleyden@branchcut.com>
Date: Mon, 20 Aug 2007 22:18:06 +0000
Subject: [PATCH] attempting to fix shutdown segfault, convert to new style
 module loading as seen in mod_cepstral

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@5643 d0543943-73ff-0310-b7d9-9358b9ac24b2
---
 src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c | 68 ++++++++-------------
 1 file changed, 26 insertions(+), 42 deletions(-)

diff --git a/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c b/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c
index a0cfbf3f6b..75092a4de7 100644
--- a/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c
+++ b/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c
@@ -705,47 +705,6 @@ static void openmrcp_float_param_tts(switch_speech_handle_t *sh, char *param, do
 
 }
 
-static switch_asr_interface_t openmrcp_asr_interface = {
-	/*.interface_name*/			"openmrcp",
-	/*.asr_open*/				openmrcp_asr_open,
-	/*.asr_load_grammar*/		openmrcp_asr_load_grammar,
-	/*.asr_unload_grammar*/		openmrcp_asr_unload_grammar,
-	/*.asr_close*/				openmrcp_asr_close,
-	/*.asr_feed*/				openmrcp_asr_feed,
-	/*.asr_resume*/				openmrcp_asr_resume,
-	/*.asr_pause*/				openmrcp_asr_pause,
-	/*.asr_check_results*/		openmrcp_asr_check_results,
-	/*.asr_get_results*/		openmrcp_asr_get_results
-};
-
-static switch_speech_interface_t openmrcp_tts_interface = {
-	/*.interface_name*/			"openmrcp",
-	/*.speech_open*/ openmrcp_tts_open,
-	/*.speech_close*/ openmrcp_tts_close,
-	/*.speech_feed_tts*/ openmrcp_feed_tts,
-	/*.speech_read_tts*/ openmrcp_read_tts,
-	/*.speech_flush_tts*/ openmrcp_flush_tts,
-	/*.speech_text_param_tts*/ openmrcp_text_param_tts,
-	/*.speech_numeric_param_tts*/ openmrcp_numeric_param_tts,
-	/*.speech_float_param_tts*/	openmrcp_float_param_tts,
-};
-
-static switch_loadable_module_interface_t openmrcp_module_interface = {
-	/*.module_name */ modname,
-	/*.endpoint_interface */ NULL,
-	/*.timer_interface */ NULL,
-	/*.dialplan_interface */ NULL,
-	/*.codec_interface */ NULL,
-	/*.application_interface */ NULL,
-	/*.api_interface */ NULL,
-	/*.file_interface */ NULL,
-	/*.speech_interface */ &openmrcp_tts_interface,
-	/*.directory_interface */ NULL,
-	/*.chat_interface */ NULL,
-	/*.say_interface */ NULL,
-	/*.asr_interface */ &openmrcp_asr_interface
-};
-
 
 static switch_status_t do_config()
 {
@@ -920,8 +879,33 @@ static switch_status_t openmrcp_init()
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_openmrcp_load)
 {
+
+	switch_speech_interface_t *speech_interface;
+	switch_asr_interface_t *asr_interface;
+
 	/* connect my internal structure to the blank pointer passed to me */
-	*module_interface = &openmrcp_module_interface;
+	*module_interface = switch_loadable_module_create_module_interface(pool, modname);
+	speech_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_SPEECH_INTERFACE);
+	speech_interface->interface_name = "openmrcp";
+	speech_interface->speech_open = openmrcp_tts_open;
+	speech_interface->speech_close = openmrcp_tts_close;
+	speech_interface->speech_feed_tts = openmrcp_feed_tts;
+	speech_interface->speech_read_tts = openmrcp_read_tts;
+	speech_interface->speech_flush_tts = openmrcp_flush_tts;
+	speech_interface->speech_text_param_tts = openmrcp_text_param_tts;
+	speech_interface->speech_numeric_param_tts = openmrcp_numeric_param_tts;
+	speech_interface->speech_float_param_tts = openmrcp_float_param_tts;
+	asr_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ASR_INTERFACE);
+	asr_interface->interface_name = "openmrcp";
+	asr_interface->asr_open = openmrcp_asr_open;
+	asr_interface->asr_load_grammar = openmrcp_asr_load_grammar;
+	asr_interface->asr_unload_grammar = openmrcp_asr_unload_grammar;
+	asr_interface->asr_close = openmrcp_asr_close;
+	asr_interface->asr_feed = openmrcp_asr_feed;
+	asr_interface->asr_resume = openmrcp_asr_resume;
+	asr_interface->asr_pause = openmrcp_asr_pause;
+	asr_interface->asr_check_results = openmrcp_asr_check_results;
+	asr_interface->asr_get_results = openmrcp_asr_get_results;
 
 	mrcp_global_init();