* Copyright (c) 1998-2004, Index Data.
* See the file LICENSE for details.
*
- * $Id: yaz-proxy-config.cpp,v 1.20 2004-01-07 11:10:55 adam Exp $
+ * $Id: yaz-proxy-config.cpp,v 1.27 2004-01-30 00:38:28 adam Exp $
*/
#include <ctype.h>
#if HAVE_XSLT
int Yaz_ProxyConfig::check_schema(xmlNodePtr ptr, Z_RecordComposition *comp,
- const char **found_schema,
const char *schema_identifier)
{
char *esn = 0;
int default_match = 1;
- *found_schema = schema_identifier; // may be NULL
if (comp && comp->which == Z_RecordComp_simple &&
comp->u.simple && comp->u.simple->which == Z_ElementSetNames_generic)
{
// check if schema identifier match
if (schema_identifier && !strcmp(esn, schema_identifier))
return 1;
- *found_schema = esn;
// Check each name element
for (; ptr; ptr = ptr->next)
{
match = 1;
}
}
- const char *match_schema = 0;
if (match)
{
- syntax_has_matched = 1;
- match = check_schema(ptr->children, comp, &match_schema,
- match_identifier);
+ if (!match_error)
+ syntax_has_matched = 1;
+ match = check_schema(ptr->children, comp, match_identifier);
}
if (match)
{
xfree(*stylesheet);
*stylesheet = xstrdup(match_stylesheet);
}
- if (schema && match_schema)
+ if (schema && match_identifier)
{
- yaz_log(LOG_LOG, "Match_schema=%s", match_schema);
xfree(*schema);
- *schema = xstrdup(match_schema);
+ *schema = xstrdup(match_identifier);
}
- else
- yaz_log(LOG_LOG, "NO SCHEMA");
if (match_marcxml)
{
return -1;
}
if (match_error)
{
- if (syntax_has_matched) // if syntax did match, schema/ESN was bad
+ if (syntax_has_matched) // if syntax OK, bad schema/ESN
return 25;
if (syntax)
{
if (ptr->type == XML_ELEMENT_NODE &&
!strcmp((const char *) ptr->name, "explain"))
{
+ xmlNodePtr ptr1 = ptr->children;
+ if (db)
+ {
+ for (; ptr1; ptr1 = ptr1->next)
+ if (ptr1->type == XML_ELEMENT_NODE &&
+ !strcmp((const char *) ptr1->name, "serverInfo"))
+ break;
+ if (!ptr1)
+ continue;
+ for (ptr1 = ptr1->children; ptr1; ptr1 = ptr1->next)
+ if (ptr1->type == XML_ELEMENT_NODE &&
+ !strcmp((const char *) ptr1->name, "database"))
+ break;
+
+ if (!ptr1)
+ continue;
+ for (ptr1 = ptr1->children; ptr1; ptr1 = ptr1->next)
+ if (ptr1->type == XML_TEXT_NODE &&
+ ptr1->content &&
+ !strcmp((const char *) ptr1->content, db))
+ break;
+ if (!ptr1)
+ continue;
+ }
xmlNodePtr ptr2 = xmlCopyNode(ptr, 1);
xmlDocPtr doc = xmlNewDoc((const xmlChar *) "1.0");
xmlDocSetRootElement(doc, ptr2);
xmlChar *buf_out;
- int len_out;
xmlDocDumpMemory(doc, &buf_out, len);
char *content = (char*) odr_malloc(odr, *len);
memcpy(content, buf_out, *len);
return content;
}
}
- else
- yaz_log(LOG_WARN, "No explain node 1");
-
#endif
- yaz_log(LOG_WARN, "No explain node");
return 0;
}