+#define MAX_ZURL_PLEX 10
+
+#define PROXY_LOG_APDU_CLIENT 1
+#define PROXY_LOG_APDU_SERVER 2
+#define PROXY_LOG_REQ_CLIENT 4
+#define PROXY_LOG_REQ_SERVER 8
+
+struct Yaz_RecordCache_Entry;
+
+class YAZ_EXPORT Yaz_ProxyConfig {
+public:
+ Yaz_ProxyConfig();
+ ~Yaz_ProxyConfig();
+ int read_xml(const char *fname);
+
+ int 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,
+ const char **cql2rpn);
+
+ void get_generic_info(int *log_mask, int *max_clients);
+
+ void get_target_info(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,
+ const char **cql2rpn);
+
+ int check_query(ODR odr, const char *name, Z_Query *query, char **addinfo);
+ int check_syntax(ODR odr, const char *name,
+ Odr_oid *syntax, Z_RecordComposition *comp,
+ char **addinfo, char **stylesheet, char **schema);
+ char *get_explain(ODR odr, const char *name, const char *db,
+ int *len);
+private:
+ void operator=(const Yaz_ProxyConfig &conf);
+ int mycmp(const char *hay, const char *item, size_t len);
+#if HAVE_XSLT
+ int check_schema(xmlNodePtr ptr, Z_RecordComposition *comp,
+ const char *schema_identifier);
+ xmlDocPtr m_docPtr;
+ xmlNodePtr m_proxyPtr;
+ void return_target_info(xmlNodePtr ptr, const char **url,
+ int *limit_bw, int *limit_pdu, int *limit_req,
+ int *target_idletime, int *client_idletime,
+ int *keepalive_limit_bw, int *keepalive_limit_pdu,
+ int *pre_init, const char **cql2rpn);
+ void return_limit(xmlNodePtr ptr,
+ int *limit_bw, int *limit_pdu, int *limit_req);
+ int check_type_1(ODR odr, xmlNodePtr ptr, Z_RPNQuery *query,
+ char **addinfo);
+ xmlNodePtr find_target_node(const char *name, const char *db);
+ xmlNodePtr find_target_db(xmlNodePtr ptr, const char *db);
+ const char *get_text(xmlNodePtr ptr);
+ int check_type_1_attributes(ODR odr, xmlNodePtr ptr,
+ Z_AttributeList *attrs,
+ char **addinfo);
+ int check_type_1_structure(ODR odr, xmlNodePtr ptr, Z_RPNStructure *q,
+ char **addinfo);
+#endif
+ int m_copy;
+ int match_list(int v, const char *m);
+ int atoi_l(const char **cp);
+
+};
+
+class YAZ_EXPORT Yaz_RecordCache {
+ public:
+ Yaz_RecordCache ();
+ ~Yaz_RecordCache ();
+ void add (ODR o, Z_NamePlusRecordList *npr, int start, int hits);
+
+ int lookup (ODR o, Z_NamePlusRecordList **npr, int start, int num,
+ Odr_oid *syntax, Z_RecordComposition *comp);
+ void clear();
+
+ void copy_searchRequest(Z_SearchRequest *sr);
+ void copy_presentRequest(Z_PresentRequest *pr);
+ void set_max_size(int sz);
+ private:
+ NMEM m_mem;
+ Yaz_RecordCache_Entry *m_entries;
+ Z_SearchRequest *m_searchRequest;
+ Z_PresentRequest *m_presentRequest;
+ int match (Yaz_RecordCache_Entry *entry,
+ Odr_oid *syntax, int offset,
+ Z_RecordComposition *comp);
+ int m_max_size;
+};
+
+class YAZ_EXPORT Yaz_bw {
+ public:
+ Yaz_bw(int sz);
+ ~Yaz_bw();
+ void add_bytes(int m);
+ int get_total();
+ private:
+ long m_sec; // time of most recent bucket
+ int *m_bucket;
+ int m_ptr;
+ int m_size;
+};
+