*valuep = BACKEND_COMMAND;
else if(!strcmp(vec[0], "network"))
*valuep = BACKEND_NETWORK;
- else {
+ else if(!strcmp(vec[0], "coreaudio")) {
+#if HAVE_COREAUDIO_AUDIOHARDWARE_H
+ *valuep = BACKEND_COREAUDIO;
+#else
+ error(0, "%s:%d: Core Audio is not available on this platform",
+ cs->path, cs->line);
+ return -1;
+#endif
+ } else if(!strcmp(vec[0], "oss")) {
+#if HAVE_SYS_SOUNDCARD_H
+ *valuep = BACKEND_OSS;
+#else
+ error(0, "%s:%d: OSS is not available on this platform",
+ cs->path, cs->line);
+ return -1;
+#endif
+ } else {
error(0, "%s:%d: invalid '%s' value '%s'",
cs->path, cs->line, whoami->name, vec[0]);
return -1;
{ C(nice_rescan), &type_integer, validate_non_negative },
{ C(nice_server), &type_integer, validate_any },
{ C(nice_speaker), &type_integer, validate_any },
+ { C(noticed_history), &type_integer, validate_positive },
{ C(password), &type_string, validate_any },
{ C(player), &type_stringlist_accum, validate_player },
{ C(plugins), &type_string_accum, validate_isdir },
c->speaker_backend = -1;
c->multicast_ttl = 1;
c->authorization_algorithm = xstrdup("sha1");
+ c->noticed_history = 31;
return c;
}
}
/** @brief Set post-parse defaults */
-static void config_postdefaults(struct config *c) {
+static void config_postdefaults(struct config *c,
+ int server) {
struct config_state cs;
const struct conf *whoami;
int n;
else {
#if API_ALSA
c->speaker_backend = BACKEND_ALSA;
+#elif HAVE_COREAUDIO_AUDIOHARDWARE_H
+ c->speaker_backend = BACKEND_COREAUDIO;
#else
c->speaker_backend = BACKEND_COMMAND;
#endif
}
}
- if(c->speaker_backend == BACKEND_COMMAND && !c->speaker_command)
- fatal(0, "speaker_backend is command but speaker_command is not set");
- if(c->speaker_backend == BACKEND_NETWORK && !c->broadcast.n)
- fatal(0, "speaker_backend is network but broadcast is not set");
- if(c->speaker_backend) {
- /* Override sample format */
+ if(server) {
+ if(c->speaker_backend == BACKEND_COMMAND && !c->speaker_command)
+ fatal(0, "speaker_backend is command but speaker_command is not set");
+ if(c->speaker_backend == BACKEND_NETWORK && !c->broadcast.n)
+ fatal(0, "speaker_backend is network but broadcast is not set");
+ }
+ /* Override sample format */
+ switch(c->speaker_backend) {
+ case BACKEND_NETWORK:
c->sample_format.rate = 44100;
c->sample_format.channels = 2;
c->sample_format.bits = 16;
c->sample_format.endian = ENDIAN_BIG;
- }
+ break;
+ case BACKEND_COREAUDIO:
+ c->sample_format.rate = 44100;
+ c->sample_format.channels = 2;
+ c->sample_format.bits = 16;
+ c->sample_format.endian = ENDIAN_NATIVE;
+ break;
+ }
}
-/** @brief (Re-)read the config file */
-int config_read() {
+/** @brief (Re-)read the config file
+ * @param server If set, do extra checking
+ */
+int config_read(int server) {
struct config *c;
char *privconf;
struct passwd *pw;
return -1;
xfree(privconf);
/* install default namepart and transform settings */
- config_postdefaults(c);
+ config_postdefaults(c, server);
/* everything is good so we shall use the new config */
config_free(config);
config = c;