[commit] r8905 - in freeswitch/trunk/src: . include
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;
participants (1)
-
Freeswitch SVN