2 This file is part of PulseAudio.
4 Copyright 2004-2006 Lennart Poettering
5 Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
7 PulseAudio is free software; you can redistribute it and/or modify
8 it under the terms of the GNU Lesser General Public License as published
9 by the Free Software Foundation; either version 2 of the License,
10 or (at your option) any later version.
12 PulseAudio is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
17 You should have received a copy of the GNU Lesser General Public License
18 along with PulseAudio; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
32 #include <pulse/xmalloc.h>
33 #include <pulse/i18n.h>
35 #include <pulsecore/macro.h>
36 #include <pulsecore/core-error.h>
37 #include <pulsecore/log.h>
38 #include <pulsecore/conf-parser.h>
39 #include <pulsecore/core-util.h>
40 #include <pulsecore/authkey.h>
42 #include "client-conf.h"
44 #define DEFAULT_CLIENT_CONFIG_FILE PA_DEFAULT_CONFIG_DIR PA_PATH_SEP "client.conf"
45 #define DEFAULT_CLIENT_CONFIG_FILE_USER "client.conf"
47 #define ENV_CLIENT_CONFIG_FILE "PULSE_CLIENTCONFIG"
48 #define ENV_DEFAULT_SINK "PULSE_SINK"
49 #define ENV_DEFAULT_SOURCE "PULSE_SOURCE"
50 #define ENV_DEFAULT_SERVER "PULSE_SERVER"
51 #define ENV_DAEMON_BINARY "PULSE_BINARY"
52 #define ENV_COOKIE_FILE "PULSE_COOKIE"
54 static const pa_client_conf default_conf
= {
55 .daemon_binary
= NULL
,
56 .extra_arguments
= NULL
,
58 .default_source
= NULL
,
59 .default_server
= NULL
,
63 .cookie_valid
= FALSE
,
67 pa_client_conf
*pa_client_conf_new(void) {
68 pa_client_conf
*c
= pa_xmemdup(&default_conf
, sizeof(default_conf
));
70 c
->daemon_binary
= pa_xstrdup(PA_BINARY
);
71 c
->extra_arguments
= pa_xstrdup("--log-target=syslog");
72 c
->cookie_file
= pa_xstrdup(PA_NATIVE_COOKIE_FILE
);
77 void pa_client_conf_free(pa_client_conf
*c
) {
79 pa_xfree(c
->daemon_binary
);
80 pa_xfree(c
->extra_arguments
);
81 pa_xfree(c
->default_sink
);
82 pa_xfree(c
->default_source
);
83 pa_xfree(c
->default_server
);
84 pa_xfree(c
->cookie_file
);
88 int pa_client_conf_load(pa_client_conf
*c
, const char *filename
) {
93 /* Prepare the configuration parse table */
94 pa_config_item table
[] = {
95 { "daemon-binary", pa_config_parse_string
, NULL
, NULL
},
96 { "extra-arguments", pa_config_parse_string
, NULL
, NULL
},
97 { "default-sink", pa_config_parse_string
, NULL
, NULL
},
98 { "default-source", pa_config_parse_string
, NULL
, NULL
},
99 { "default-server", pa_config_parse_string
, NULL
, NULL
},
100 { "autospawn", pa_config_parse_bool
, NULL
, NULL
},
101 { "cookie-file", pa_config_parse_string
, NULL
, NULL
},
102 { "disable-shm", pa_config_parse_bool
, NULL
, NULL
},
103 { "shm-size-bytes", pa_config_parse_size
, NULL
, NULL
},
104 { NULL
, NULL
, NULL
, NULL
},
107 table
[0].data
= &c
->daemon_binary
;
108 table
[1].data
= &c
->extra_arguments
;
109 table
[2].data
= &c
->default_sink
;
110 table
[3].data
= &c
->default_source
;
111 table
[4].data
= &c
->default_server
;
112 table
[5].data
= &c
->autospawn
;
113 table
[6].data
= &c
->cookie_file
;
114 table
[7].data
= &c
->disable_shm
;
115 table
[8].data
= &c
->shm_size
;
119 if (!(f
= fopen(filename
, "r"))) {
120 pa_log(_("Failed to open configuration file '%s': %s"), fn
, pa_cstrerror(errno
));
128 if (!(f
= pa_open_config_file(DEFAULT_CLIENT_CONFIG_FILE
, DEFAULT_CLIENT_CONFIG_FILE_USER
, ENV_CLIENT_CONFIG_FILE
, &fn
)))
133 r
= f
? pa_config_parse(fn
, f
, table
, NULL
) : 0;
136 r
= pa_client_conf_load_cookie(c
);
147 int pa_client_conf_env(pa_client_conf
*c
) {
150 if ((e
= getenv(ENV_DEFAULT_SINK
))) {
151 pa_xfree(c
->default_sink
);
152 c
->default_sink
= pa_xstrdup(e
);
155 if ((e
= getenv(ENV_DEFAULT_SOURCE
))) {
156 pa_xfree(c
->default_source
);
157 c
->default_source
= pa_xstrdup(e
);
160 if ((e
= getenv(ENV_DEFAULT_SERVER
))) {
161 pa_xfree(c
->default_server
);
162 c
->default_server
= pa_xstrdup(e
);
165 if ((e
= getenv(ENV_DAEMON_BINARY
))) {
166 pa_xfree(c
->daemon_binary
);
167 c
->daemon_binary
= pa_xstrdup(e
);
170 if ((e
= getenv(ENV_COOKIE_FILE
))) {
171 pa_xfree(c
->cookie_file
);
172 c
->cookie_file
= pa_xstrdup(e
);
174 return pa_client_conf_load_cookie(c
);
180 int pa_client_conf_load_cookie(pa_client_conf
* c
) {
186 c
->cookie_valid
= FALSE
;
188 if (pa_authkey_load_auto(c
->cookie_file
, c
->cookie
, sizeof(c
->cookie
)) < 0)
191 c
->cookie_valid
= TRUE
;