summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/patches/0008-platinum-allow-some-statevariables-to-reset-to-defau.patch
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/patches/0008-platinum-allow-some-statevariables-to-reset-to-defau.patch')
-rw-r--r--lib/libUPnP/patches/0008-platinum-allow-some-statevariables-to-reset-to-defau.patch151
1 files changed, 151 insertions, 0 deletions
diff --git a/lib/libUPnP/patches/0008-platinum-allow-some-statevariables-to-reset-to-defau.patch b/lib/libUPnP/patches/0008-platinum-allow-some-statevariables-to-reset-to-defau.patch
new file mode 100644
index 0000000..8841447
--- /dev/null
+++ b/lib/libUPnP/patches/0008-platinum-allow-some-statevariables-to-reset-to-defau.patch
@@ -0,0 +1,151 @@
+From 73a60837afb1a0ddf03ac500665c28853d95dca8 Mon Sep 17 00:00:00 2001
+From: Alasdair Campbell <alcoheca@gmail.com>
+Date: Tue, 9 Oct 2012 10:14:39 +0100
+Subject: [PATCH 08/24] platinum: allow some statevariables to reset to
+ default value after sending completed (needed for
+ ContainerUpdateIDs usage)
+
+---
+ lib/libUPnP/Platinum/Source/Core/PltService.cpp | 11 +++++++++--
+ lib/libUPnP/Platinum/Source/Core/PltService.h | 3 ++-
+ lib/libUPnP/Platinum/Source/Core/PltStateVariable.cpp | 16 ++++++++++++++--
+ lib/libUPnP/Platinum/Source/Core/PltStateVariable.h | 10 +++++++++-
+ 4 files changed, 34 insertions(+), 6 deletions(-)
+
+diff --git a/lib/libUPnP/Platinum/Source/Core/PltService.cpp b/lib/libUPnP/Platinum/Source/Core/PltService.cpp
+index b1fec51..b86fb23 100644
+--- a/lib/libUPnP/Platinum/Source/Core/PltService.cpp
++++ b/lib/libUPnP/Platinum/Source/Core/PltService.cpp
+@@ -459,14 +459,14 @@ PLT_Service::IsSubscribable()
+ | PLT_Service::SetStateVariable
+ +---------------------------------------------------------------------*/
+ NPT_Result
+-PLT_Service::SetStateVariable(const char* name, const char* value)
++PLT_Service::SetStateVariable(const char* name, const char* value, const bool clearonsend /*=false*/)
+ {
+ PLT_StateVariable* stateVariable = NULL;
+ NPT_ContainerFind(m_StateVars, PLT_StateVariableNameFinder(name), stateVariable);
+ if (stateVariable == NULL)
+ return NPT_FAILURE;
+
+- return stateVariable->SetValue(value);
++ return stateVariable->SetValue(value, clearonsend);
+ }
+
+ /*----------------------------------------------------------------------
+@@ -835,6 +835,13 @@ PLT_Service::NotifyChanged()
+ m_Subscribers.Erase(sub_iter++);
+ }
+
++ // some state variables must be cleared immediatly after sending
++ iter = vars_ready.GetFirstItem();
++ while (iter) {
++ PLT_StateVariable* var = *iter;
++ var->OnSendCompleted();
++ ++iter;
++ }
+ return NPT_SUCCESS;
+ }
+
+diff --git a/lib/libUPnP/Platinum/Source/Core/PltService.h b/lib/libUPnP/Platinum/Source/Core/PltService.h
+index 84959f2..0401ea2 100644
+--- a/lib/libUPnP/Platinum/Source/Core/PltService.h
++++ b/lib/libUPnP/Platinum/Source/Core/PltService.h
+@@ -216,8 +216,9 @@ public:
+ when necessary.
+ @param name state variable name
+ @param value new State Variable value.
++ @param clearonsend whether the State Variable should clear immediatly in ::OnSendingCompleted
+ */
+- NPT_Result SetStateVariable(const char* name, const char* value);
++ NPT_Result SetStateVariable(const char* name, const char* value, const bool clearonsend = false);
+
+ /**
+ Certain state variables notifications must not be sent faster than a certain
+diff --git a/lib/libUPnP/Platinum/Source/Core/PltStateVariable.cpp b/lib/libUPnP/Platinum/Source/Core/PltStateVariable.cpp
+index c3eb7cc..d38392e 100644
+--- a/lib/libUPnP/Platinum/Source/Core/PltStateVariable.cpp
++++ b/lib/libUPnP/Platinum/Source/Core/PltStateVariable.cpp
+@@ -49,7 +49,8 @@ PLT_StateVariable::PLT_StateVariable(PLT_Service* service) :
+ m_Service(service),
+ m_AllowedValueRange(NULL),
+ m_IsSendingEvents(false),
+- m_IsSendingEventsIndirectly(true)
++ m_IsSendingEventsIndirectly(true),
++ m_ShouldClearOnSend(false)
+ {
+ }
+
+@@ -146,7 +147,7 @@ PLT_StateVariable::SetRate(NPT_TimeInterval rate)
+ | PLT_StateVariable::SetValue
+ +---------------------------------------------------------------------*/
+ NPT_Result
+-PLT_StateVariable::SetValue(const char* value)
++PLT_StateVariable::SetValue(const char* value, const bool clearonsend /*=false*/)
+ {
+ if (value == NULL) {
+ return NPT_FAILURE;
+@@ -160,6 +161,7 @@ PLT_StateVariable::SetValue(const char* value)
+ }
+
+ m_Value = value;
++ m_ShouldClearOnSend = clearonsend;
+ m_Service->AddChanged(this);
+ }
+
+@@ -184,6 +186,16 @@ PLT_StateVariable::IsReadyToPublish()
+ }
+
+ /*----------------------------------------------------------------------
++| PLT_StateVariable::OnSendCompleted
+++---------------------------------------------------------------------*/
++void
++PLT_StateVariable::OnSendCompleted()
++{
++ if(m_ShouldClearOnSend)
++ m_Value = m_DefaultValue;
++}
++
++/*----------------------------------------------------------------------
+ | PLT_StateVariable::ValidateValue
+ +---------------------------------------------------------------------*/
+ NPT_Result
+diff --git a/lib/libUPnP/Platinum/Source/Core/PltStateVariable.h b/lib/libUPnP/Platinum/Source/Core/PltStateVariable.h
+index 46ec9e9..465e95c 100644
+--- a/lib/libUPnP/Platinum/Source/Core/PltStateVariable.h
++++ b/lib/libUPnP/Platinum/Source/Core/PltStateVariable.h
+@@ -115,8 +115,9 @@ public:
+ it is an allowed value. Once the value is validated, it is marked for eventing by
+ calling the PLT_Service AddChanged function.
+ @param value new state variable value. Can be a comma separated list of values.
++ @param clearonsend whether the statevariable should be cleared immediatly after sending
+ */
+- NPT_Result SetValue(const char* value);
++ NPT_Result SetValue(const char* value, const bool clearonsend = false);
+
+ /**
+ Validate the new value of the state variable.
+@@ -173,6 +174,12 @@ protected:
+ bool IsReadyToPublish();
+
+ /**
++ * If this statevariable should clear after sending to all subscribers, clears the value without
++ * eventing the change
++ */
++ void OnSendCompleted();
++
++ /**
+ Serialize the state variable into xml.
+ */
+ NPT_Result Serialize(NPT_XmlElementNode& node);
+@@ -189,6 +196,7 @@ protected:
+ NPT_String m_DefaultValue;
+ bool m_IsSendingEvents;
+ bool m_IsSendingEventsIndirectly;
++ bool m_ShouldClearOnSend;
+ NPT_TimeInterval m_Rate;
+ NPT_TimeStamp m_LastEvent;
+ NPT_Array<NPT_String*> m_AllowedValues;
+--
+1.7.11.msysgit.0
+