diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/auth/Loginbox/templateParser.cpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/auth/Loginbox/templateParser.cpp')
-rw-r--r-- | Src/auth/Loginbox/templateParser.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/Src/auth/Loginbox/templateParser.cpp b/Src/auth/Loginbox/templateParser.cpp new file mode 100644 index 00000000..4bcb884f --- /dev/null +++ b/Src/auth/Loginbox/templateParser.cpp @@ -0,0 +1,111 @@ +#include "./templateParser.h" +#include "./loginTemplate.h" +#include "./templateCredentials.h" +#include "./templateInfo.h" +#include "./templateAddress.h" + +#include "./common.h" + +#include "../../xml/obj_xml.h" + + +LoginTemplateParser::LoginTemplateParser() + : object(NULL) +{ +} + +LoginTemplateParser::~LoginTemplateParser() +{ + if (NULL != object) + object->Release(); + +} + + +HRESULT LoginTemplateParser::Begin(obj_xml *reader, ifc_xmlreaderparams *params) +{ + if (NULL != object) + return E_PENDING; + + if (NULL == reader || NULL == params) + return E_INVALIDARG; + + GUID templateId; + LPCWSTR pszId = params->getItemValue(L"id"); + if (NULL == pszId || RPC_S_OK != UuidFromString((RPC_WSTR)pszId, &templateId)) + return E_INVALIDARG; + + HRESULT hr; + if (IsEqualGUID(LTUID_CREDENTIALS, templateId)) + hr = LoginTemplateCredentials::CreateInstance((LoginTemplateCredentials**)&object); + else if (IsEqualGUID(LTUID_INFO, templateId)) + hr = LoginTemplateInfo::CreateInstance((LoginTemplateInfo**)&object); + else if (IsEqualGUID(LTUID_ADDRESS, templateId)) + hr = LoginTemplateAddress::CreateInstance((LoginTemplateAddress**)&object); + else + hr = E_INVALIDARG; + + if (SUCCEEDED(hr)) + reader->xmlreader_registerCallback(L"loginProviders\fprovider\ftemplate\f*", this); + + return hr; +} + +HRESULT LoginTemplateParser::End(obj_xml *reader, LoginTemplate **instance) +{ + if (NULL == object) + return E_UNEXPECTED; + + HRESULT hr; + + if (SUCCEEDED(object->IsValid())) + { + if (NULL != instance) + { + *instance = object; + object->AddRef(); + } + hr = S_OK; + } + else + hr = E_FAIL; + + object->Release(); + object = NULL; + + if (NULL != reader) + reader->xmlreader_unregisterCallback(this); + + return hr; +} + + +void LoginTemplateParser::Event_XmlStartElement(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params) +{ + elementString.Clear(); +} + +void LoginTemplateParser::Event_XmlEndElement(const wchar_t *xmlpath, const wchar_t *xmltag) +{ + if (NULL != object) + object->SetParameter(xmltag, elementString.Get()); +} + +void LoginTemplateParser::Event_XmlCharData(const wchar_t *xmlpath, const wchar_t *xmltag, const wchar_t *value) +{ + elementString.Append(value); +} + +void LoginTemplateParser::Event_XmlError(int linenum, int errcode, const wchar_t *errstr) +{ + elementString.Clear(); +} + +#define CBCLASS LoginTemplateParser +START_DISPATCH; +VCB(ONSTARTELEMENT, Event_XmlStartElement) +VCB(ONENDELEMENT, Event_XmlEndElement) +VCB(ONCHARDATA, Event_XmlCharData) +VCB(ONERROR, Event_XmlError) +END_DISPATCH; +#undef CBCLASS
\ No newline at end of file |