/* update the specified source with details from the config or mount. * mountinfo can be NULL in which case default settings should be taken */ void source_update_settings (ice_config_t *config, source_t *source, mount_proxy *mountinfo) { /* skip if source is a fallback to file */ if (source->running && source->client == NULL) { stats_event_hidden (source->mount, NULL, 1); return; } /* set global settings first */ source->queue_size_limit = config->queue_size_limit; source->timeout = config->source_timeout; source->burst_size = config->burst_size; stats_event_args (source->mount, "listenurl", "http://%s:%d%s", config->hostname, config->port, source->mount); source_apply_mount (source, mountinfo); if (source->fallback_mount) DEBUG1 ("fallback %s", source->fallback_mount); if (mountinfo && mountinfo->intro_filename) DEBUG1 ("intro file is %s", mountinfo->intro_filename); if (source->dumpfilename) DEBUG1 ("Dumping stream to %s", source->dumpfilename); if (mountinfo && mountinfo->on_connect) DEBUG1 ("connect script \"%s\"", mountinfo->on_connect); if (mountinfo && mountinfo->on_disconnect) DEBUG1 ("disconnect script \"%s\"", mountinfo->on_disconnect); if (source->on_demand) { DEBUG0 ("on_demand set"); stats_event (source->mount, "on_demand", "1"); stats_event_args (source->mount, "listeners", "%ld", source->listeners); } else stats_event (source->mount, "on_demand", NULL); if (source->hidden) { stats_event_hidden (source->mount, NULL, 1); DEBUG0 ("hidden from public"); } else stats_event_hidden (source->mount, NULL, 0); if (source->max_listeners == -1) stats_event (source->mount, "max_listeners", "unlimited"); else { char buf [10]; snprintf (buf, sizeof (buf), "%ld", source->max_listeners); stats_event (source->mount, "max_listeners", buf); } DEBUG1 ("public set to %d", source->yp_public); DEBUG1 ("max listeners to %ld", source->max_listeners); DEBUG1 ("queue size to %u", source->queue_size_limit); DEBUG1 ("burst size to %u", source->burst_size); DEBUG1 ("source timeout to %u", source->timeout); DEBUG1 ("fallback_when_full to %u", source->fallback_when_full); }
/* rescan the mount list, so that xsl files are updated to show * unconnected but active fallback mountpoints */ void source_recheck_mounts (int update_all) { ice_config_t *config; mount_proxy *mount; avl_tree_rlock (global.source_tree); config = config_get_config(); mount = config->mounts; if (update_all) stats_clear_virtual_mounts (); while (mount) { source_t *source = source_find_mount (mount->mountname); if (source) { source = source_find_mount_raw (mount->mountname); if (source) { mount_proxy *mountinfo = config_find_mount (config, source->mount); source_update_settings (config, source, mountinfo); } else if (update_all) { stats_event_hidden (mount->mountname, NULL, mount->hidden); stats_event_args (mount->mountname, "listenurl", "http://%s:%d%s", config->hostname, config->port, mount->mountname); stats_event (mount->mountname, "listeners", "0"); if (mount->max_listeners < 0) stats_event (mount->mountname, "max_listeners", "unlimited"); else stats_event_args (mount->mountname, "max_listeners", "%d", mount->max_listeners); } } else stats_event (mount->mountname, NULL, NULL); /* check for fallback to file */ if (global.running == ICE_RUNNING && mount->fallback_mount) { source_t *fallback = source_find_mount (mount->fallback_mount); if (fallback == NULL) { thread_create ("Fallback file thread", source_fallback_file, strdup (mount->fallback_mount), THREAD_DETACHED); } } mount = mount->next; } avl_tree_unlock (global.source_tree); config_release_config(); }
void source_apply_mount (source_t *source, mount_proxy *mountinfo) { DEBUG1("Applying mount information for \"%s\"", source->mount); source->max_listeners = mountinfo->max_listeners; source->fallback_override = mountinfo->fallback_override; source->no_mount = mountinfo->no_mount; source->hidden = mountinfo->hidden; stats_event_hidden (source->mount, NULL, source->hidden); if (mountinfo->fallback_mount) { source->fallback_mount = strdup (mountinfo->fallback_mount); DEBUG1 ("fallback %s", mountinfo->fallback_mount); } if (mountinfo->auth_type != NULL) { source->authenticator = auth_get_authenticator( mountinfo->auth_type, mountinfo->auth_options); stats_event(source->mount, "authenticator", mountinfo->auth_type); } if (mountinfo->dumpfile) { DEBUG1("Dumping stream to %s", mountinfo->dumpfile); source->dumpfilename = strdup (mountinfo->dumpfile); } if (mountinfo->queue_size_limit) { source->queue_size_limit = mountinfo->queue_size_limit; DEBUG1 ("queue size to %u", source->queue_size_limit); } if (mountinfo->source_timeout) { source->timeout = mountinfo->source_timeout; DEBUG1 ("source timeout to %u", source->timeout); } if (mountinfo->no_yp) { source->yp_prevent = 1; DEBUG0 ("preventing YP listings"); } if (mountinfo->burst_size > -1) source->burst_size = mountinfo->burst_size; DEBUG1 ("amount to burst on client connect set to %u", source->burst_size); }