commandParser.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #include "./commandParser.h"
  2. #include "./loginCommand.h"
  3. #include "./commandWinampAuth.h"
  4. #include "./commandWebAuth.h"
  5. #include "./common.h"
  6. #include "../../xml/obj_xml.h"
  7. LoginCommandParser::LoginCommandParser()
  8. : object(NULL)
  9. {
  10. }
  11. LoginCommandParser::~LoginCommandParser()
  12. {
  13. if (NULL != object)
  14. object->Release();
  15. }
  16. HRESULT LoginCommandParser::Begin(obj_xml *reader, ifc_xmlreaderparams *params)
  17. {
  18. if (NULL != object)
  19. return E_PENDING;
  20. if (NULL == reader || NULL == params)
  21. return E_INVALIDARG;
  22. GUID commandId;
  23. LPCWSTR pszId = params->getItemValue(L"id");
  24. if (NULL == pszId || RPC_S_OK != UuidFromString((RPC_WSTR)pszId, &commandId))
  25. return E_INVALIDARG;
  26. HRESULT hr;
  27. if (IsEqualGUID(LCUID_WINAMPAUTH, commandId))
  28. hr = LoginCommandWinampAuth::CreateInstance((LoginCommandWinampAuth**)&object);
  29. else if (IsEqualGUID(LCUID_WEBAUTH, commandId))
  30. hr = LoginCommandWebAuth::CreateInstance((LoginCommandWebAuth**)&object);
  31. else
  32. hr = E_INVALIDARG;
  33. if (SUCCEEDED(hr))
  34. reader->xmlreader_registerCallback(L"loginProviders\fprovider\fcommand\f*", this);
  35. return hr;
  36. }
  37. HRESULT LoginCommandParser::End(obj_xml *reader, LoginCommand **instance)
  38. {
  39. if (NULL == object)
  40. return E_UNEXPECTED;
  41. HRESULT hr;
  42. if (SUCCEEDED(object->IsValid()))
  43. {
  44. if (NULL != instance)
  45. {
  46. *instance = object;
  47. object->AddRef();
  48. }
  49. hr = S_OK;
  50. }
  51. else
  52. hr = E_FAIL;
  53. object->Release();
  54. object = NULL;
  55. if (NULL != reader)
  56. reader->xmlreader_unregisterCallback(this);
  57. return hr;
  58. }
  59. void LoginCommandParser::Event_XmlStartElement(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params)
  60. {
  61. elementString.Clear();
  62. }
  63. void LoginCommandParser::Event_XmlEndElement(const wchar_t *xmlpath, const wchar_t *xmltag)
  64. {
  65. if (NULL != object)
  66. object->SetParameter(xmltag, elementString.Get());
  67. }
  68. void LoginCommandParser::Event_XmlCharData(const wchar_t *xmlpath, const wchar_t *xmltag, const wchar_t *value)
  69. {
  70. elementString.Append(value);
  71. }
  72. void LoginCommandParser::Event_XmlError(int linenum, int errcode, const wchar_t *errstr)
  73. {
  74. elementString.Clear();
  75. }
  76. #define CBCLASS LoginCommandParser
  77. START_DISPATCH;
  78. VCB(ONSTARTELEMENT, Event_XmlStartElement)
  79. VCB(ONENDELEMENT, Event_XmlEndElement)
  80. VCB(ONCHARDATA, Event_XmlCharData)
  81. VCB(ONERROR, Event_XmlError)
  82. END_DISPATCH;
  83. #undef CBCLASS