aboutsummaryrefslogtreecommitdiff
path: root/Src/auth/Loginbox/templateNodeParser.cpp
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/auth/Loginbox/templateNodeParser.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/auth/Loginbox/templateNodeParser.cpp')
-rw-r--r--Src/auth/Loginbox/templateNodeParser.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/Src/auth/Loginbox/templateNodeParser.cpp b/Src/auth/Loginbox/templateNodeParser.cpp
new file mode 100644
index 00000000..101a71ec
--- /dev/null
+++ b/Src/auth/Loginbox/templateNodeParser.cpp
@@ -0,0 +1,82 @@
+#include "./templateNodeParser.h"
+#include "./loginTemplate.h"
+#include "./loginProvider.h"
+
+#include "../../xml/obj_xml.h"
+
+LoginTemplateNodeParser::LoginTemplateNodeParser()
+ : reader(NULL), provider(NULL)
+{
+}
+
+LoginTemplateNodeParser::~LoginTemplateNodeParser()
+{
+ End();
+}
+
+
+HRESULT LoginTemplateNodeParser::Begin(obj_xml *pReader, LoginProvider *pProvider)
+{
+ if (NULL != reader || NULL != provider)
+ return E_PENDING;
+
+ if (NULL == pReader || NULL == pProvider)
+ return E_INVALIDARG;
+
+ reader = pReader;
+ reader->AddRef();
+
+ provider = pProvider;
+ provider->AddRef();
+
+ reader->xmlreader_registerCallback(L"loginProviders\fprovider\ftemplate", this);
+
+ return S_OK;
+}
+
+HRESULT LoginTemplateNodeParser::End()
+{
+ if (NULL != reader)
+ {
+ reader->xmlreader_unregisterCallback(this);
+ reader->Release();
+ reader = NULL;
+ }
+
+ if (NULL != provider)
+ {
+ provider->Release();
+ provider = NULL;
+ }
+ return S_OK;
+}
+
+
+void LoginTemplateNodeParser::Event_XmlStartElement(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params)
+{
+ elementParser.Begin(reader, params);
+}
+
+void LoginTemplateNodeParser::Event_XmlEndElement(const wchar_t *xmlpath, const wchar_t *xmltag)
+{
+ LoginTemplate *result;
+ if (SUCCEEDED(elementParser.End(reader, &result)))
+ {
+ if (NULL != provider)
+ provider->SetTemplate(result);
+
+ result->Release();
+ }
+}
+
+void LoginTemplateNodeParser::Event_XmlError(int linenum, int errcode, const wchar_t *errstr)
+{
+}
+
+#define CBCLASS LoginTemplateNodeParser
+START_DISPATCH;
+VCB(ONSTARTELEMENT, Event_XmlStartElement)
+VCB(ONENDELEMENT, Event_XmlEndElement)
+VCB(ONERROR, Event_XmlError)
+END_DISPATCH;
+#undef CBCLASS \ No newline at end of file