[Freeswitch-svn] [commit] r5403 - in freeswitch/trunk/src: . include mod/asr_tts/mod_cepstral mod/directories/mod_ldap mod/endpoints/mod_dingaling mod/endpoints/mod_portaudio mod/endpoints/mod_sofia mod/endpoints/mod_woomera

Freeswitch SVN mikej at freeswitch.org
Wed Jun 20 03:15:54 EDT 2007


Author: mikej
Date: Wed Jun 20 03:15:53 2007
New Revision: 5403

Modified:
   freeswitch/trunk/src/include/switch_event.h
   freeswitch/trunk/src/mod/asr_tts/mod_cepstral/mod_cepstral.c
   freeswitch/trunk/src/mod/directories/mod_ldap/mod_ldap.c
   freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c
   freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c
   freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c
   freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h
   freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c
   freeswitch/trunk/src/mod/endpoints/mod_woomera/mod_woomera.c
   freeswitch/trunk/src/switch_event.c

Log:
add more modules to new mod loader macros/api.

Modified: freeswitch/trunk/src/include/switch_event.h
==============================================================================
--- freeswitch/trunk/src/include/switch_event.h	(original)
+++ freeswitch/trunk/src/include/switch_event.h	Wed Jun 20 03:15:53 2007
@@ -208,7 +208,7 @@
   \param user_data optional user specific data to pass whenever the callback is invoked
   \return SWITCH_STATUS_SUCCESS if the event was binded
 */
-SWITCH_DECLARE(switch_status_t) switch_event_bind(char *id, switch_event_types_t event, char *subclass_name, switch_event_callback_t callback,
+SWITCH_DECLARE(switch_status_t) switch_event_bind(const char *id, switch_event_types_t event, char *subclass_name, switch_event_callback_t callback,
 												  void *user_data);
 
 /*!

Modified: freeswitch/trunk/src/mod/asr_tts/mod_cepstral/mod_cepstral.c
==============================================================================
--- freeswitch/trunk/src/mod/asr_tts/mod_cepstral/mod_cepstral.c	(original)
+++ freeswitch/trunk/src/mod/asr_tts/mod_cepstral/mod_cepstral.c	Wed Jun 20 03:15:53 2007
@@ -402,33 +402,9 @@
 
 }
 
-static switch_speech_interface_t cepstral_speech_interface = {
-	/*.interface_name */ "cepstral",
-	/*.speech_open */ cepstral_speech_open,
-	/*.speech_close */ cepstral_speech_close,
-	/*.speech_feed_tts */ cepstral_speech_feed_tts,
-	/*.speech_read_tts */ cepstral_speech_read_tts,
-	/*.speech_flush_tts */ cepstral_speech_flush_tts,
-	/*.speech_text_param_tts */ cepstral_text_param_tts,
-	/*.speech_numeric_param_tts */ cepstral_numeric_param_tts,
-	/*.speech_numeric_param_tts */ cepstral_float_param_tts
-};
-
-static switch_loadable_module_interface_t cepstral_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 */ &cepstral_speech_interface,
-	/*.directory_interface */ NULL
-};
-
 SWITCH_MODULE_LOAD_FUNCTION(mod_cepstral_load)
 {
+	switch_speech_interface_t *speech_interface;
 
 	/* Open the Swift TTS Engine */
 	if (SWIFT_FAILED(engine = swift_engine_open(NULL))) {
@@ -437,7 +413,17 @@
 	}
 
 	/* connect my internal structure to the blank pointer passed to me */
-	*module_interface = &cepstral_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 = "cepstral";
+	speech_interface->speech_open = cepstral_speech_open;
+	speech_interface->speech_close = cepstral_speech_close;
+	speech_interface->speech_feed_tts = cepstral_speech_feed_tts;
+	speech_interface->speech_read_tts = cepstral_speech_read_tts;
+	speech_interface->speech_flush_tts = cepstral_speech_flush_tts;
+	speech_interface->speech_text_param_tts = cepstral_text_param_tts;
+	speech_interface->speech_numeric_param_tts = cepstral_numeric_param_tts;
+	speech_interface->speech_float_param_tts = cepstral_float_param_tts;
 
 	/* indicate that the module should continue to be loaded */
 	return SWITCH_STATUS_SUCCESS;

Modified: freeswitch/trunk/src/mod/directories/mod_ldap/mod_ldap.c
==============================================================================
--- freeswitch/trunk/src/mod/directories/mod_ldap/mod_ldap.c	(original)
+++ freeswitch/trunk/src/mod/directories/mod_ldap/mod_ldap.c	Wed Jun 20 03:15:53 2007
@@ -198,33 +198,19 @@
 }
 
 
-static switch_directory_interface_t ldap_directory_interface = {
-	/*.interface_name */ "ldap",
-	/*.directory_open */ mod_ldap_open,
-	/*.directory_close */ mod_ldap_close,
-	/*.directory_query */ mod_ldap_query,
-	/*.directory_next */ mod_ldap_next,
-	/*.directory_next_pair */ mod_ldap_next_pair
-};
-
-
-static switch_loadable_module_interface_t ldap_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 */ NULL,
-	/*.directory_interface */ &ldap_directory_interface
-};
-
 SWITCH_MODULE_LOAD_FUNCTION(mod_ldap_load)
 {
+	switch_directory_interface_t *dir_interface;
+
 	/* connect my internal structure to the blank pointer passed to me */
-	*module_interface = &ldap_module_interface;
+	*module_interface = switch_loadable_module_create_module_interface(pool, modname);
+	dir_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_DIRECTORY_INTERFACE);
+	dir_interface->interface_name = "ldap";
+	dir_interface->directory_open = mod_ldap_open;
+	dir_interface->directory_close = mod_ldap_close;
+	dir_interface->directory_query = mod_ldap_query;
+	dir_interface->directory_next = mod_ldap_next;
+	dir_interface->directory_next_pair = mod_ldap_next_pair;
 
 	/* indicate that the module should continue to be loaded */
 	return SWITCH_STATUS_SUCCESS;

Modified: freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_dingaling/mod_dingaling.c	Wed Jun 20 03:15:53 2007
@@ -48,6 +48,7 @@
 SWITCH_MODULE_DEFINITION(mod_dingaling, mod_dingaling_load, mod_dingaling_shutdown, NULL);
 
 static switch_memory_pool_t *module_pool = NULL;
+static switch_endpoint_interface_t *channel_endpoint_interface;
 
 static char sub_sql[] =
 	"CREATE TABLE jabber_subscriptions (\n"
@@ -1590,65 +1591,6 @@
 	/*.receive_event */ channel_receive_event
 };
 
-static switch_endpoint_interface_t channel_endpoint_interface = {
-	/*.interface_name */ "dingaling",
-	/*.io_routines */ &channel_io_routines,
-	/*.event_handlers */ &channel_event_handlers,
-	/*.private */ NULL,
-	/*.next */ NULL
-};
-
-
-static switch_api_interface_t debug_api_interface = {
-	/*.interface_name */ "dl_debug",
-	/*.desc */ "DingaLing Debug",
-	/*.function */ dl_debug,
-	/*.syntax */ "dl_debug [true|false]",
-	/*.next */ NULL
-};
-
-static switch_api_interface_t pres_api_interface = {
-	/*.interface_name */ "dl_pres",
-	/*.desc */ "DingaLing Presence",
-	/*.function */ dl_pres,
-	/*.syntax */ "dl_pres <profile_name>",
-	/*.next */ &debug_api_interface
-};
-
-static switch_api_interface_t logout_api_interface = {
-	/*.interface_name */ "dl_logout",
-	/*.desc */ "DingaLing Logout",
-	/*.function */ dl_logout,
-	/*.syntax */ "dl_logout <profile_name>",
-	/*.next */ &pres_api_interface
-};
-
-static switch_api_interface_t login_api_interface = {
-	/*.interface_name */ "dl_login",
-	/*.desc */ "DingaLing Login",
-	/*.function */ dl_login,
-	/*.syntax */ "dl_login <profile_name>",
-	/*.next */ &logout_api_interface
-};
-
-static switch_chat_interface_t channel_chat_interface = {
-	/*.name */ MDL_CHAT_PROTO,
-	/*.chat_send */ chat_send,
-};
-
-static switch_loadable_module_interface_t channel_module_interface = {
-	/*.module_name */ modname,
-	/*.endpoint_interface */ &channel_endpoint_interface,
-	/*.timer_interface */ NULL,
-	/*.dialplan_interface */ NULL,
-	/*.codec_interface */ NULL,
-	/*.application_interface */ NULL,
-	/*.api_interface */ &login_api_interface,
-	/*.file_interface */ NULL,
-	/*.speech_interface */ NULL,
-	/*.directory_interface */ NULL,
-	/*.chat_interface */ &channel_chat_interface
-};
 
 
 /* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
@@ -1658,7 +1600,7 @@
 													switch_caller_profile_t *outbound_profile,
 													switch_core_session_t **new_session, switch_memory_pool_t **pool)
 {
-	if ((*new_session = switch_core_session_request(&channel_endpoint_interface, pool)) != 0) {
+	if ((*new_session = switch_core_session_request(channel_endpoint_interface, pool)) != 0) {
 		struct private_object *tech_pvt;
 		switch_channel_t *channel;
 		switch_caller_profile_t *caller_profile = NULL;
@@ -1828,11 +1770,10 @@
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_dingaling_load)
 {
+	switch_chat_interface_t *chat_interface;
+	switch_api_interface_t *api_interface;
 
-	if (switch_core_new_memory_pool(&module_pool) != SWITCH_STATUS_SUCCESS) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "OH OH no pool\n");
-		return SWITCH_STATUS_TERM;
-	}
+	module_pool = pool;
 
 	load_config();
 
@@ -1873,7 +1814,22 @@
 	}
 
 	/* connect my internal structure to the blank pointer passed to me */
-	*module_interface = &channel_module_interface;
+	*module_interface = switch_loadable_module_create_module_interface(pool, modname);
+	channel_endpoint_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE);
+	channel_endpoint_interface->interface_name = modname;
+	channel_endpoint_interface->io_routines = &channel_io_routines;
+	channel_endpoint_interface->state_handler = &channel_event_handlers;
+
+#define PRES_SYNTAX "dl_pres <profile_name>"
+#define LOGOUT_SYNTAX "dl_logout <profile_name>"
+#define LOGIN_SYNTAX "dl_login <profile_name>"
+#define DEBUG_SYNTAX "dl_debug [true|false]"
+
+	SWITCH_ADD_API(api_interface, "dl_debug", "DingaLing Debug", dl_debug, DEBUG_SYNTAX);
+	SWITCH_ADD_API(api_interface, "dl_pres", "DingaLing Presence", dl_pres, PRES_SYNTAX);
+	SWITCH_ADD_API(api_interface, "dl_logout", "DingaLing Logout", dl_logout, LOGOUT_SYNTAX);
+	SWITCH_ADD_API(api_interface, "dl_login", "DingaLing Login", dl_login, LOGIN_SYNTAX);
+	SWITCH_ADD_CHAT(chat_interface, MDL_CHAT_PROTO, chat_send);
 
 	/* indicate that the module should continue to be loaded */
 	return SWITCH_STATUS_SUCCESS;
@@ -2059,7 +2015,7 @@
 	}
 
 	if (!cmd) {
-		stream->write_function(stream, "USAGE: %s\n", pres_api_interface.syntax);
+		stream->write_function(stream, "USAGE: %s\n", PRES_SYNTAX);
 		return SWITCH_STATUS_SUCCESS;
 	}
 
@@ -2086,7 +2042,7 @@
 	}
 
 	if (!cmd) {
-		stream->write_function(stream, "USAGE: %s\n", logout_api_interface.syntax);
+		stream->write_function(stream, "USAGE: %s\n", LOGOUT_SYNTAX);
 		return SWITCH_STATUS_SUCCESS;
 	}
 
@@ -2113,7 +2069,7 @@
 	}
 
 	if (switch_strlen_zero(cmd)) {
-		stream->write_function(stream, "USAGE: %s\n", login_api_interface.syntax);
+		stream->write_function(stream, "USAGE: %s\n", LOGIN_SYNTAX);
 		return SWITCH_STATUS_SUCCESS;
 	}
 
@@ -2122,7 +2078,7 @@
 	argc = switch_separate_string(myarg, ';', argv, (sizeof(argv) / sizeof(argv[0])));
 
 	if (switch_strlen_zero(cmd) || argc != 1) {
-		stream->write_function(stream, "USAGE: %s\n", login_api_interface.syntax);
+		stream->write_function(stream, "USAGE: %s\n", LOGIN_SYNTAX);
 		return SWITCH_STATUS_SUCCESS;
 	}
 
@@ -2603,7 +2559,7 @@
 			status = LDL_STATUS_FALSE;
 			goto done;
 		}
-		if ((session = switch_core_session_request(&channel_endpoint_interface, NULL)) != 0) {
+		if ((session = switch_core_session_request(channel_endpoint_interface, NULL)) != 0) {
 			switch_core_session_add_stream(session, NULL);
 
 			

Modified: freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_portaudio/mod_portaudio.c	Wed Jun 20 03:15:53 2007
@@ -44,7 +44,7 @@
 SWITCH_MODULE_DEFINITION(mod_portaudio, mod_portaudio_load, mod_portaudio_shutdown, NULL);
 
 static switch_memory_pool_t *module_pool = NULL;
-//static int running = 1;
+static switch_endpoint_interface_t *channel_endpoint_interface;
 
 #define SAMPLE_TYPE  paInt16
 //#define SAMPLE_TYPE  paFloat32
@@ -734,54 +734,6 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_api_interface_t send_dtmf_interface = {
-	/*.interface_name */ "padtmf",
-	/*.desc */ "DEPRICATED (see 'pa')",
-	/*.function */ padep,
-	/*.syntax */ "DEPRICATED (see 'pa')",
-	/*.next */ NULL
-};
-
-static switch_api_interface_t answer_call_interface = {
-	/*.interface_name */ "paoffhook",
-	/*.desc */ "DEPRICATED (see 'pa')",
-	/*.function */ padep,
-	/*.syntax */ "DEPRICATED (see 'pa')",
-	/*.next */ &send_dtmf_interface
-};
-
-static switch_api_interface_t channel_info_interface = {
-	/*.interface_name */ "painfo",
-	/*.desc */ "DEPRICATED (see 'pa')",
-	/*.function */ padep,
-	/*.syntax */ "DEPRICATED (see 'pa')",
-	/*.next */ &answer_call_interface
-};
-
-static switch_api_interface_t channel_hup_interface = {
-	/*.interface_name */ "pahup",
-	/*.desc */ "DEPRICATED (see 'pa')",
-	/*.function */ padep,
-	/*.syntax */ "DEPRICATED (see 'pa')",
-	/*.next */ &channel_info_interface
-};
-
-static switch_api_interface_t channel_call_interface = {
-	/*.interface_name */ "pacall",
-	/*.desc */ "DEPRICATED (see 'pa')",
-	/*.function */ padep,
-	/*.syntax */ "DEPRICATED (see 'pa')",
-	/*.next */ &channel_hup_interface
-};
-
-static switch_api_interface_t channel_api_interface = {
-	/*.interface_name */ "pa",
-	/*.desc */ "PortAudio",
-	/*.function */ pa_cmd,
-	/*.syntax */ "<command> [<args>]",
-	/*.next */ &channel_call_interface
-};
-
 static switch_state_handler_table_t channel_event_handlers = {
 	/*.on_init */ channel_on_init,
 	/*.on_ring */ channel_on_ring,
@@ -802,24 +754,6 @@
 	/*.receive_message */ channel_receive_message
 };
 
-static switch_endpoint_interface_t channel_endpoint_interface = {
-	/*.interface_name */ "portaudio",
-	/*.io_routines */ &channel_io_routines,
-	/*.event_handlers */ &channel_event_handlers,
-	/*.private */ NULL,
-	/*.next */ NULL
-};
-
-static switch_loadable_module_interface_t channel_module_interface = {
-	/*.module_name */ modname,
-	/*.endpoint_interface */ &channel_endpoint_interface,
-	/*.timer_interface */ NULL,
-	/*.dialplan_interface */ NULL,
-	/*.codec_interface */ NULL,
-	/*.application_interface */ NULL,
-	/*.api_interface */ &channel_api_interface
-};
-
 /* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
    that allocate memory or you will have 1 channel with memory allocated from another channel's pool!
 */
@@ -828,7 +762,7 @@
 													switch_core_session_t **new_session, switch_memory_pool_t **pool)
 {
 
-	if ((*new_session = switch_core_session_request(&channel_endpoint_interface, pool)) != 0) {
+	if ((*new_session = switch_core_session_request(channel_endpoint_interface, pool)) != 0) {
 		private_t *tech_pvt;
 		switch_channel_t *channel;
 		switch_caller_profile_t *caller_profile;
@@ -876,13 +810,10 @@
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_portaudio_load)
 {
-
 	switch_status_t status;
+	switch_api_interface_t *api_interface;
 
-	if (switch_core_new_memory_pool(&module_pool) != SWITCH_STATUS_SUCCESS) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "OH OH no pool\n");
-		return SWITCH_STATUS_TERM;
-	}
+	module_pool = pool;
 
 	Pa_Initialize();
 
@@ -921,7 +852,13 @@
 	switch_set_flag((&globals.cng_frame), SFF_CNG);
 
 	/* connect my internal structure to the blank pointer passed to me */
-	*module_interface = &channel_module_interface;
+	*module_interface = switch_loadable_module_create_module_interface(pool, modname);
+	channel_endpoint_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE);
+	channel_endpoint_interface->interface_name = modname;
+	channel_endpoint_interface->io_routines = &channel_io_routines;
+	channel_endpoint_interface->state_handler = &channel_event_handlers;
+
+	SWITCH_ADD_API(api_interface, "pa", "PortAudio", pa_cmd, "<command> [<args>]");
 
 	/* indicate that the module should continue to be loaded */
 	return SWITCH_STATUS_SUCCESS;
@@ -1639,7 +1576,7 @@
 	}
 	dest = argv[0];
 
-	if ((session = switch_core_session_request(&channel_endpoint_interface, NULL)) != 0) {
+	if ((session = switch_core_session_request(channel_endpoint_interface, NULL)) != 0) {
 		private_t *tech_pvt;
 		switch_channel_t *channel;
 		char *dialplan = globals.dialplan;

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.c	Wed Jun 20 03:15:53 2007
@@ -43,7 +43,7 @@
 SWITCH_MODULE_DEFINITION(mod_sofia, mod_sofia_load, mod_sofia_shutdown, NULL);
 
 struct mod_sofia_globals mod_sofia_globals;
-switch_endpoint_interface_t sofia_endpoint_interface;
+switch_endpoint_interface_t *sofia_endpoint_interface;
 static switch_frame_t silence_frame = { 0 };
 static char silence_data[13] = "";
 
@@ -1288,56 +1288,11 @@
 	/*.on_transmit */ sofia_on_transmit
 };
 
-switch_endpoint_interface_t sofia_endpoint_interface = {
-	/*.interface_name */ "sofia",
-	/*.io_routines */ &sofia_io_routines,
-	/*.event_handlers */ &sofia_event_handlers,
-	/*.private */ NULL,
-	/*.next */ NULL
-};
-
-static switch_chat_interface_t sofia_chat_interface = {
-	/*.name */ SOFIA_CHAT_PROTO,
-	/*.sofia_presence_chat_send */ sofia_presence_chat_send,
-
-};
-
 static switch_status_t sofia_manage(char *relative_oid, switch_management_action_t action, char *data, switch_size_t datalen)
 {
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_management_interface_t sofia_management_interface = {
-	/*.relative_oid */ "1",
-	/*.management_function */ sofia_manage
-};
-
-static switch_api_interface_t sofia_api_interface = {
-	/*.interface_name */ "sofia",
-	/*.desc */ "Sofia Controls",
-	/*.function */ sofia_function,
-	/*.syntax */ "<cmd> <args>",
-	/*.next */ NULL
-};
-
-static switch_loadable_module_interface_t sofia_module_interface = {
-	/*.module_name */ modname,
-	/*.endpoint_interface */ &sofia_endpoint_interface,
-	/*.timer_interface */ NULL,
-	/*.dialplan_interface */ NULL,
-	/*.codec_interface */ NULL,
-	/*.application_interface */ NULL,
-	/*.api_interface */ &sofia_api_interface,
-	/*.file_interface */ NULL,
-	/*.speech_interface */ NULL,
-	/*.directory_interface */ NULL,
-	/*.chat_interface */ &sofia_chat_interface,
-	/*.say_interface */ NULL,
-	/*.asr_interface */ NULL,
-	/*.management_interface */ &sofia_management_interface
-};
-
-
 
 static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session,
 												  switch_caller_profile_t *outbound_profile, switch_core_session_t **new_session,
@@ -1354,7 +1309,7 @@
 
 	*new_session = NULL;
 
-	if (!(nsession = switch_core_session_request(&sofia_endpoint_interface, pool))) {
+	if (!(nsession = switch_core_session_request(sofia_endpoint_interface, pool))) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error Creating Session\n");
 		goto done;
 	}
@@ -1503,6 +1458,9 @@
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_sofia_load)
 {
+	switch_chat_interface_t *chat_interface;
+	switch_api_interface_t *api_interface;
+	switch_management_interface_t *management_interface;
 
 	silence_frame.data = silence_data;
 	silence_frame.datalen = sizeof(silence_data);
@@ -1510,10 +1468,7 @@
 	silence_frame.flags = SFF_CNG;
 
 
-	if (switch_core_new_memory_pool(&module_pool) != SWITCH_STATUS_SUCCESS) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "OH OH no pool\n");
-		return SWITCH_STATUS_TERM;
-	}
+	module_pool = pool;
 
 	memset(&mod_sofia_globals, 0, sizeof(mod_sofia_globals));
 	switch_mutex_init(&mod_sofia_globals.mutex, SWITCH_MUTEX_NESTED, module_pool);
@@ -1536,43 +1491,54 @@
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Waiting for profiles to start\n");
 	switch_yield(1500000);
 
-	if (switch_event_bind((char *) modname, SWITCH_EVENT_CUSTOM, MULTICAST_EVENT, event_handler, NULL) != SWITCH_STATUS_SUCCESS) {
+	if (switch_event_bind(modname, SWITCH_EVENT_CUSTOM, MULTICAST_EVENT, event_handler, NULL) != SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n");
 		return SWITCH_STATUS_TERM;
 	}
 
-	if (switch_event_bind((char *) modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL)
+	if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL)
 		!= SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n");
 		return SWITCH_STATUS_GENERR;
 	}
 
-	if (switch_event_bind((char *) modname, SWITCH_EVENT_PRESENCE_OUT, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL)
+	if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_OUT, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL)
 		!= SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n");
 		return SWITCH_STATUS_GENERR;
 	}
 
-	if (switch_event_bind((char *) modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL)
+	if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL)
 		!= SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n");
 		return SWITCH_STATUS_GENERR;
 	}
 
-	if (switch_event_bind((char *) modname, SWITCH_EVENT_ROSTER, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL)
+	if (switch_event_bind(modname, SWITCH_EVENT_ROSTER, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL)
 		!= SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n");
 		return SWITCH_STATUS_GENERR;
 	}
 
-	if (switch_event_bind((char *) modname, SWITCH_EVENT_MESSAGE_WAITING, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_mwi_event_handler, NULL)
+	if (switch_event_bind(modname, SWITCH_EVENT_MESSAGE_WAITING, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_mwi_event_handler, NULL)
 		!= SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n");
 		return SWITCH_STATUS_GENERR;
 	}
 
 	/* connect my internal structure to the blank pointer passed to me */
-	*module_interface = &sofia_module_interface;
+	*module_interface = switch_loadable_module_create_module_interface(pool, modname);
+	sofia_endpoint_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE);
+	sofia_endpoint_interface->interface_name = modname;
+	sofia_endpoint_interface->io_routines = &sofia_io_routines;
+	sofia_endpoint_interface->state_handler = &sofia_event_handlers;
+
+	management_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_MANAGEMENT_INTERFACE);
+	management_interface->relative_oid = "1";
+	management_interface->management_function = sofia_manage;
+
+	SWITCH_ADD_API(api_interface, "sofia", "Sofia Controls", sofia_function, "<cmd> <args>");
+	SWITCH_ADD_CHAT(chat_interface, SOFIA_CHAT_PROTO, sofia_presence_chat_send);
 
 	/* indicate that the module should continue to be loaded */
 	return SWITCH_STATUS_SUCCESS;

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h	Wed Jun 20 03:15:53 2007
@@ -465,7 +465,7 @@
 void sofia_glue_do_xfer_invite(switch_core_session_t *session);
 uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_handle_t *nh, sip_t const *sip, 
 								  sofia_regtype_t regtype, char *key, uint32_t keylen, switch_event_t **v_event);
-extern switch_endpoint_interface_t sofia_endpoint_interface;
+extern switch_endpoint_interface_t *sofia_endpoint_interface;
 void sofia_presence_set_chat_hash(private_object_t *tech_pvt, sip_t const *sip);
 switch_status_t sofia_on_hangup(switch_core_session_t *session);
 char *sofia_glue_get_url_from_contact(char *buf, uint8_t to_dup);

Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c	Wed Jun 20 03:15:53 2007
@@ -1771,7 +1771,7 @@
 		is_auth++;
 	}
 	
-	if (!(session = switch_core_session_request(&sofia_endpoint_interface, NULL))) {
+	if (!(session = switch_core_session_request(sofia_endpoint_interface, NULL))) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Session Alloc Failed!\n");
 		nua_respond(nh, SIP_503_SERVICE_UNAVAILABLE, TAG_END());
 		return;

Modified: freeswitch/trunk/src/mod/endpoints/mod_woomera/mod_woomera.c
==============================================================================
--- freeswitch/trunk/src/mod/endpoints/mod_woomera/mod_woomera.c	(original)
+++ freeswitch/trunk/src/mod/endpoints/mod_woomera/mod_woomera.c	Wed Jun 20 03:15:53 2007
@@ -54,6 +54,7 @@
 SWITCH_MODULE_DEFINITION(mod_woomera, mod_woomera_load, mod_woomera_shutdown, mod_woomera_runtime);
 
 static switch_memory_pool_t *module_pool = NULL;
+static switch_endpoint_interface_t *woomera_endpoint_interface;
 
 #define STRLEN 15
 #define FRAME_LEN 480
@@ -459,24 +460,6 @@
 	/*.waitfor_write */ woomera_waitfor_write
 };
 
-static switch_endpoint_interface_t woomera_endpoint_interface = {
-	/*.interface_name */ "woomera",
-	/*.io_routines */ &woomera_io_routines,
-	/*.event_handlers */ &woomera_event_handlers,
-	/*.private */ NULL,
-	/*.next */ NULL
-};
-
-static switch_loadable_module_interface_t woomera_module_interface = {
-	/*.module_name */ modname,
-	/*.endpoint_interface */ &woomera_endpoint_interface,
-	/*.timer_interface */ NULL,
-	/*.dialplan_interface */ NULL,
-	/*.codec_interface */ NULL,
-	/*.application_interface */ NULL
-};
-
-
 /* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
    that allocate memory or you will have 1 channel with memory allocated from another channel's pool!
 */
@@ -484,7 +467,7 @@
 													switch_caller_profile_t *outbound_profile,
 													switch_core_session_t **new_session, switch_memory_pool_t **pool)
 {
-	if ((*new_session = switch_core_session_request(&woomera_endpoint_interface, pool)) != 0) {
+	if ((*new_session = switch_core_session_request(woomera_endpoint_interface, pool)) != 0) {
 		struct private_object *tech_pvt;
 		switch_channel_t *channel;
 
@@ -1226,7 +1209,7 @@
 				}
 
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "New Inbound Channel %s!\n", name);
-				if ((session = switch_core_session_request(&woomera_endpoint_interface, NULL)) != 0) {
+				if ((session = switch_core_session_request(woomera_endpoint_interface, NULL)) != 0) {
 					struct private_object *tech_pvt;
 					switch_channel_t *channel;
 
@@ -1294,9 +1277,9 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
+
 SWITCH_MODULE_LOAD_FUNCTION(mod_woomera_load)
 {
-
 	struct woomera_profile *profile = &default_profile;
 	char *cf = "woomera.conf";
 	switch_xml_t cfg, xml, settings, param, xmlp;
@@ -1360,27 +1343,19 @@
 
 	switch_xml_free(xml);
 
-
-	if (switch_core_new_memory_pool(&module_pool) != SWITCH_STATUS_SUCCESS) {
-		//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "OH OH no pool\n");
-
-		if (switch_core_new_memory_pool(&module_pool) != SWITCH_STATUS_SUCCESS) {
-			//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "OH OH no pool\n");
-			return SWITCH_STATUS_MEMERR;
-		}
-		return SWITCH_STATUS_MEMERR;
-	}
-
-
+	module_pool = pool;
 
 	if (switch_mutex_init(&default_profile.iolock, SWITCH_MUTEX_NESTED, module_pool) != SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "OH OH no lock\n");
 		return SWITCH_STATUS_TERM;
 	}
 
-
 	/* connect my internal structure to the blank pointer passed to me */
-	*module_interface = &woomera_module_interface;
+	*module_interface = switch_loadable_module_create_module_interface(pool, modname);
+	woomera_endpoint_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_ENDPOINT_INTERFACE);
+	woomera_endpoint_interface->interface_name = modname;
+	woomera_endpoint_interface->io_routines = &woomera_io_routines;
+	woomera_endpoint_interface->state_handler = &woomera_event_handlers;
 
 	/* indicate that the module should continue to be loaded */
 	return SWITCH_STATUS_SUCCESS;

Modified: freeswitch/trunk/src/switch_event.c
==============================================================================
--- freeswitch/trunk/src/switch_event.c	(original)
+++ freeswitch/trunk/src/switch_event.c	Wed Jun 20 03:15:53 2007
@@ -870,7 +870,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-SWITCH_DECLARE(switch_status_t) switch_event_bind(char *id, switch_event_types_t event, char *subclass_name, switch_event_callback_t callback,
+SWITCH_DECLARE(switch_status_t) switch_event_bind(const char *id, switch_event_types_t event, char *subclass_name, switch_event_callback_t callback,
 												  void *user_data)
 {
 	switch_event_node_t *event_node;



More information about the Freeswitch-svn mailing list