summaryrefslogtreecommitdiff
path: root/protocols/JabberG/src/jabber_xml.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/JabberG/src/jabber_xml.cpp')
-rw-r--r--protocols/JabberG/src/jabber_xml.cpp293
1 files changed, 83 insertions, 210 deletions
diff --git a/protocols/JabberG/src/jabber_xml.cpp b/protocols/JabberG/src/jabber_xml.cpp
index fe48d7b1af..66cb7a73bc 100644
--- a/protocols/JabberG/src/jabber_xml.cpp
+++ b/protocols/JabberG/src/jabber_xml.cpp
@@ -28,291 +28,187 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define TAG_MAX_LEN 128
#define ATTR_MAX_LEN 8192
-#define T2UTF(A) A
-
/////////////////////////////////////////////////////////////////////////////////////////
// XmlNodeIq class members
-XmlNodeIq::XmlNodeIq(const wchar_t *type, int id, const wchar_t *to) :
- XmlNode(L"iq")
+XmlNodeIq::XmlNodeIq(const char *type, int id, const char *to) :
+ XmlNode("iq")
{
- if (type != nullptr) *this << XATTR(L"type", type);
- if (to != nullptr) *this << XATTR(L"to", to);
+ if (type != nullptr) *this << XATTR("type", type);
+ if (to != nullptr) *this << XATTR("to", to);
if (id != -1 ) *this << XATTRID(id);
}
-XmlNodeIq::XmlNodeIq(const wchar_t *type, const wchar_t *idStr, const wchar_t *to) :
- XmlNode(L"iq")
+XmlNodeIq::XmlNodeIq(const char *type, const char *idStr, const char *to) :
+ XmlNode("iq")
{
- if (type != nullptr) *this << XATTR(L"type", type );
- if (to != nullptr) *this << XATTR(L"to", to );
- if (idStr != nullptr) *this << XATTR(L"id", idStr);
+ if (type != nullptr) *this << XATTR("type", type );
+ if (to != nullptr) *this << XATTR("to", to );
+ if (idStr != nullptr) *this << XATTR("id", idStr);
}
-XmlNodeIq::XmlNodeIq(const wchar_t *type, HXML node, const wchar_t *to) :
- XmlNode(L"iq")
+XmlNodeIq::XmlNodeIq(const char *type, TiXmlElement *node, const char *to) :
+ XmlNode("iq")
{
- if (type != nullptr) *this << XATTR(L"type", type );
- if (to != nullptr) *this << XATTR(L"to", to );
+ if (type != nullptr) *this << XATTR("type", type );
+ if (to != nullptr) *this << XATTR("to", to );
if (node != nullptr) {
- const wchar_t *iqId = XmlGetAttrValue(*this, L"id");
- if (iqId != nullptr) *this << XATTR(L"id", iqId);
+ const char *iqId = node->Attribute("id");
+ if (iqId != nullptr)
+ *this << XATTR("id", iqId);
}
}
XmlNodeIq::XmlNodeIq(CJabberIqInfo *pInfo) :
- XmlNode(L"iq")
+ XmlNode("iq")
{
if (pInfo) {
- if (pInfo->GetCharIqType() != nullptr) *this << XATTR(L"type", _A2T(pInfo->GetCharIqType()));
- if (pInfo->GetReceiver() != nullptr) *this << XATTR(L"to", pInfo->GetReceiver());
+ if (pInfo->GetCharIqType() != nullptr) *this << XATTR("type", pInfo->GetCharIqType());
+ if (pInfo->GetReceiver() != nullptr) *this << XATTR("to", pInfo->GetReceiver());
if (pInfo->GetIqId() != -1) *this << XATTRID(pInfo->GetIqId());
}
}
-XmlNodeIq::XmlNodeIq(const wchar_t *type, CJabberIqInfo *pInfo) :
- XmlNode(L"iq")
+XmlNodeIq::XmlNodeIq(const char *type, CJabberIqInfo *pInfo) :
+ XmlNode("iq")
{
- if (type != nullptr) *this << XATTR(L"type", type);
+ if (type != nullptr) *this << XATTR("type", type);
if (pInfo) {
- if (pInfo->GetFrom() != nullptr) *this << XATTR(L"to", pInfo->GetFrom());
- if (pInfo->GetIdStr() != nullptr) *this << XATTR(L"id", pInfo->GetIdStr());
+ if (pInfo->GetFrom() != nullptr) *this << XATTR("to", pInfo->GetFrom());
+ if (pInfo->GetIdStr() != nullptr) *this << XATTR("id", pInfo->GetIdStr());
}
}
/////////////////////////////////////////////////////////////////////////////////////////
// XmlNode class members
-XmlNode::XmlNode(const wchar_t *pszName)
-{
- m_hXml = xmlCreateNode(T2UTF(pszName), nullptr, 0);
-}
-
-XmlNode::XmlNode(const wchar_t *pszName, const wchar_t *ptszText)
-{
- m_hXml = xmlCreateNode(T2UTF(pszName), ptszText, 0);
-}
-
-XmlNode::XmlNode(const XmlNode& n)
+XmlNode::XmlNode(const char *pszName)
{
- m_hXml = xmlCopyNode(n);
+ m_hXml = NewElement(pszName); InsertEndChild(m_hXml);
}
-XmlNode& XmlNode::operator =(const XmlNode& n)
+XmlNode::XmlNode(const char *pszName, const char *ptszText)
{
- if (m_hXml)
- xmlDestroyNode(m_hXml);
- m_hXml = xmlCopyNode(n);
- return *this;
+ m_hXml = NewElement(pszName); InsertEndChild(m_hXml);
+ m_hXml->SetText(ptszText);
}
-XmlNode::~XmlNode()
-{
- if (m_hXml) {
- xmlDestroyNode(m_hXml);
- m_hXml = nullptr;
-} }
-
/////////////////////////////////////////////////////////////////////////////////////////
-HXML __fastcall operator<<(HXML node, const XCHILDNS& child)
+TiXmlElement*operator<<(TiXmlElement *node, const XCHILDNS &child)
{
- HXML res = XmlAddChild(node, child.name);
- XmlAddAttr(res, L"xmlns", child.ns);
+ TiXmlElement *res = XmlAddChild(node, child.name);
+ res->SetAttribute("xmlns", child.ns);
return res;
}
-HXML __fastcall operator<<(HXML node, const XQUERY& child)
+TiXmlElement* operator<<(TiXmlElement *node, const XQUERY &child)
{
- HXML n = XmlAddChild(node, L"query");
+ TiXmlElement *n = node->GetDocument()->NewElement("query");
if (n)
- XmlAddAttr(n, L"xmlns", child.ns);
+ n->SetAttribute("xmlns", child.ns);
return n;
}
/////////////////////////////////////////////////////////////////////////////////////////
-void __fastcall XmlAddAttr(HXML hXml, const wchar_t *name, const wchar_t *value)
+void XmlAddAttr(TiXmlElement *hXml, const char *name, const char *value)
{
if (value)
- xmlAddAttr(hXml, name, T2UTF(value));
-}
-
-void __fastcall XmlAddAttr(HXML hXml, const wchar_t *pszName, int value)
-{
- xmlAddAttrInt(hXml, T2UTF(pszName), value);
-}
-
-void __fastcall XmlAddAttr(HXML hXml, const wchar_t *pszName, unsigned __int64 value)
-{
- wchar_t buf[60];
- _ui64tot(value, buf, 10);
-
- xmlAddAttr(hXml, T2UTF(pszName), T2UTF(buf));
+ hXml->SetAttribute(name, value);
}
-void __fastcall XmlAddAttrID(HXML hXml, int id)
+void XmlAddAttrID(TiXmlElement *hXml, int id)
{
- wchar_t text[100];
- mir_snwprintf(text, _T(JABBER_IQID) L"%d", id);
- XmlAddAttr(hXml, L"id", text);
+ char text[100];
+ mir_snprintf(text, JABBER_IQID "%d", id);
+ hXml->SetAttribute("id", text);
}
/////////////////////////////////////////////////////////////////////////////////////////
-const wchar_t *__fastcall XmlGetAttr(HXML hXml, int n)
+TiXmlElement* XmlAddChild(TiXmlElement *hXml, const char *name)
{
- return xmlGetAttr(hXml, n);
-}
-
-int __fastcall XmlGetAttrCount(HXML hXml)
-{
- return xmlGetAttrCount(hXml);
-}
+ if (hXml == nullptr)
+ return nullptr;
-const wchar_t *__fastcall XmlGetAttrName(HXML hXml, int n)
-{
- return xmlGetAttrName(hXml, n);
+ return hXml->GetDocument()->NewElement(name);
}
-/////////////////////////////////////////////////////////////////////////////////////////
-
-void __fastcall XmlAddChild(HXML hXml, HXML n)
+TiXmlElement* XmlAddChild(TiXmlElement *hXml, const char *name, const char *value)
{
- xmlAddChild2(n, hXml);
-}
+ if (hXml == nullptr)
+ return nullptr;
-HXML __fastcall XmlAddChild(HXML hXml, const wchar_t *name)
-{
- return xmlAddChild(hXml, T2UTF(name), nullptr);
+ auto *res = hXml->GetDocument()->NewElement(name);
+ res->SetText(value);
+ return res;
}
-HXML __fastcall XmlAddChild(HXML hXml, const wchar_t *name, const wchar_t *value)
+TiXmlElement* XmlAddChild(TiXmlElement *hXml, const char *name, int value)
{
- return xmlAddChild(hXml, T2UTF(name), T2UTF(value));
-}
+ if (hXml == nullptr)
+ return nullptr;
-HXML __fastcall XmlAddChild(HXML hXml, const wchar_t *name, int value)
-{
- wchar_t buf[40];
- _itow(value, buf, 10);
- return xmlAddChild(hXml, T2UTF(name), buf);
+ auto *res = hXml->GetDocument()->NewElement(name);
+ res->SetText(value);
+ return res;
}
/////////////////////////////////////////////////////////////////////////////////////////
-const wchar_t *__fastcall XmlGetAttrValue(HXML hXml, const wchar_t *key)
-{
- return xmlGetAttrValue(hXml, key);
-}
-
-HXML __fastcall XmlGetChild(HXML hXml, int n)
+const TiXmlElement* XmlGetChildByTag(const TiXmlElement *hXml, const char *key, const char *attrName, const char *attrValue)
{
- return xmlGetChild(hXml, n);
-}
-
-HXML __fastcall XmlGetChild(HXML hXml, const wchar_t *key)
-{
- return xmlGetNthChild(hXml, key, 0);
-}
-
-HXML __fastcall XmlGetChild(HXML hXml, LPCSTR key)
-{
- LPTSTR wszKey = mir_a2u(key);
- HXML result = xmlGetNthChild(hXml, wszKey, 0);
- mir_free(wszKey);
- return result;
-}
-
-HXML __fastcall XmlGetChildByTag(HXML hXml, const wchar_t *key, const wchar_t *attrName, const wchar_t *attrValue)
-{
- return xmlGetChildByAttrValue(hXml, key, attrName, attrValue);
-}
-
-HXML __fastcall XmlGetChildByTag(HXML hXml, LPCSTR key, LPCSTR attrName, const wchar_t *attrValue)
-{
- LPTSTR wszKey = mir_a2u(key), wszName = mir_a2u(attrName);
- HXML result = xmlGetChildByAttrValue(hXml, wszKey, wszName, attrValue);
- mir_free(wszKey), mir_free(wszName);
- return result;
-}
-
-int __fastcall XmlGetChildCount(HXML hXml)
-{
- return xmlGetChildCount(hXml);
-}
-
-HXML __fastcall XmlGetNthChild(HXML hXml, const wchar_t *tag, int nth)
-{
- int i, num;
-
- if (!hXml || tag == nullptr || mir_wstrlen(tag) <= 0 || nth < 1)
+ if (hXml == nullptr)
return nullptr;
- num = 1;
- for (i=0; ; i++) {
- HXML n = xmlGetChild(hXml, i);
- if (!n)
- break;
- if (!mir_wstrcmp(tag, XmlGetName(n))) {
- if (num == nth)
- return n;
-
- num++;
- } }
-
- return nullptr;
-}
+ auto *pChild = hXml->FirstChildElement(key);
+ if (pChild == nullptr)
+ return nullptr;
-const wchar_t *__fastcall XmlGetName(HXML xml)
-{
- return xmlGetName(xml);
+ return (pChild->Attribute(attrName, attrValue)) ? pChild : nullptr;
}
-const wchar_t *__fastcall XmlGetText(HXML xml)
+int XmlGetChildCount(const TiXmlElement *hXml)
{
- return (xml) ? xmlGetText(xml) : nullptr;
+ int iCount = 0;
+ for (auto *it : TiXmlEnum(hXml)) {
+ UNREFERENCED_PARAMETER(it);
+ iCount++;
+ }
+ return iCount;
}
/////////////////////////////////////////////////////////////////////////////////////////
-void XPath::ProcessPath(LookupInfo &info, bool bCreate)
+void XPath::ProcessPath(LookupInfo &info)
{
if (!info.nodeName) return;
- wchar_t *nodeName = (wchar_t *)alloca(sizeof(wchar_t) * (info.nodeName.length+1));
- mir_wstrncpy(nodeName, info.nodeName.p, info.nodeName.length+1);
+ char *nodeName = (char *)alloca(sizeof(char) * (info.nodeName.length+1));
+ mir_strncpy(nodeName, info.nodeName.p, info.nodeName.length+1);
if (info.attrName && info.attrValue) {
- wchar_t *attrName = (wchar_t *)alloca(sizeof(wchar_t)* (info.attrName.length + 1));
- mir_wstrncpy(attrName, info.attrName.p, info.attrName.length + 1);
- wchar_t *attrValue = (wchar_t *)alloca(sizeof(wchar_t)* (info.attrValue.length + 1));
- mir_wstrncpy(attrValue, info.attrValue.p, info.attrValue.length + 1);
- HXML hXml = XmlGetChildByTag(m_hXml, nodeName, attrName, attrValue);
-
- m_hXml = (hXml || !bCreate) ? hXml : (m_hXml << XCHILD(nodeName) << XATTR(attrName, attrValue));
- }
- else if (info.nodeIndex) {
- int idx = _wtoi(info.nodeIndex.p);
- m_hXml = mir_wstrcmp(nodeName, L"*") ? XmlGetNthChild(m_hXml, nodeName, idx) : XmlGetChild(m_hXml, idx - 1);
- }
- else {
- HXML hXml = XmlGetChild(m_hXml, nodeName);
- m_hXml = (hXml || !bCreate) ? hXml : (m_hXml << XCHILD(nodeName));
+ char *attrName = (char *)alloca(sizeof(char)* (info.attrName.length + 1));
+ mir_strncpy(attrName, info.attrName.p, info.attrName.length + 1);
+ char *attrValue = (char *)alloca(sizeof(char)* (info.attrValue.length + 1));
+ mir_strncpy(attrValue, info.attrValue.p, info.attrValue.length + 1);
+ m_hXml = XmlGetChildByTag(m_hXml, nodeName, attrName, attrValue);
}
+ else m_hXml = m_hXml->FirstChildElement(nodeName);
info.Reset();
}
-XPath::PathType XPath::LookupImpl(bool bCreate)
+XPath::PathType XPath::LookupImpl()
{
LookupState state = S_START;
LookupInfo info = {};
- for (const wchar_t *p = m_szPath; state < S_FINAL; ++p) {
+ for (const char *p = m_szPath; state < S_FINAL; ++p) {
switch (state) {
case S_START:
- ProcessPath(info, bCreate);
+ ProcessPath(info);
if (!m_hXml) {
state = S_FINAL_ERROR;
break;
@@ -374,29 +270,6 @@ XPath::PathType XPath::LookupImpl(bool bCreate)
info.attrName.Begin(p + 1);
state = S_NODE_ATTRNAME;
break;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- info.nodeIndex.Begin(p);
- state = S_NODE_INDEX;
- break;
- default:
- state = S_FINAL_ERROR;
- break;
- };
- break;
-
- case S_NODE_INDEX:
- switch (*p) {
- case 0:
- state = S_FINAL_ERROR;
- break;
- case ']':
- info.nodeIndex.End(p);
- state = S_NODE_CLOSEBRACKET;
- break;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- break;
default:
state = S_FINAL_ERROR;
break;
@@ -484,7 +357,7 @@ XPath::PathType XPath::LookupImpl(bool bCreate)
m_szParam = info.attrName.p;
return T_ATTRIBUTE;
case S_FINAL_NODE:
- ProcessPath(info, bCreate);
+ ProcessPath(info);
return T_NODE;
case S_FINAL_NODESET:
m_szParam = info.nodeName.p;