4 This file is part of polypaudio.
6 polypaudio is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published
8 by the Free Software Foundation; either version 2 of the License,
9 or (at your option) any later version.
11 polypaudio is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with polypaudio; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
28 #include "client-conf.h"
31 #include "conf-parser.h"
35 #ifndef DEFAULT_CONFIG_DIR
36 #define DEFAULT_CONFIG_DIR "/etc/polypaudio"
39 #define DEFAULT_CLIENT_CONFIG_FILE DEFAULT_CONFIG_DIR"/client.conf"
40 #define DEFAULT_CLIENT_CONFIG_FILE_USER ".polypaudio/client.conf"
42 #define ENV_CLIENT_CONFIG_FILE "POLYP_CLIENTCONFIG"
43 #define ENV_DEFAULT_SINK "POLYP_SINK"
44 #define ENV_DEFAULT_SOURCE "POLYP_SOURCE"
45 #define ENV_DEFAULT_SERVER "POLYP_SERVER"
46 #define ENV_DAEMON_BINARY "POLYP_BINARY"
47 #define ENV_COOKIE_FILE "POLYP_COOKIE"
49 static const struct pa_client_conf default_conf
= {
50 .daemon_binary
= NULL
,
51 .extra_arguments
= NULL
,
53 .default_source
= NULL
,
54 .default_server
= NULL
,
60 struct pa_client_conf
*pa_client_conf_new(void) {
61 struct pa_client_conf
*c
= pa_xmemdup(&default_conf
, sizeof(default_conf
));
65 c
->daemon_binary
= pa_xstrdup(POLYPAUDIO_BINARY
);
66 c
->extra_arguments
= pa_xstrdup("--log-target=syslog --exit-idle-time=5");
68 c
->cookie_file
= pa_xstrdup(PA_NATIVE_COOKIE_FILE
);
73 void pa_client_conf_free(struct pa_client_conf
*c
) {
75 pa_xfree(c
->daemon_binary
);
76 pa_xfree(c
->extra_arguments
);
77 pa_xfree(c
->default_sink
);
78 pa_xfree(c
->default_source
);
79 pa_xfree(c
->default_server
);
80 pa_xfree(c
->cookie_file
);
83 int pa_client_conf_load(struct pa_client_conf
*c
, const char *filename
) {
88 struct pa_config_item table
[] = {
89 { "daemon-binary", pa_config_parse_string
, NULL
},
90 { "extra-arguments", pa_config_parse_string
, NULL
},
91 { "default-sink", pa_config_parse_string
, NULL
},
92 { "default-source", pa_config_parse_string
, NULL
},
93 { "default-server", pa_config_parse_string
, NULL
},
94 { "autospawn", pa_config_parse_bool
, NULL
},
95 { "cookie-file", pa_config_parse_string
, NULL
},
99 table
[0].data
= &c
->daemon_binary
;
100 table
[1].data
= &c
->extra_arguments
;
101 table
[2].data
= &c
->default_sink
;
102 table
[3].data
= &c
->default_source
;
103 table
[4].data
= &c
->default_server
;
104 table
[5].data
= &c
->autospawn
;
105 table
[6].data
= &c
->cookie_file
;
108 fopen((fn
= pa_xstrdup(filename
)), "r") :
109 pa_open_config_file(DEFAULT_CLIENT_CONFIG_FILE
, DEFAULT_CLIENT_CONFIG_FILE_USER
, ENV_CLIENT_CONFIG_FILE
, &fn
);
111 if (!f
&& errno
!= EINTR
) {
112 pa_log(__FILE__
": WARNING: failed to open configuration file '%s': %s\n", filename
, strerror(errno
));
116 r
= f
? pa_config_parse(fn
, f
, table
, NULL
) : 0;
119 r
= pa_client_conf_load_cookie(c
);
131 int pa_client_conf_env(struct pa_client_conf
*c
) {
134 if ((e
= getenv(ENV_DEFAULT_SINK
))) {
135 pa_xfree(c
->default_sink
);
136 c
->default_sink
= pa_xstrdup(e
);
139 if ((e
= getenv(ENV_DEFAULT_SOURCE
))) {
140 pa_xfree(c
->default_source
);
141 c
->default_source
= pa_xstrdup(e
);
144 if ((e
= getenv(ENV_DEFAULT_SERVER
))) {
145 pa_xfree(c
->default_server
);
146 c
->default_server
= pa_xstrdup(e
);
149 if ((e
= getenv(ENV_DAEMON_BINARY
))) {
150 pa_xfree(c
->daemon_binary
);
151 c
->daemon_binary
= pa_xstrdup(e
);
154 if ((e
= getenv(ENV_COOKIE_FILE
))) {
155 pa_xfree(c
->cookie_file
);
156 c
->cookie_file
= pa_xstrdup(e
);
158 return pa_client_conf_load_cookie(c
);
164 int pa_client_conf_load_cookie(struct pa_client_conf
* c
) {
172 if (pa_authkey_load_auto(c
->cookie_file
, c
->cookie
, sizeof(c
->cookie
)) < 0)