Rename a few files
[yazpp-moved-to-github.git] / src / yaz-proxy-config.cpp
index 7a3134b..88449f3 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 1998-2004, Index Data.
  * See the file LICENSE for details.
  * 
- * $Id: yaz-proxy-config.cpp,v 1.23 2004-01-07 13:40:06 adam Exp $
+ * $Id: yaz-proxy-config.cpp,v 1.27 2004-01-30 00:38:28 adam Exp $
  */
 
 #include <ctype.h>
@@ -458,7 +458,8 @@ int Yaz_ProxyConfig::check_syntax(ODR odr, const char *name,
            }
            if (match)
            {
-               syntax_has_matched = 1;
+               if (!match_error)
+                   syntax_has_matched = 1;
                match = check_schema(ptr->children, comp, match_identifier);
            }
            if (match)
@@ -479,7 +480,7 @@ int Yaz_ProxyConfig::check_syntax(ODR odr, const char *name,
                }
                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)
                    {
@@ -693,6 +694,30 @@ char *Yaz_ProxyConfig::get_explain(ODR odr, const char *name, const char *db,
            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");
@@ -709,11 +734,7 @@ char *Yaz_ProxyConfig::get_explain(ODR odr, const char *name, const char *db,
                return content;
            }
     }
-    else
-       yaz_log(LOG_WARN, "No explain node 1");
-
 #endif
-    yaz_log(LOG_WARN, "No explain node");
     return 0;
 }