summaryrefslogtreecommitdiffstats
path: root/src/uscxml/messages/MMIMessages.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/uscxml/messages/MMIMessages.cpp')
-rw-r--r--src/uscxml/messages/MMIMessages.cpp66
1 files changed, 25 insertions, 41 deletions
diff --git a/src/uscxml/messages/MMIMessages.cpp b/src/uscxml/messages/MMIMessages.cpp
index 1c5b98a..01705ed 100644
--- a/src/uscxml/messages/MMIMessages.cpp
+++ b/src/uscxml/messages/MMIMessages.cpp
@@ -119,22 +119,13 @@ Arabica::DOM::Document<std::string> MMIEvent::toXML(bool encapsulateInMMI) const
if (data.size() > 0) {
Element<std::string> dataElem = doc.createElementNS(nameSpace, "Data");
-
- // try to parse content
- std::stringstream* ss = new std::stringstream();
- (*ss) << data;
- std::auto_ptr<std::istream> ssPtr(ss);
- Arabica::SAX::InputSource<std::string> inputSource;
- inputSource.setByteStream(ssPtr);
-
- NameSpacingParser parser;
- if(parser.parse(inputSource)) {
- Node<std::string> importedNode = doc.importNode(parser.getDocument().getDocumentElement(), true);
- dataElem.appendChild(importedNode);
- } else {
- Text<std::string> textElem = doc.createTextNode(data);
- dataElem.appendChild(textElem);
- }
+ Text<std::string> textElem = doc.createTextNode(data);
+ dataElem.appendChild(textElem);
+ msgElem.appendChild(dataElem);
+ } else if (dataDOM) {
+ Element<std::string> dataElem = doc.createElementNS(nameSpace, "Data");
+ Node<std::string> importNode = doc.importNode(dataDOM, true);
+ dataElem.appendChild(importNode);
msgElem.appendChild(dataElem);
}
@@ -165,28 +156,16 @@ Arabica::DOM::Document<std::string> ContentRequest::toXML(bool encapsulateInMMI)
contentURLElem.setAttributeNS(nameSpace, "fetchtimeout", contentURL.fetchTimeout);
contentURLElem.setAttributeNS(nameSpace, "max-age", contentURL.maxAge);
msgElem.appendChild(contentURLElem);
- }
-
- if (content.size() > 0) {
- Element<std::string> contentElem = doc.createElementNS(nameSpace, "content");
-
- // try to parse content
- std::stringstream* ss = new std::stringstream();
- (*ss) << content;
- std::auto_ptr<std::istream> ssPtr(ss);
- Arabica::SAX::InputSource<std::string> inputSource;
- inputSource.setByteStream(ssPtr);
-
- Arabica::SAX2DOM::Parser<std::string> parser;
- if(parser.parse(inputSource)) {
- Node<std::string> importedNode = doc.importNode(parser.getDocument().getDocumentElement(), true);
- contentElem.appendChild(importedNode);
- } else {
- Text<std::string> textElem = doc.createTextNode(content);
- contentElem.appendChild(textElem);
- }
+ } else if (contentDOM) {
+ Element<std::string> contentElem = doc.createElementNS(nameSpace, "Content");
+ Node<std::string> importNode = doc.importNode(contentDOM, true);
+ contentElem.appendChild(importNode);
+ msgElem.appendChild(contentElem);
+ } else if (content.size() > 0) {
+ Element<std::string> contentElem = doc.createElementNS(nameSpace, "Content");
+ Text<std::string> textElem = doc.createTextNode(content);
+ contentElem.appendChild(textElem);
msgElem.appendChild(contentElem);
-
}
return doc;
}
@@ -259,12 +238,15 @@ MMIEvent MMIEvent::fromXML(Arabica::DOM::Node<std::string> node, InterpreterImpl
node = node.getNextSibling();
}
- if (dataElem && boost::iequals(dataElem.getLocalName(), "data")) {
- std::stringstream ss;
+ if (dataElem && boost::iequals(dataElem.getLocalName(), "data") && dataElem.getFirstChild()) {
node = dataElem.getFirstChild();
- if (node)
+ if (node.getNodeType() == Arabica::DOM::Node_base::ELEMENT_NODE) {
+ msg.dataDOM = node;
+ } else {
+ std::stringstream ss;
ss << node;
- msg.data = ss.str();
+ msg.data = ss.str();
+ }
}
return msg;
@@ -374,6 +356,8 @@ StatusResponse StatusResponse::fromXML(Arabica::DOM::Node<std::string> node, Int
msg.status = FAILURE;
} else if(boost::iequals(status, "SUCCESS")) {
msg.status = SUCCESS;
+ } else {
+ msg.status = INVALID;
}
msg.type = STATUSRESPONSE;
return msg;