#include <yaz/timing.h>
#endif
-
+#include "parameters.h"
#include "pazpar2.h"
#include "eventl.h"
#include "http.h"
#include "client.h"
#include "settings.h"
#include "normalize7bit.h"
+#include "marcmap.h"
#define TERMLIST_HIGH_SCORE 25
// Note: Some things in this structure will eventually move to configuration
struct parameters global_parameters =
{
- "",
- "",
- "",
- 0,
0, // dump_records
0, // debug_mode
- 30, // operations timeout
- "81",
- "Index Data PazPar2",
- VERSION,
- 60, // session timeout
100,
- MAX_CHUNK,
- 0,
- 0,
- 180, // Z39.50 session timeout
- 15 // Connect timeout
};
static void log_xml_doc(xmlDoc *doc)
insert_settings_parameters(sdb, se, parms);
- new = xsltApplyStylesheet(m->stylesheet, rdoc, (const char **) parms);
- root= xmlDocGetRootElement(new);
+ if (m->stylesheet)
+ {
+ new = xsltApplyStylesheet(m->stylesheet, rdoc, (const char **) parms);
+ }
+ else if (m->marcmap)
+ {
+ new = marcmap_apply(m->marcmap, rdoc);
+ }
+
+ root = xmlDocGetRootElement(new);
+
if (!new || !root || !(root->children))
{
yaz_log(YLOG_WARN, "XSLT transformation failed from %s",
{
(*m) = nmem_malloc(se->session_nmem, sizeof(**m));
(*m)->next = 0;
- if (!((*m)->stylesheet = conf_load_stylesheet(stylesheets[i])))
+
+ // XSLT
+ if (!strcmp(&stylesheets[i][strlen(stylesheets[i])-4], ".xsl"))
+ {
+ (*m)->marcmap = NULL;
+ if (!((*m)->stylesheet = conf_load_stylesheet(se->service, stylesheets[i])))
+ {
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "Unable to load stylesheet: %s",
+ stylesheets[i]);
+ return -1;
+ }
+ }
+ // marcmap
+ else if (!strcmp(&stylesheets[i][strlen(stylesheets[i])-5], ".mmap"))
{
- yaz_log(YLOG_FATAL|YLOG_ERRNO, "Unable to load stylesheet: %s",
- stylesheets[i]);
- return -1;
+ (*m)->stylesheet = NULL;
+ if (!((*m)->marcmap = marcmap_load(stylesheets[i], se->session_nmem)))
+ {
+ yaz_log(YLOG_FATAL|YLOG_ERRNO, "Unable to load marcmap: %s",
+ stylesheets[i]);
+ return -1;
+ }
}
+
m = &(*m)->next;
}
}
}
enum pazpar2_error_code search(struct session *se,
- char *query, char *filter,
+ const char *query, const char *filter,
const char **addinfo)
{
int live_channels = 0;
else
{
no_working++;
- if (client_prep_connection(cl))
+ if (client_prep_connection(cl, se->service->z3950_connect_timeout,
+ se->service->z3950_session_timeout))
client_start_search(cl);
}
}
{
struct database *db = find_database(id, 0, se->service);
+ resolve_database(db);
+
session_init_databases_fun((void*) se, db);
// New sdb is head of se->databases list
return se->databases;
for (sdb = s->databases; sdb; sdb = sdb->next)
session_database_destroy(sdb);
nmem_destroy(s->nmem);
+ service_destroy(s->service);
wrbuf_destroy(s->wrbuf);
}
stat->num_clients = count;
}
-int start_http_listener(void)
-{
- char hp[128] = "";
- struct conf_server *ser = global_parameters.server;
-
- if (*global_parameters.listener_override)
- strcpy(hp, global_parameters.listener_override);
- else
- {
- strcpy(hp, ser->host ? ser->host : "");
- if (ser->port)
- {
- if (*hp)
- strcat(hp, ":");
- sprintf(hp + strlen(hp), "%d", ser->port);
- }
- }
- return http_init(hp);
-}
-
-void start_proxy(void)
-{
- char hp[128] = "";
- struct conf_server *ser = global_parameters.server;
-
- if (*global_parameters.proxy_override)
- strcpy(hp, global_parameters.proxy_override);
- else if (ser->proxy_host || ser->proxy_port)
- {
- strcpy(hp, ser->proxy_host ? ser->proxy_host : "");
- if (ser->proxy_port)
- {
- if (*hp)
- strcat(hp, ":");
- sprintf(hp + strlen(hp), "%d", ser->proxy_port);
- }
- }
- else
- return;
-
- http_set_proxyaddr(hp, ser->myurl ? ser->myurl : "");
-}
-
// Master list of connections we're handling events to
-static IOCHAN channel_list = 0;
+static IOCHAN channel_list = 0; /* thread pr */
+
void pazpar2_add_channel(IOCHAN chan)
{
chan->next = channel_list;
return rec_md;
}
-const char *get_mergekey(xmlDoc *doc, struct client *cl, int record_no,
- struct conf_service *service, NMEM nmem)
+static const char *get_mergekey(xmlDoc *doc, struct client *cl, int record_no,
+ struct conf_service *service, NMEM nmem)
{
char *mergekey_norm = 0;
xmlNode *root = xmlDocGetRootElement(doc);
const char *norm_str;
pp2_relevance_token_t prt =
pp2_relevance_tokenize(
- global_parameters.server->mergekey_pct,
+ service->mergekey_pct,
(const char *) mergekey);
while ((norm_str = pp2_relevance_token_next(prt)))
const char *norm_str;
pp2_relevance_token_t prt =
pp2_relevance_tokenize(
- global_parameters.server->mergekey_pct,
+ service->mergekey_pct,
(const char *) value);
while ((norm_str = pp2_relevance_token_next(prt)))
sizeof(union data_types));
prt = pp2_relevance_tokenize(
- global_parameters.server->sort_pct,
+ service->sort_pct,
rec_md->data.text.disp);
pp2_relevance_token_next(prt);