chiark / gitweb /
disobedience/rtp.c: Allow setting a `disorder-playrtp' instance name.
[disorder] / lib / configuration.h
index 63c82c8db368d2c8358b0a072aa59833e4df871d..284ae7a9450ef210c515b21edb667cac83eb148b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * This file is part of DisOrder.
- * Copyright (C) 2004-2010 Richard Kettlewell
+ * Copyright (C) 2004-2011, 2013 Richard Kettlewell
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -22,9 +22,8 @@
 #ifndef CONFIGURATION_H
 #define CONFIGURATION_H
 
-#include <pcre.h>
-
 #include "speaker-protocol.h"
+#include "regexp.h"
 #include "rights.h"
 #include "addr.h"
 
@@ -71,7 +70,7 @@ struct collectionlist {
 /** @brief A track name part */
 struct namepart {
   char *part;                          /* part */
-  pcre *re;                            /* compiled regexp */
+  regexp *re;                          /* compiled regexp */
   char *res;                            /* regexp as a string */
   char *replace;                       /* replacement string */
   char *context;                       /* context glob */
@@ -89,7 +88,7 @@ struct transform {
   char *type;                          /* track or dir */
   char *context;                       /* sort or choose */
   char *replace;                       /* substitution string */
-  pcre *re;                            /* compiled re */
+  regexp *re;                          /* compiled re */
   unsigned flags;                      /* regexp flags */
 };
 
@@ -112,24 +111,15 @@ struct config {
   /** @brief All tracklength plugins */
   struct stringlistlist tracklength;
 
-  /** @brief Allowed users */
-  struct stringlistlist allow;
-
   /** @brief Scratch tracks */
   struct stringlist scratch;
 
-  /** @brief Gap between tracks in seconds */
-  long gap;
-
   /** @brief Maximum number of recent tracks to record in history */
   long history;
 
   /** @brief Expiry limit for noticed.db */
   long noticed_history;
   
-  /** @brief Trusted users */
-  struct stringlist trust;
-
   /** @brief User for server to run as */
   const char *user;
 
@@ -157,17 +147,12 @@ struct config {
   /** @brief Mixer channel to use */
   char *channel;
 
-  long prefsync;                       /* preflog sync interval */
-
   /** @brief Secondary listen address */
   struct netaddress listen;
 
   /** @brief Alias format string */
   const char *alias;
 
-  /** @brief Enable server locking */
-  int lock;
-
   /** @brief Nice value for server */
   long nice_server;
 
@@ -195,8 +180,10 @@ struct config {
   /** @brief Maximum lifetime of a playlist lock */
   long playlist_lock_timeout;
 
+#if !_WIN32
   /** @brief Home directory for state files */
   const char *home;
+#endif
 
   /** @brief Login username */
   char *username;
@@ -222,16 +209,6 @@ struct config {
   /** @brief Minimum refresh interval for web interface (seconds) */
   long refresh_min;
 
-  /** @brief Facilities restricted to trusted users
-   *
-   * A bitmap of @ref RESTRICT_SCRATCH, @ref RESTRICT_REMOVE and @ref
-   * RESTRICT_MOVE.
-   */
-  unsigned restrictions;               /* restrictions */
-#define RESTRICT_SCRATCH 1             /**< Restrict scratching */
-#define RESTRICT_REMOVE 2              /**< Restrict removal */
-#define RESTRICT_MOVE 4                        /**< Restrict rearrangement */
-
   /** @brief Target queue length */
   long queue_pad;
 
@@ -245,6 +222,7 @@ struct config {
 
   /** @brief ALSA output device */
   const char *device;
+
   struct transformlist transform;      /* path name transformations */
 
   /** @brief Address to send audio data to */
@@ -256,6 +234,25 @@ struct config {
   /** @brief RTP delay threshold */
   long rtp_delay_threshold;
 
+  /** @brief Whether to ignore the server's suggested RTP arrangement and
+   * always request a unicast stream */
+  int rtp_always_request;
+
+  /** @brief RTP buffer low-water mark */
+  long rtp_minbuffer;
+
+  /** @brief RTP buffer maximum size */
+  long rtp_maxbuffer;
+
+  /** @brief RTP receive buffer size */
+  long rtp_rcvbuf;
+
+  /** @brief Fixed RTP listening address */
+  struct netaddress rtp_request_address;
+
+  /** @brief @c disorder-playrtp instance name (for naming sockets etc.) */
+  char *rtp_instance_name;
+
   /** @brief Verbose RTP transmission logging */
   int rtp_verbose;
   
@@ -265,6 +262,25 @@ struct config {
   /** @brief Whether to loop back multicast packets */
   int multicast_loop;
 
+  /** @brief Maximum size of RTP payload to send
+   *
+   * This is the maximum number of bytes we pass to write(2); to determine
+   * actual packet sizes, add a UDP header and an IP header (and a link layer
+   * header if it's the link layer size you care about).
+   *
+   * Don't make this too big or arithmetic will start to overflow.
+   */
+  long rtp_max_payload;
+
+  /** @brief Whether to allow MTU discovery
+   *
+   * This is `yes' to force it on, `no' to force it off, or `default' to do
+   * whatever the system is configured to do.  Note that this only has a
+   * useful effect in IPv4, since IPv6 doesn't permit hop-by-hop
+   * fragmentation.
+   */
+  char *rtp_mtu_discovery;
+
   /** @brief Login lifetime in seconds */
   long cookie_login_lifetime;
 
@@ -301,6 +317,9 @@ struct config {
   /** @brief Rescan on (un)mount */
   int mount_rescan;
 
+  /** @brief RTP mode */
+  const char *rtp_mode;
+
   /* derived values: */
   int nparts;                          /* number of distinct name parts */
   char **parts;                                /* name part list  */