[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