[Freeswitch-svn] [commit] r8905 - in freeswitch/trunk/src: . include

Freeswitch SVN anthm at freeswitch.org
Mon Jul 7 13:10:18 EDT 2008


Author: anthm
Date: Mon Jul  7 13:10:17 2008
New Revision: 8905

Modified:
   freeswitch/trunk/src/include/switch_types.h
   freeswitch/trunk/src/include/switch_xml.h
   freeswitch/trunk/src/switch_xml.cpp

Log:
add removable xml hook bindings

Modified: freeswitch/trunk/src/include/switch_types.h
==============================================================================
--- freeswitch/trunk/src/include/switch_types.h	(original)
+++ freeswitch/trunk/src/include/switch_types.h	Mon Jul  7 13:10:17 2008
@@ -1233,7 +1233,7 @@
 typedef struct switch_core_port_allocator switch_core_port_allocator_t;
 typedef struct switch_media_bug switch_media_bug_t;
 typedef switch_bool_t (*switch_media_bug_callback_t) (switch_media_bug_t *, void *, switch_abc_type_t);
-
+typedef struct switch_xml_binding switch_xml_binding_t;
 
 typedef switch_status_t (*switch_core_codec_encode_func_t) (switch_codec_t *codec,
 															switch_codec_t *other_codec,

Modified: freeswitch/trunk/src/include/switch_xml.h
==============================================================================
--- freeswitch/trunk/src/include/switch_xml.h	(original)
+++ freeswitch/trunk/src/include/switch_xml.h	Mon Jul  7 13:10:17 2008
@@ -58,6 +58,8 @@
 #include <switch.h>
 
 
+struct switch_xml_binding;
+
 ///\defgroup xml1 XML Library Functions
 ///\ingroup core1
 ///\{
@@ -349,6 +351,18 @@
 ///\note gateway functions will be executed in the order they were binded until a success is found else the root registry will be used
 SWITCH_DECLARE(switch_status_t) switch_xml_bind_search_function(switch_xml_search_function_t function, switch_xml_section_t sections, void *user_data);
 
+///\brief bind a search function to an external gateway
+///\param function the search function to bind
+///\param sections a bitmask of sections you wil service
+///\param user_data a pointer to private data to be used during the callback
+///\param binding a handle to use to later unbind.
+///\return SWITCH_STATUS_SUCCESS if successful
+///\note gateway functions will be executed in the order they were binded until a success is found else the root registry will be used
+SWITCH_DECLARE(switch_status_t) switch_xml_bind_search_function_removable(switch_xml_search_function_t function, 
+																		  switch_xml_section_t sections, void *user_data, switch_xml_binding_t **binding);
+
+SWITCH_DECLARE(switch_status_t) switch_xml_unbind_search_function(switch_xml_binding_t **binding);
+
 ///\brief parse a string for a list of sections
 ///\param str a | delimited list of section names
 ///\return the section mask

Modified: freeswitch/trunk/src/switch_xml.cpp
==============================================================================
--- freeswitch/trunk/src/switch_xml.cpp	(original)
+++ freeswitch/trunk/src/switch_xml.cpp	Mon Jul  7 13:10:17 2008
@@ -97,7 +97,7 @@
 	struct switch_xml_binding *next;
 };
 
-typedef struct switch_xml_binding switch_xml_binding_t;
+
 static switch_xml_binding_t *BINDINGS = NULL;
 static switch_xml_t MAIN_XML_ROOT = NULL;
 static switch_memory_pool_t *XML_MEMORY_POOL;
@@ -143,6 +143,28 @@
 	return (switch_xml_section_t) sections;
 }
 
+SWITCH_DECLARE(switch_status_t) switch_xml_unbind_search_function(switch_xml_binding_t **binding)
+{
+	switch_xml_binding_t *ptr, *last = NULL;
+	switch_status_t status = SWITCH_STATUS_FALSE;
+
+	switch_mutex_lock(XML_LOCK);
+	for (ptr = BINDINGS; ptr; ptr = ptr->next) {
+		if (ptr == *binding) {
+			if (last) {
+				last->next = (*binding)->next;
+			} else {
+				BINDINGS = (*binding)->next;
+			}
+			status = SWITCH_STATUS_SUCCESS;
+			break;
+		}
+	}
+	switch_mutex_unlock(XML_LOCK);
+
+	return status;
+}
+
 SWITCH_DECLARE(switch_status_t) switch_xml_bind_search_function(switch_xml_search_function_t function, switch_xml_section_t sections, void *user_data)
 {
 	switch_xml_binding_t *binding = NULL, *ptr = NULL;



More information about the Freeswitch-svn mailing list