in xsec/xkms/impl/XKMSResultTypeImpl.cpp [77:169]
void XKMSResultTypeImpl::load(void) {
if (m_msg.mp_messageAbstractTypeElement == NULL) {
// Attempt to load an empty element
throw XSECException(XSECException::ResultTypeError,
"XKMSResultType::load - called on empty DOM");
}
m_msg.load();
/* Now load the result attributes */
mp_resultMajorAttr =
m_msg.mp_messageAbstractTypeElement->getAttributeNodeNS(NULL, XKMSConstants::s_tagResultMajor);
mp_resultMinorAttr =
m_msg.mp_messageAbstractTypeElement->getAttributeNodeNS(NULL, XKMSConstants::s_tagResultMinor);
mp_requestIdAttr =
m_msg.mp_messageAbstractTypeElement->getAttributeNodeNS(NULL, XKMSConstants::s_tagRequestId);
/* Decode responses */
if (mp_resultMajorAttr == NULL) {
// Attempt to load an empty element
throw XSECException(XSECException::ResultTypeError,
"XKMSResultType::load - No Major Response code found");
}
const XMLCh * res = mp_resultMajorAttr->getNodeValue();
// Result types have now been updated, and are URIs with the XKMS namespace prepended
// to the actual result value
int res2 = XMLString::indexOf(res, chPound);
if (res2 == -1 || XMLString::compareNString(res, XKMSConstants::s_unicodeStrURIXKMS, res2)) {
throw XSECException(XSECException::ResultTypeError,
"XKMSResultType::load - ResultType not in XKMS Name Space");
}
res = &res[res2+1];
for (m_resultMajor = XKMSResultType::Pending;
m_resultMajor > XKMSResultType::NoneMajor;
m_resultMajor = (XKMSResultType::ResultMajor) (m_resultMajor-1)) {
if (strEquals(XKMSConstants::s_tagResultMajorCodes[m_resultMajor], res))
break;
}
if (mp_resultMinorAttr != NULL) {
res = mp_resultMinorAttr->getNodeValue();
int res2 = XMLString::indexOf(res, chPound);
if (res2 == -1 ||
XMLString::compareNString(res, XKMSConstants::s_unicodeStrURIXKMS, res2)) {
throw XSECException(XSECException::ResultTypeError,
"XKMSResultType::load - ResultType not in XKMS Name Space");
}
res = &res[res2+1];
for (m_resultMinor = XKMSResultType::NotSynchronous;
m_resultMinor > XKMSResultType::NoneMinor;
m_resultMinor = (XKMSResultType::ResultMinor) (m_resultMinor-1)) {
if (strEquals(XKMSConstants::s_tagResultMinorCodes[m_resultMinor], res))
break;
}
}
else
m_resultMinor = XKMSResultType::NoneMinor;
/* Check to see if there is a RequestSignatureValue node */
mp_requestSignatureValueElement = (DOMElement *) findFirstChildOfType(m_msg.mp_messageAbstractTypeElement, DOMNode::ELEMENT_NODE);
while (mp_requestSignatureValueElement != NULL &&
!strEquals(getXKMSLocalName(mp_requestSignatureValueElement), XKMSConstants::s_tagRequestSignatureValue)) {
mp_requestSignatureValueElement = findNextElementChild(mp_requestSignatureValueElement);
}
if (mp_requestSignatureValueElement != NULL) {
if (findFirstChildOfType(mp_requestSignatureValueElement, DOMNode::TEXT_NODE) == NULL) {
throw XSECException(XSECException::ResultTypeError,
"XKMSResultType::load - RequestSignatureValue must have text node as child");
}
}
}