diff --git a/doc/plugins.rst b/doc/plugins.rst index d1022f163..5216a9b4d 100644 --- a/doc/plugins.rst +++ b/doc/plugins.rst @@ -61,6 +61,15 @@ upnp Provides access to UPnP media servers. +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - Setting + - Description + * - **interface** + - Interface used to discover media servers. Decided by upnp if left unconfigured. + Storage plugins =============== diff --git a/src/db/plugins/upnp/UpnpDatabasePlugin.cxx b/src/db/plugins/upnp/UpnpDatabasePlugin.cxx index 86d3fe99a..318ec9a5c 100644 --- a/src/db/plugins/upnp/UpnpDatabasePlugin.cxx +++ b/src/db/plugins/upnp/UpnpDatabasePlugin.cxx @@ -39,6 +39,7 @@ #include "util/ConstBuffer.hxx" #include "util/RecursiveMap.hxx" #include "util/SplitString.hxx" +#include "config/Block.hxx" #include #include @@ -76,10 +77,13 @@ class UpnpDatabase : public Database { UpnpClient_Handle handle; UPnPDeviceDirectory *discovery; + const char* interface; + public: - explicit UpnpDatabase(EventLoop &_event_loop) noexcept + explicit UpnpDatabase(EventLoop &_event_loop, const ConfigBlock &block) noexcept :Database(upnp_db_plugin), - event_loop(_event_loop) {} + event_loop(_event_loop), + interface(block.GetBlockValue("interface", nullptr)) {} static DatabasePtr Create(EventLoop &main_event_loop, EventLoop &io_event_loop, @@ -147,15 +151,15 @@ private: DatabasePtr UpnpDatabase::Create(EventLoop &, EventLoop &io_event_loop, [[maybe_unused]] DatabaseListener &listener, - const ConfigBlock &) noexcept + const ConfigBlock &block) noexcept { - return std::make_unique(io_event_loop); + return std::make_unique(io_event_loop, block);; } void UpnpDatabase::Open() { - handle = UpnpClientGlobalInit(nullptr); + handle = UpnpClientGlobalInit(interface); discovery = new UPnPDeviceDirectory(event_loop, handle); try {