* Copyright (c) 1998-2003, Index Data.
* See the file LICENSE for details.
*
- * $Id: yaz-proxy-config.cpp,v 1.5 2003-10-08 08:15:01 adam Exp $
+ * $Id: yaz-proxy-config.cpp,v 1.9 2003-10-13 19:16:29 adam Exp $
*/
#include <ctype.h>
#endif
}
-void Yaz_ProxyConfig::operator=(const Yaz_ProxyConfig &conf)
-{
-#if HAVE_XML2
- m_docPtr = conf.m_docPtr;
- m_proxyPtr = conf.m_proxyPtr;
-#endif
- m_copy = 1;
-}
-
int Yaz_ProxyConfig::read_xml(const char *fname)
{
#if HAVE_XML2
#if HAVE_XML2
void Yaz_ProxyConfig::return_target_info(xmlNodePtr ptr,
const char **url,
- int *keepalive,
int *limit_bw,
int *limit_pdu,
int *limit_req,
int *target_idletime,
- int *client_idletime)
+ int *client_idletime,
+ int *keepalive_limit_bw,
+ int *keepalive_limit_pdu,
+ int *pre_init)
{
+ *pre_init = 0;
+ int no_url = 0;
ptr = ptr->children;
for (; ptr; ptr = ptr->next)
{
if (ptr->type == XML_ELEMENT_NODE
+ && !strcmp((const char *) ptr->name, "preinit"))
+ {
+ const char *v = get_text(ptr);
+ *pre_init = v ? atoi(v) : 1;
+ }
+ if (ptr->type == XML_ELEMENT_NODE
&& !strcmp((const char *) ptr->name, "url"))
{
const char *t = get_text(ptr);
- if (t)
- *url = t;
+ if (t && no_url < MAX_ZURL_PLEX)
+ {
+ url[no_url++] = t;
+ url[no_url] = 0;
+ }
}
if (ptr->type == XML_ELEMENT_NODE
&& !strcmp((const char *) ptr->name, "keepalive"))
{
- const char *t = get_text(ptr);
- if (!t || *t == '1')
- *keepalive = 1;
- else
- *keepalive = 0;
+ int dummy;
+ *keepalive_limit_bw = 500000;
+ *keepalive_limit_pdu = 1000;
+ return_limit(ptr, keepalive_limit_bw, keepalive_limit_pdu,
+ &dummy);
}
if (ptr->type == XML_ELEMENT_NODE
&& !strcmp((const char *) ptr->name, "limit"))
for(ptr = ptr->children; ptr; ptr = ptr->next)
{
if (ptr->type == XML_ELEMENT_NODE &&
- !strcmp((const char *) ptr->name, "query"))
+ !strcmp((const char *) ptr->name, "attribute"))
{
const char *match_type = 0;
const char *match_value = 0;
int match = 0; // if we match record syntax
const char *match_type = 0;
const char *match_error = 0;
+ const char *match_marcxml = 0;
struct _xmlAttr *attr;
for (attr = ptr->properties; attr; attr = attr->next)
{
if (!strcmp((const char *) attr->name, "error") &&
attr->children && attr->children->type == XML_TEXT_NODE)
match_error = (const char *) attr->children->content;
+ if (!strcmp((const char *) attr->name, "marcxml") &&
+ attr->children && attr->children->type == XML_TEXT_NODE)
+ match_marcxml = (const char *) attr->children->content;
}
if (match_type)
{
}
if (match)
{
+ if (match_marcxml)
+ {
+ return -1;
+ }
if (match_error)
{
if (syntax)
xmlNodePtr Yaz_ProxyConfig::find_target_node(const char *name)
{
xmlNodePtr ptr;
+ if (!m_proxyPtr)
+ return 0;
for (ptr = m_proxyPtr->children; ptr; ptr = ptr->next)
{
if (ptr->type == XML_ELEMENT_NODE &&
}
#endif
+int Yaz_ProxyConfig::get_target_no(int no,
+ const char **name,
+ const char **url,
+ int *limit_bw,
+ int *limit_pdu,
+ int *limit_req,
+ int *target_idletime,
+ int *client_idletime,
+ int *max_clients,
+ int *keepalive_limit_bw,
+ int *keepalive_limit_pdu,
+ int *pre_init)
+{
+#if HAVE_XML2
+ xmlNodePtr ptr;
+ if (!m_proxyPtr)
+ return 0;
+ int i = 0;
+ for (ptr = m_proxyPtr->children; ptr; ptr = ptr->next)
+ if (ptr->type == XML_ELEMENT_NODE &&
+ !strcmp((const char *) ptr->name, "target"))
+ {
+ if (i == no)
+ {
+ struct _xmlAttr *attr;
+ for (attr = ptr->properties; attr; attr = attr->next)
+ if (!strcmp((const char *) attr->name, "name"))
+ {
+ if (attr->children
+ && attr->children->type==XML_TEXT_NODE
+ && attr->children->content)
+ *name = (const char *) attr->children->content;
+ }
+ return_target_info(ptr, url, limit_bw, limit_pdu, limit_req,
+ target_idletime, client_idletime,
+ keepalive_limit_bw, keepalive_limit_pdu,
+ pre_init);
+ return 1;
+ }
+ i++;
+ }
+#endif
+ return 0;
+}
+
void Yaz_ProxyConfig::get_target_info(const char *name,
const char **url,
- int *keepalive,
int *limit_bw,
int *limit_pdu,
int *limit_req,
int *target_idletime,
int *client_idletime,
- int *max_clients)
+ int *max_clients,
+ int *keepalive_limit_bw,
+ int *keepalive_limit_pdu,
+ int *pre_init)
{
#if HAVE_XML2
xmlNodePtr ptr;
if (!m_proxyPtr)
{
- *url = name;
+ url[0] = name;
+ url[1] = 0;
return;
}
+ url[0] = 0;
for (ptr = m_proxyPtr->children; ptr; ptr = ptr->next)
{
if (ptr->type == XML_ELEMENT_NODE &&
if (ptr)
{
if (name)
- *url = name;
- return_target_info(ptr, url, keepalive, limit_bw, limit_pdu, limit_req,
- target_idletime, client_idletime);
+ {
+ url[0] = name;
+ url[1] = 0;
+ }
+ return_target_info(ptr, url, limit_bw, limit_pdu, limit_req,
+ target_idletime, client_idletime,
+ keepalive_limit_bw, keepalive_limit_pdu,
+ pre_init);
}
#else
*url = name;