1
0
mirror of https://gitlab.xiph.org/xiph/icecast-server.git synced 2024-06-23 06:25:24 +00:00

Feature: Added way to add links to modules

This commit is contained in:
Philipp Schafft 2018-08-03 09:50:22 +00:00
parent f541cb5c8a
commit e89f1bba8d
2 changed files with 47 additions and 0 deletions

View File

@ -27,6 +27,8 @@ struct module_tag {
size_t client_handlers_len;
module_setup_handler_t freecb;
void *userdata;
char *management_link_url;
char *management_link_title;
};
@ -138,6 +140,10 @@ xmlNodePtr module_container_get_modulelist_as_xml(module_co
xmlNodePtr node = xmlNewChild(root, NULL, XMLSTR("module"), NULL);
xmlSetProp(node, XMLSTR("name"), XMLSTR(refobject_get_name(module)));
if (module->management_link_url)
xmlSetProp(node, XMLSTR("management-url"), XMLSTR(module->management_link_url));
if (module->management_link_title)
xmlSetProp(node, XMLSTR("management-title"), XMLSTR(module->management_link_title));
avlnode = avl_get_next(avlnode);
}
@ -156,6 +162,9 @@ static void __module_free(refobject_t self, void **userdata)
if (mod->userdata)
free(mod->userdata);
free(mod->management_link_url);
free(mod->management_link_title);
thread_mutex_destroy(&(mod->lock));
}
@ -181,6 +190,42 @@ module_t * module_new(const char *name, module_setup_handler_t newc
return ret;
}
int module_add_link(module_t *self, const char *type, const char *url, const char *title)
{
char *n_url = NULL;
char *n_title = NULL;
if (!self || !type)
return -1;
if (strcmp(type, "management-url") != 0)
return -1;
if (url) {
n_url = strdup(url);
if (!n_url)
return -1;
}
if (title) {
n_title = strdup(title);
if (!n_title) {
free(n_url);
return -1;
}
}
thread_mutex_lock(&(self->lock));
free(self->management_link_url);
free(self->management_link_title);
self->management_link_url = n_url;
self->management_link_title = n_title;
thread_mutex_unlock(&(self->lock));
return 0;
}
const module_client_handler_t * module_get_client_handler(module_t *self, const char *name)
{
size_t i;

View File

@ -29,6 +29,8 @@ xmlNodePtr module_container_get_modulelist_as_xml(module_co
module_t * module_new(const char *name, module_setup_handler_t newcb, module_setup_handler_t freecb, void *userdata);
int module_add_link(module_t *self, const char *type, const char *url, const char *title);
/* Note: Those functions are not really thread safe as (module_client_handler_t) is not thread safe. This is by design. */
const module_client_handler_t * module_get_client_handler(module_t *self, const char *name);
int module_add_client_handler(module_t *self, const module_client_handler_t *handlers, size_t len);