summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2004-11-16 14:40:39 +0000
committerFrederic Peters <fpeters@entrouvert.com>2004-11-16 14:40:39 +0000
commitcff9d28b650019948594770c97b390bb27a57be4 (patch)
tree9a0bbd4579194f0ede15ea71ca00fce0bad768d1
parent2cab29a3c35e67ab2710786ea69180bed3259085 (diff)
support for samlp:StatusCode in samlp:StatusCode in ... ad vitam.
-rw-r--r--lasso/xml/samlp_status.c6
-rw-r--r--lasso/xml/samlp_status_code.c25
-rw-r--r--lasso/xml/samlp_status_code.h3
3 files changed, 28 insertions, 6 deletions
diff --git a/lasso/xml/samlp_status.c b/lasso/xml/samlp_status.c
index 7e8f4333..542dd1a1 100644
--- a/lasso/xml/samlp_status.c
+++ b/lasso/xml/samlp_status.c
@@ -54,13 +54,11 @@ get_xmlNode(LassoNode *node)
xmlnode = xmlNewNode(NULL, "Status");
xmlSetNs(xmlnode, xmlNewNs(xmlnode, LASSO_SAML_PROTOCOL_HREF, LASSO_SAML_PROTOCOL_PREFIX));
- if (status->StatusCode) {
+ if (status->StatusCode)
xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(status->StatusCode)));
- }
- if (status->StatusMessage) {
+ if (status->StatusMessage)
xmlNewTextChild(xmlnode, NULL, "StatusMessage", status->StatusMessage);
- }
return xmlnode;
}
diff --git a/lasso/xml/samlp_status_code.c b/lasso/xml/samlp_status_code.c
index d1b2a430..a1c64a32 100644
--- a/lasso/xml/samlp_status_code.c
+++ b/lasso/xml/samlp_status_code.c
@@ -47,10 +47,15 @@ static xmlNode*
get_xmlNode(LassoNode *node)
{
xmlNode *xmlnode;
+ LassoSamlpStatusCode *status_code = LASSO_SAMLP_STATUS_CODE(node);
xmlnode = xmlNewNode(NULL, "StatusCode");
xmlSetNs(xmlnode, xmlNewNs(xmlnode, LASSO_SAML_PROTOCOL_HREF, LASSO_SAML_PROTOCOL_PREFIX));
- xmlSetProp(xmlnode, "Value", LASSO_SAMLP_STATUS_CODE(node)->Value);
+ if (status_code->Value)
+ xmlSetProp(xmlnode, "Value", status_code->Value);
+
+ if (status_code->StatusCode)
+ xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(status_code->StatusCode)));
return xmlnode;
}
@@ -58,7 +63,23 @@ get_xmlNode(LassoNode *node)
static int
init_from_xml(LassoNode *node, xmlNode *xmlnode)
{
- LASSO_SAMLP_STATUS_CODE(node)->Value = xmlGetProp(xmlnode, "Value");
+ LassoSamlpStatusCode *status_code = LASSO_SAMLP_STATUS_CODE(node);
+ xmlNode *t;
+
+ if (parent_class->init_from_xml(node, xmlnode))
+ return -1;
+
+ status_code->Value = xmlGetProp(xmlnode, "Value");
+ t = xmlnode->children;
+ while (t) {
+ if (t->type != XML_ELEMENT_NODE || strcmp(t->name, "StatusCode") != 0) {
+ t = t->next;
+ continue;
+ }
+ status_code->StatusCode = LASSO_SAMLP_STATUS_CODE(lasso_node_new_from_xmlNode(t));
+ break;
+ }
+
return 0;
}
diff --git a/lasso/xml/samlp_status_code.h b/lasso/xml/samlp_status_code.h
index 85ab4768..bb78c66b 100644
--- a/lasso/xml/samlp_status_code.h
+++ b/lasso/xml/samlp_status_code.h
@@ -44,6 +44,9 @@ typedef struct _LassoSamlpStatusCodeClass LassoSamlpStatusCodeClass;
struct _LassoSamlpStatusCode {
LassoNode parent;
+ /* <element ref="samlp:StatusCode" minOccurs="0"/> */
+ LassoSamlpStatusCode *StatusCode;
+ /* <attribute name="Value" type="QName" use="required"/> */
char *Value;
};