diff options
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.patch | 151 |
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 + |