upnp: expose interface configuration on UpnpInit2()

Adds the Interface Name as an argument to the *Init functions to make it
possible to select which interface is used by upnp to detect servers.

Currently "nullptr" is passed in to let the upnp library select an
interface, as before.
This commit is contained in:
Max Audron 2021-11-08 22:48:07 +01:00
parent c93195c94b
commit 4ed60a5711
6 changed files with 12 additions and 11 deletions

View File

@ -155,7 +155,7 @@ UpnpDatabase::Create(EventLoop &, EventLoop &io_event_loop,
void
UpnpDatabase::Open()
{
handle = UpnpClientGlobalInit();
handle = UpnpClientGlobalInit(nullptr);
discovery = new UPnPDeviceDirectory(event_loop, handle);
try {

View File

@ -57,9 +57,9 @@ DoInit()
}
UpnpClient_Handle
UpnpClientGlobalInit()
UpnpClientGlobalInit(const char* iface)
{
UpnpGlobalInit();
UpnpGlobalInit(iface);
try {
const std::lock_guard<Mutex> protect(upnp_client_init_mutex);

View File

@ -23,7 +23,7 @@
#include "Compat.hxx"
UpnpClient_Handle
UpnpClientGlobalInit();
UpnpClientGlobalInit(const char* iface);
void
UpnpClientGlobalFinish() noexcept;

View File

@ -33,12 +33,13 @@ static Mutex upnp_init_mutex;
static unsigned upnp_ref;
static void
DoInit()
DoInit(const char* iface)
{
#ifdef UPNP_ENABLE_IPV6
auto code = UpnpInit2(nullptr, 0);
auto code = UpnpInit2(iface, 0);
#else
auto code = UpnpInit(nullptr, 0);
auto code = UpnpInit(iface, 0);
#endif
if (code != UPNP_E_SUCCESS)
throw FormatRuntimeError("UpnpInit() failed: %s",
@ -53,12 +54,12 @@ DoInit()
}
void
UpnpGlobalInit()
UpnpGlobalInit(const char* iface)
{
const std::lock_guard<Mutex> protect(upnp_init_mutex);
if (upnp_ref == 0)
DoInit();
DoInit(iface);
++upnp_ref;
}

View File

@ -21,7 +21,7 @@
#define MPD_UPNP_INIT_HXX
void
UpnpGlobalInit();
UpnpGlobalInit(const char* iface);
void
UpnpGlobalFinish() noexcept;

View File

@ -74,7 +74,7 @@ private:
void
UpnpNeighborExplorer::Open()
{
auto handle = UpnpClientGlobalInit();
auto handle = UpnpClientGlobalInit(nullptr);
discovery = new UPnPDeviceDirectory(event_loop, handle, this);