return 0;
}
-/** @brief Validate a non-negative (@c long) integer
+/** @brief Common code for validating integer values
* @param cs Configuration state
* @param nvec Length of (proposed) new value
* @param vec Elements of new value
- * @return 0 on success, non-0 on error
+ * @param n_out Where to put the value
*/
-static int validate_non_negative(const struct config_state *cs,
- int nvec, char **vec) {
- long n;
+static int common_validate_integer(const struct config_state *cs,
+ int nvec, char **vec, long *n_out) {
char errbuf[1024];
if(nvec < 1) {
disorder_error(0, "%s:%d: too many arguments", cs->path, cs->line);
return -1;
}
- if(xstrtol(&n, vec[0], 0, 0)) {
+ if(xstrtol(n_out, vec[0], 0, 0)) {
disorder_error(0, "%s:%d: %s", cs->path, cs->line,
format_error(ec_errno, errno, errbuf, sizeof errbuf));
return -1;
}
+ return 0;
+}
+
+/** @brief Validate a non-negative (@c long) integer
+ * @param cs Configuration state
+ * @param nvec Length of (proposed) new value
+ * @param vec Elements of new value
+ * @return 0 on success, non-0 on error
+ */
+static int validate_non_negative(const struct config_state *cs,
+ int nvec, char **vec) {
+ long n;
+ if(common_validate_integer(cs, nvec, vec, &n)) return -1;
if(n < 0) {
disorder_error(0, "%s:%d: must not be negative", cs->path, cs->line);
return -1;
static int validate_positive(const struct config_state *cs,
int nvec, char **vec) {
long n;
- char errbuf[1024];
-
- if(nvec < 1) {
- disorder_error(0, "%s:%d: missing argument", cs->path, cs->line);
- return -1;
- }
- if(nvec > 1) {
- disorder_error(0, "%s:%d: too many arguments", cs->path, cs->line);
- return -1;
- }
- if(xstrtol(&n, vec[0], 0, 0)) {
- disorder_error(0, "%s:%d: %s", cs->path, cs->line,
- format_error(ec_errno, errno, errbuf, sizeof errbuf));
- return -1;
- }
+ if(common_validate_integer(cs, nvec, vec, &n)) return -1;
if(n <= 0) {
disorder_error(0, "%s:%d: must be positive", cs->path, cs->line);
return -1;
if(server) {
if(!strcmp(c->api, "command") && !c->speaker_command)
disorder_fatal(0, "'api command' but speaker_command is not set");
- if((!strcmp(c->api, "rtp")) && c->broadcast.af == -1)
- disorder_fatal(0, "'api rtp' but broadcast is not set");
+ if((!strcmp(c->api, "rtp")) &&
+ c->broadcast.af == -1 && strcmp(c->rtp_mode, "request"))
+ disorder_fatal(0, "'api rtp' but broadcast is not set "
+ "and mode is not not 'request'");
}
/* Override sample format */
if(!strcmp(c->api, "rtp")) {