static int command_fallback (client_t *client, source_t *source, int response) { char *mount = strdup (source->mount); mount_proxy *mountinfo; ice_config_t *config; thread_mutex_unlock (&source->lock); DEBUG0("Got fallback request"); config = config_grab_config(); mountinfo = config_find_mount (config, mount); free (mount); if (mountinfo) { const char *fallback; char buffer[200]; if (COMMAND_REQUIRE(client, "fallback", fallback) < 0) return client_send_400 (client, "missing arg, fallback"); xmlFree (mountinfo->fallback_mount); mountinfo->fallback_mount = (char *)xmlCharStrdup (fallback); snprintf (buffer, sizeof (buffer), "Fallback for \"%s\" configured", mountinfo->mountname); config_release_config (); return html_success (client, buffer); } config_release_config (); return client_send_400 (client, "no mount details available"); }
void event_config_read (void) { int ret; ice_config_t *config; ice_config_t new_config, old_config; /* reread config file */ INFO0("Re-reading XML"); config = config_grab_config(); /* Both to get the lock, and to be able to find out the config filename */ xmlSetGenericErrorFunc (config->config_filename, log_parse_failure); xmlSetStructuredErrorFunc ("conf/file", config_xml_parse_failure); ret = config_parse_file(config->config_filename, &new_config); if(ret < 0) { ERROR0("Error parsing config, not replacing existing config"); switch(ret) { case CONFIG_EINSANE: ERROR0("Config filename null or blank"); break; case CONFIG_ENOROOT: ERROR1("Root element not found in %s", config->config_filename); break; case CONFIG_EBADROOT: ERROR1("Not an icecast2 config file: %s", config->config_filename); break; default: ERROR1("Parse error in reading %s", config->config_filename); break; } config_release_config(); } else { restart_logging (&new_config); config_set_config (&new_config, &old_config); config_release_config(); connection_thread_shutdown(); redirector_clearall(); fserve_scan ((time_t)0); config = config_get_config(); yp_recheck_config (config); fserve_recheck_mime_types (config); stats_global (config); workers_adjust (config->workers_count); connection_listen_sockets_close (config, 0); redirector_setup (config); update_relays (config); config_release_config(); slave_restart(); config_clear (&old_config); } }
void event_config_read(void *arg) { int ret; ice_config_t *config; ice_config_t new_config; /* reread config file */ config = config_grab_config(); /* Both to get the lock, and to be able to find out the config filename */ xmlSetGenericErrorFunc ("config", log_parse_failure); ret = config_parse_file(config->config_filename, &new_config); if(ret < 0) { ICECAST_LOG_ERROR("Error parsing config, not replacing existing config"); switch(ret) { case CONFIG_EINSANE: ICECAST_LOG_ERROR("Config filename null or blank"); break; case CONFIG_ENOROOT: ICECAST_LOG_ERROR("Root element not found in %s", config->config_filename); break; case CONFIG_EBADROOT: ICECAST_LOG_ERROR("Not an icecast2 config file: %s", config->config_filename); break; default: ICECAST_LOG_ERROR("Parse error in reading %s", config->config_filename); break; } config_release_config(); } else { config_clear(config); config_set_config(&new_config); config = config_get_config_unlocked(); restart_logging (config); yp_recheck_config (config); fserve_recheck_mime_types (config); stats_global (config); config_release_config(); slave_update_all_mounts(); } }
static int admin_function (const char *function, char *buf, unsigned int len) { if (strcmp (function, "reopenlog") == 0) { ice_config_t *config = config_grab_config(); restart_logging (config); config_release_config(); snprintf (buf, len, "Re-opening log files"); return 0; } if (strcmp (function, "updatecfg") == 0) { #ifdef HAVE_SIGNALFD connection_running = 0; connection_close_sigfd(); #endif global . schedule_config_reread = 1; snprintf (buf, len, "Requesting reread of configuration file"); return 0; } return -1; }