mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-16 00:41:41 +00:00
reloadxml
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@1509 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
ab3f42c9c4
commit
bf6d91c3fd
@ -80,6 +80,20 @@ static switch_status_t load_function(char *mod, switch_stream_handle_t *stream)
|
|||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static switch_status_t reload_function(char *mod, switch_stream_handle_t *stream)
|
||||||
|
{
|
||||||
|
const char *err;
|
||||||
|
switch_xml_t xml_root;
|
||||||
|
|
||||||
|
if ((xml_root = switch_xml_open_root(1, &err))) {
|
||||||
|
switch_xml_free(xml_root);
|
||||||
|
}
|
||||||
|
|
||||||
|
stream->write_function(stream, "OK [%s]\n", err);
|
||||||
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static switch_status_t kill_function(char *dest, switch_stream_handle_t *stream)
|
static switch_status_t kill_function(char *dest, switch_stream_handle_t *stream)
|
||||||
{
|
{
|
||||||
switch_core_session_t *session = NULL;
|
switch_core_session_t *session = NULL;
|
||||||
@ -231,12 +245,19 @@ static switch_api_interface_t load_api_interface = {
|
|||||||
/*.next */ &transfer_api_interface
|
/*.next */ &transfer_api_interface
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static switch_api_interface_t reload_api_interface = {
|
||||||
|
/*.interface_name */ "reloadxml",
|
||||||
|
/*.desc */ "Reload XML",
|
||||||
|
/*.function */ reload_function,
|
||||||
|
/*.next */ &load_api_interface,
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
static switch_api_interface_t commands_api_interface = {
|
static switch_api_interface_t commands_api_interface = {
|
||||||
/*.interface_name */ "killchan",
|
/*.interface_name */ "killchan",
|
||||||
/*.desc */ "Kill Channel",
|
/*.desc */ "Kill Channel",
|
||||||
/*.function */ kill_function,
|
/*.function */ kill_function,
|
||||||
/*.next */ &load_api_interface
|
/*.next */ &reload_api_interface
|
||||||
};
|
};
|
||||||
|
|
||||||
static const switch_loadable_module_interface_t mod_commands_module_interface = {
|
static const switch_loadable_module_interface_t mod_commands_module_interface = {
|
||||||
|
@ -94,6 +94,7 @@ static switch_xml_t MAIN_XML_ROOT = NULL;
|
|||||||
static switch_memory_pool_t *XML_MEMORY_POOL;
|
static switch_memory_pool_t *XML_MEMORY_POOL;
|
||||||
static switch_mutex_t *XML_LOCK;
|
static switch_mutex_t *XML_LOCK;
|
||||||
static switch_thread_rwlock_t *RWLOCK;
|
static switch_thread_rwlock_t *RWLOCK;
|
||||||
|
static uint32_t lock_count = 0;
|
||||||
|
|
||||||
struct xml_section_t {
|
struct xml_section_t {
|
||||||
const char *name;
|
const char *name;
|
||||||
@ -844,7 +845,7 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate(char *section,
|
|||||||
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
if (!xml) {
|
if (!xml) {
|
||||||
if (!(xml = MAIN_XML_ROOT)) {
|
if (!(xml = switch_xml_root())) {
|
||||||
*node = NULL;
|
*node = NULL;
|
||||||
*root = NULL;
|
*root = NULL;
|
||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
@ -870,8 +871,10 @@ SWITCH_DECLARE(switch_status_t) switch_xml_locate(char *section,
|
|||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_xml_t) switch_xml_root(void)
|
SWITCH_DECLARE(switch_xml_t) switch_xml_root(void)
|
||||||
{
|
{
|
||||||
|
lock_count++;
|
||||||
switch_thread_rwlock_rdlock(RWLOCK);
|
switch_thread_rwlock_rdlock(RWLOCK);
|
||||||
return MAIN_XML_ROOT;
|
return MAIN_XML_ROOT;
|
||||||
}
|
}
|
||||||
@ -905,6 +908,7 @@ SWITCH_DECLARE(switch_xml_t) switch_xml_open_root(uint8_t reload, const char **e
|
|||||||
switch_xml_free(MAIN_XML_ROOT);
|
switch_xml_free(MAIN_XML_ROOT);
|
||||||
MAIN_XML_ROOT = NULL;
|
MAIN_XML_ROOT = NULL;
|
||||||
} else {
|
} else {
|
||||||
|
*err = "Success";
|
||||||
switch_set_flag(MAIN_XML_ROOT, SWITCH_XML_ROOT);
|
switch_set_flag(MAIN_XML_ROOT, SWITCH_XML_ROOT);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -915,6 +919,7 @@ SWITCH_DECLARE(switch_xml_t) switch_xml_open_root(uint8_t reload, const char **e
|
|||||||
switch_thread_rwlock_unlock(RWLOCK);
|
switch_thread_rwlock_unlock(RWLOCK);
|
||||||
}
|
}
|
||||||
switch_mutex_unlock(XML_LOCK);
|
switch_mutex_unlock(XML_LOCK);
|
||||||
|
|
||||||
return switch_xml_root();
|
return switch_xml_root();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1100,7 +1105,10 @@ SWITCH_DECLARE(void) switch_xml_free(switch_xml_t xml)
|
|||||||
if (! xml ) return;
|
if (! xml ) return;
|
||||||
|
|
||||||
if (switch_test_flag(xml, SWITCH_XML_ROOT)) {
|
if (switch_test_flag(xml, SWITCH_XML_ROOT)) {
|
||||||
switch_thread_rwlock_unlock(RWLOCK);
|
if (lock_count > 0) {
|
||||||
|
switch_thread_rwlock_unlock(RWLOCK);
|
||||||
|
lock_count--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xml == MAIN_XML_ROOT) {
|
if (xml == MAIN_XML_ROOT) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user