1 #ifndef foodaemonconfhfoo 2 #define foodaemonconfhfoo 3 4 /*** 5 This file is part of PulseAudio. 6 7 Copyright 2004-2006 Lennart Poettering 8 Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB 9 10 PulseAudio is free software; you can redistribute it and/or modify 11 it under the terms of the GNU Lesser General Public License as published 12 by the Free Software Foundation; either version 2.1 of the License, 13 or (at your option) any later version. 14 15 PulseAudio is distributed in the hope that it will be useful, but 16 WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 General Public License for more details. 19 20 You should have received a copy of the GNU Lesser General Public License 21 along with PulseAudio; if not, see <http://www.gnu.org/licenses/>. 22 ***/ 23 24 #include <pulse/sample.h> 25 #include <pulse/channelmap.h> 26 27 #include <pulsecore/log.h> 28 #include <pulsecore/macro.h> 29 #include <pulsecore/core.h> 30 #include <pulsecore/core-util.h> 31 32 #ifdef HAVE_SYS_RESOURCE_H 33 #include <sys/resource.h> 34 #endif 35 36 /* The actual command to execute */ 37 typedef enum pa_daemon_conf_cmd { 38 PA_CMD_DAEMON, /* the default */ 39 PA_CMD_START, 40 PA_CMD_HELP, 41 PA_CMD_VERSION, 42 PA_CMD_DUMP_CONF, 43 PA_CMD_DUMP_MODULES, 44 PA_CMD_KILL, 45 PA_CMD_CHECK, 46 PA_CMD_DUMP_RESAMPLE_METHODS, 47 PA_CMD_CLEANUP_SHM 48 } pa_daemon_conf_cmd_t; 49 50 #ifdef HAVE_SYS_RESOURCE_H 51 typedef struct pa_rlimit { 52 rlim_t value; 53 bool is_set; 54 } pa_rlimit; 55 #endif 56 57 /* A structure containing configuration data for the PulseAudio server . */ 58 typedef struct pa_daemon_conf { 59 pa_daemon_conf_cmd_t cmd; 60 bool daemonize, 61 fail, 62 high_priority, 63 realtime_scheduling, 64 disallow_module_loading, 65 use_pid_file, 66 system_instance, 67 no_cpu_limit, 68 disable_shm, 69 disable_memfd, 70 avoid_resampling, 71 disable_remixing, 72 remixing_use_all_sink_channels, 73 remixing_produce_lfe, 74 remixing_consume_lfe, 75 load_default_script_file, 76 disallow_exit, 77 log_meta, 78 log_time, 79 flat_volumes, 80 rescue_streams, 81 lock_memory, 82 deferred_volume; 83 pa_server_type_t local_server_type; 84 int exit_idle_time, 85 scache_idle_time, 86 realtime_priority, 87 nice_level, 88 resample_method; 89 char *script_commands, *dl_search_path, *default_script_file; 90 pa_log_target *log_target; 91 pa_log_level_t log_level; 92 unsigned log_backtrace; 93 char *config_file; 94 95 #ifdef HAVE_SYS_RESOURCE_H 96 pa_rlimit rlimit_fsize, rlimit_data, rlimit_stack, rlimit_core; 97 #ifdef RLIMIT_RSS 98 pa_rlimit rlimit_rss; 99 #endif 100 #ifdef RLIMIT_NOFILE 101 pa_rlimit rlimit_nofile; 102 #endif 103 #ifdef RLIMIT_AS 104 pa_rlimit rlimit_as; 105 #endif 106 #ifdef RLIMIT_NPROC 107 pa_rlimit rlimit_nproc; 108 #endif 109 #ifdef RLIMIT_MEMLOCK 110 pa_rlimit rlimit_memlock; 111 #endif 112 #ifdef RLIMIT_LOCKS 113 pa_rlimit rlimit_locks; 114 #endif 115 #ifdef RLIMIT_SIGPENDING 116 pa_rlimit rlimit_sigpending; 117 #endif 118 #ifdef RLIMIT_MSGQUEUE 119 pa_rlimit rlimit_msgqueue; 120 #endif 121 #ifdef RLIMIT_NICE 122 pa_rlimit rlimit_nice; 123 #endif 124 #ifdef RLIMIT_RTPRIO 125 pa_rlimit rlimit_rtprio; 126 #endif 127 #ifdef RLIMIT_RTTIME 128 pa_rlimit rlimit_rttime; 129 #endif 130 #endif 131 132 unsigned default_n_fragments, default_fragment_size_msec; 133 unsigned deferred_volume_safety_margin_usec; 134 int deferred_volume_extra_delay_usec; 135 unsigned lfe_crossover_freq; 136 pa_sample_spec default_sample_spec; 137 uint32_t alternate_sample_rate; 138 pa_channel_map default_channel_map; 139 size_t shm_size; 140 } pa_daemon_conf; 141 142 /* Allocate a new structure and fill it with sane defaults */ 143 pa_daemon_conf* pa_daemon_conf_new(void); 144 void pa_daemon_conf_free(pa_daemon_conf*c); 145 146 /* Load configuration data from the specified file overwriting the 147 * current settings in *c. If filename is NULL load the default daemon 148 * configuration file */ 149 int pa_daemon_conf_load(pa_daemon_conf *c, const char *filename); 150 151 /* Pretty print the current configuration data of the daemon. The 152 * returned string has to be freed manually. The output of this 153 * function may be parsed with pa_daemon_conf_load(). */ 154 char *pa_daemon_conf_dump(pa_daemon_conf *c); 155 156 /* Load the configuration data from the process' environment 157 * overwriting the current settings in *c. */ 158 int pa_daemon_conf_env(pa_daemon_conf *c); 159 160 /* Set these configuration variables in the structure by passing a string */ 161 int pa_daemon_conf_set_log_target(pa_daemon_conf *c, const char *string); 162 int pa_daemon_conf_set_log_level(pa_daemon_conf *c, const char *string); 163 int pa_daemon_conf_set_resample_method(pa_daemon_conf *c, const char *string); 164 int pa_daemon_conf_set_local_server_type(pa_daemon_conf *c, const char *string); 165 166 const char *pa_daemon_conf_get_default_script_file(pa_daemon_conf *c); 167 FILE *pa_daemon_conf_open_default_script_file(pa_daemon_conf *c); 168 169 #endif 170