summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2007-04-14 11:28:12 +0000
committerFrederic Peters <fpeters@entrouvert.com>2007-04-14 11:28:12 +0000
commitb6d8ae535b87194f6e1547ec7348f2ad2f5032bb (patch)
tree6e20f387d575cd1eb03f43c031662d4be20ecd93
parenta3bcab79a8946de35e8c78b229fd3f24e63f9d0a (diff)
optimize type autodetection in lasso_node_new_from_xmlNode by reordering
namespace matches and stopping at first success
-rw-r--r--lasso/xml/xml.c60
1 files changed, 31 insertions, 29 deletions
diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c
index dd059ad3..6de7f03a 100644
--- a/lasso/xml/xml.c
+++ b/lasso/xml/xml.c
@@ -1333,44 +1333,46 @@ lasso_node_new_from_xmlNode(xmlNode *xmlnode)
}
/* autodetect type name */
- if (strcmp((char*)xmlnode->ns->href, LASSO_SOAP_ENV_HREF) == 0)
- prefix = "Soap";
- if (strcmp((char*)xmlnode->ns->href, LASSO_SOAP_BINDING_HREF) == 0)
- prefix = "SoapBinding";
- if (strcmp((char*)xmlnode->ns->href, LASSO_DS_HREF) == 0)
- prefix = "Ds";
- if (strcmp((char*)xmlnode->ns->href, LASSO_DISCO_HREF) == 0)
- prefix = "Disco";
- if (strcmp((char*)xmlnode->ns->href, LASSO_LIB_HREF) == 0)
- prefix = "Lib";
if (strcmp((char*)xmlnode->ns->href, LASSO_LASSO_HREF) == 0)
prefix = "";
- if (strcmp((char*)xmlnode->ns->href, LASSO_IS_HREF) == 0)
- prefix = "Is";
- if (strcmp((char*)xmlnode->ns->href, LASSO_SA_HREF) == 0)
- prefix = "Sa";
- if (strcmp((char*)xmlnode->ns->href, LASSO_SAML_ASSERTION_HREF) == 0)
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_SAML_ASSERTION_HREF) == 0)
prefix = "Saml";
- if (strcmp((char*)xmlnode->ns->href, LASSO_SAML_PROTOCOL_HREF) == 0)
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_SAML_PROTOCOL_HREF) == 0)
prefix = "Samlp";
- if (strcmp((char*)xmlnode->ns->href, LASSO_SAML2_ASSERTION_HREF) == 0)
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_LIB_HREF) == 0)
+ prefix = "Lib";
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_SAML2_ASSERTION_HREF) == 0)
prefix = "Saml2";
- if (strcmp((char*)xmlnode->ns->href, LASSO_SAML2_PROTOCOL_HREF) == 0)
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_SAML2_PROTOCOL_HREF) == 0)
prefix = "Samlp2";
- if (strcmp((char*)xmlnode->ns->href, LASSO_WSSE_HREF) == 0)
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_SOAP_ENV_HREF) == 0)
+ prefix = "Soap";
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_SOAP_BINDING_HREF) == 0)
+ prefix = "SoapBinding";
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_DISCO_HREF) == 0)
+ prefix = "Disco";
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_IS_HREF) == 0)
+ prefix = "Is";
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_SA_HREF) == 0)
+ prefix = "Sa";
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_WSSE_HREF) == 0)
prefix = "Wsse";
- if (strcmp((char*)xmlnode->ns->href, LASSO_IDWSF2_DISCO_HREF) == 0)
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_IDWSF2_DISCO_HREF) == 0)
prefix = "IdWsf2Disco";
- if (strcmp((char*)xmlnode->ns->href, LASSO_IDWSF2_SOAP_BINDING_HREF) == 0)
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_IDWSF2_SOAP_BINDING_HREF) == 0)
prefix = "SoapBinding";
- if (strcmp((char*)xmlnode->ns->href, LASSO_IDWSF2_UTIL_HREF) == 0)
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_IDWSF2_UTIL_HREF) == 0)
prefix = "IdWsf2Util";
- if (strcmp((char*)xmlnode->ns->href, LASSO_WSA_HREF) == 0)
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_WSA_HREF) == 0)
prefix = "WsAddr";
- tmp = lasso_get_prefix_for_dst_service_href((char*)xmlnode->ns->href);
- if (tmp) {
- prefix = "Dst";
- g_free(tmp);
+ else if (strcmp((char*)xmlnode->ns->href, LASSO_DS_HREF) == 0)
+ prefix = "Ds";
+ else {
+ tmp = lasso_get_prefix_for_dst_service_href((char*)xmlnode->ns->href);
+ if (tmp) {
+ prefix = "Dst";
+ g_free(tmp);
+ }
}
if (prefix == NULL)
@@ -1378,9 +1380,9 @@ lasso_node_new_from_xmlNode(xmlNode *xmlnode)
if (strcmp(prefix, "Dst") == 0 && strcmp((char*)xmlnode->name, "Status") == 0)
prefix = "Utility";
- if (strcmp(prefix, "Disco") == 0 && strcmp((char*)xmlnode->name, "Status") == 0)
+ else if (strcmp(prefix, "Disco") == 0 && strcmp((char*)xmlnode->name, "Status") == 0)
prefix = "Utility";
- if (strcmp(prefix, "Sa") == 0 && strcmp((char*)xmlnode->name, "Status") == 0)
+ else if (strcmp(prefix, "Sa") == 0 && strcmp((char*)xmlnode->name, "Status") == 0)
prefix = "Utility";
xsitype = xmlGetNsProp(xmlnode, (xmlChar*)"type", (xmlChar*)LASSO_XSI_HREF);