aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/settings/settings.xml7
-rw-r--r--xbmc/network/NetworkServices.cpp14
-rw-r--r--xbmc/network/upnp/UPnP.cpp3
3 files changed, 19 insertions, 5 deletions
diff --git a/system/settings/settings.xml b/system/settings/settings.xml
index 042c09ec33..9378c28fc5 100644
--- a/system/settings/settings.xml
+++ b/system/settings/settings.xml
@@ -2023,12 +2023,15 @@
</dependencies>
<control type="toggle" />
</setting>
- <setting id="services.upnprenderer" type="boolean" label="21881" help="36325">
+ <setting id="services.upnpcontroller" type="boolean" label="21361" help="36326">
<level>1</level>
<default>false</default>
+ <dependencies>
+ <dependency type="enable" setting="services.upnpserver">true</dependency>
+ </dependencies>
<control type="toggle" />
</setting>
- <setting id="services.upnpcontroller" type="boolean" label="21361" help="36326">
+ <setting id="services.upnprenderer" type="boolean" label="21881" help="36325">
<level>1</level>
<default>false</default>
<control type="toggle" />
diff --git a/xbmc/network/NetworkServices.cpp b/xbmc/network/NetworkServices.cpp
index 32ef8198dc..1886e38205 100644
--- a/xbmc/network/NetworkServices.cpp
+++ b/xbmc/network/NetworkServices.cpp
@@ -257,7 +257,14 @@ bool CNetworkServices::OnSettingChanging(const CSetting *setting)
if (settingId == "services.upnpserver")
{
if (((CSettingBool*)setting)->GetValue())
- return StartUPnPServer();
+ {
+ if (!StartUPnPServer())
+ return false;
+
+ // always stop and restart the client if necessary
+ StopUPnPClient();
+ StartUPnPClient();
+ }
else
return StopUPnPServer();
}
@@ -764,7 +771,8 @@ bool CNetworkServices::StopUPnP(bool bWait)
bool CNetworkServices::StartUPnPClient()
{
#ifdef HAS_UPNP
- if (!CSettings::Get().GetBool("services.upnpcontroller"))
+ if (!CSettings::Get().GetBool("services.upnpcontroller") ||
+ !CSettings::Get().GetBool("services.upnpserver"))
return false;
CLog::Log(LOGNOTICE, "starting upnp controller");
@@ -856,6 +864,8 @@ bool CNetworkServices::StopUPnPServer()
if (!IsUPnPRendererRunning())
return true;
+ StopUPnPClient();
+
CLog::Log(LOGNOTICE, "stopping upnp server");
CUPnP::GetInstance()->StopServer();
diff --git a/xbmc/network/upnp/UPnP.cpp b/xbmc/network/upnp/UPnP.cpp
index e9ce9e9dc9..f71b1effec 100644
--- a/xbmc/network/upnp/UPnP.cpp
+++ b/xbmc/network/upnp/UPnP.cpp
@@ -496,7 +496,8 @@ CUPnP::StartClient()
m_MediaBrowser = new CMediaBrowser(m_CtrlPointHolder->m_CtrlPoint);
// start controller
- if (CSettings::Get().GetBool("services.upnpcontroller")) {
+ if (CSettings::Get().GetBool("services.upnpcontroller") &&
+ CSettings::Get().GetBool("services.upnpserver")) {
m_MediaController = new CMediaController(m_CtrlPointHolder->m_CtrlPoint);
}
}