struct raop_server_settings_t raop_server_get_settings(struct raop_server_t* rs) { return (struct raop_server_settings_t){ settings_get_name(rs->settings), settings_get_password(rs->settings), settings_get_ignore_source_volume(rs->settings) }; } void raop_server_set_settings(struct raop_server_t* rs, struct raop_server_settings_t settings) { const char* old_name = settings_get_name(rs->settings); char* old_name_c = (char*)malloc(strlen(old_name) + 1); strcpy(old_name_c, old_name); settings_set_name(rs->settings, settings.name); settings_set_password(rs->settings, settings.password); settings_set_ignore_source_volume(rs->settings, settings.ignore_source_volume); const char* new_name = settings_get_name(rs->settings); if (strcmp(old_name_c, new_name) != 0) { zeroconf_raop_ad_destroy(rs->zeroconf_ad); rs->zeroconf_ad = zeroconf_raop_ad_create(sockaddr_get_port(web_server_get_local_end_point(rs->server, sockaddr_type_inet_4)), new_name); } free(old_name_c); } void raop_server_stop(struct raop_server_t* rs) { mutex_lock(rs->mutex); if (rs->is_running) { rs->is_running = false; while (rs->sessions_count > 0) { mutex_unlock(rs->mutex); raop_session_destroy(rs->sessions[0]); mutex_lock(rs->mutex); } free(rs->sessions); rs->sessions = NULL; rs->sessions_count = 0; zeroconf_raop_ad_destroy(rs->zeroconf_ad); web_server_stop(rs->server); } mutex_unlock(rs->mutex); }
struct settings_t* settings_create(const char* name, const char* password) { struct settings_t* s = (struct settings_t*)malloc(sizeof(struct settings_t)); bzero(s, sizeof(struct settings_t)); settings_set_name(s, name); settings_set_password(s, password); return s; }