aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--doc/user.xml13
-rw-r--r--src/db/plugins/ProxyDatabasePlugin.cxx6
3 files changed, 21 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 17103fd4f..b8a460938 100644
--- a/NEWS
+++ b/NEWS
@@ -21,6 +21,8 @@ ver 0.20 (not yet released)
* reset song priority on playback
* write database and state file atomically
* remove dependency on GLib
+* database
+ - proxy: add TCP keepalive option
ver 0.19.8 (2015/01/14)
* input
diff --git a/doc/user.xml b/doc/user.xml
index 74c169c11..e5061f1ca 100644
--- a/doc/user.xml
+++ b/doc/user.xml
@@ -1530,6 +1530,19 @@ buffer_size: 16384</programlisting>
<application>MPD</application> instance.
</entry>
</row>
+ <row>
+ <entry>
+ <varname>keepalive</varname>
+ <parameter>yes|no</parameter>
+ </entry>
+ <entry>
+ Send TCP keepalive packets to the "master"
+ <application>MPD</application> instance? This option can
+ help avoid certain firewalls dropping inactive
+ connections, at the expensive of a very small amount of
+ additional network traffic. Disabled by default.
+ </entry>
+ </row>
</tbody>
</tgroup>
</informaltable>
diff --git a/src/db/plugins/ProxyDatabasePlugin.cxx b/src/db/plugins/ProxyDatabasePlugin.cxx
index 01848690c..f7518c7ab 100644
--- a/src/db/plugins/ProxyDatabasePlugin.cxx
+++ b/src/db/plugins/ProxyDatabasePlugin.cxx
@@ -71,6 +71,7 @@ class ProxyDatabase final : public Database, SocketMonitor, IdleMonitor {
std::string host;
unsigned port;
+ bool keepalive;
struct mpd_connection *connection;
@@ -336,6 +337,7 @@ ProxyDatabase::Configure(const config_param &param, gcc_unused Error &error)
{
host = param.GetBlockValue("host", "");
port = param.GetBlockValue("port", 0u);
+ keepalive = param.GetBlockValue("keepalive", false);
return true;
}
@@ -376,6 +378,10 @@ ProxyDatabase::Connect(Error &error)
return false;
}
+#if LIBMPDCLIENT_CHECK_VERSION(2, 10, 0)
+ mpd_connection_set_keepalive(connection, keepalive);
+#endif
+
idle_received = unsigned(-1);
is_idle = false;