-/* $Id: database.c,v 1.13 2007-04-11 16:48:09 quinn Exp $
+/* $Id: database.c,v 1.14 2007-04-11 18:42:25 quinn Exp $
Copyright (c) 2006-2007, Index Data.
This file is part of Pazpar2.
memset(db, 0, sizeof(*db));
db->host = host;
db->url = nmem_strdup(nmem, id);
- db->name = 0;
db->databases = xmalloc(2 * sizeof(char *));
db->databases[0] = nmem_strdup(nmem, dbname);
db->databases[1] = 0;
if (!(db = find_database(url, 0)))
yaz_log(YLOG_WARN, "Unable to load database %s", url);
- if (name && db)
- db->name = nmem_strdup(nmem, name);
}
fclose(f);
}
-/* $Id: database.h,v 1.5 2007-04-11 02:14:15 quinn Exp $
+/* $Id: database.h,v 1.6 2007-04-11 18:42:25 quinn Exp $
Copyright (c) 2006-2007, Index Data.
This file is part of Pazpar2.
void load_simpletargets(const char *fn);
void prepare_databases(void);
+struct database *find_database(const char *id, int new);
int database_match_criteria(struct session_database *db, struct database_criterion *cl);
int session_grep_databases(struct session *se, struct database_criterion *cl,
void (*fun)(void *context, struct session_database *db));
-/* $Id: http_command.c,v 1.33 2007-04-11 02:14:15 quinn Exp $
+/* $Id: http_command.c,v 1.34 2007-04-11 18:42:25 quinn Exp $
Copyright (c) 2006-2007, Index Data.
This file is part of Pazpar2.
*/
/*
- * $Id: http_command.c,v 1.33 2007-04-11 02:14:15 quinn Exp $
+ * $Id: http_command.c,v 1.34 2007-04-11 18:42:25 quinn Exp $
*/
#include <stdio.h>
#include "pazpar2.h"
#include "http.h"
#include "http_command.h"
+#include "settings.h"
extern struct parameters global_parameters;
extern IOCHAN channel_list;
static void write_subrecord(struct record *r, WRBUF w, struct conf_service *service)
{
+ char *name = session_setting_oneval(r->client->database, PZ_NAME);
+
wrbuf_printf(w, "<location id=\"%s\" name=\"%s\">\n",
r->client->database->database->url,
- r->client->database->database->name ? r->client->database->database->name : "");
+ *name ? name : "Unknown");
write_metadata(w, service, r->metadata, 1);
wrbuf_puts(w, "</location>\n");
}
-/* $Id: pazpar2.c,v 1.72 2007-04-11 13:27:06 quinn Exp $
+/* $Id: pazpar2.c,v 1.73 2007-04-11 18:42:25 quinn Exp $
Copyright (c) 2006-2007, Index Data.
This file is part of Pazpar2.
static int client_prep_connection(struct client *cl);
static void ingest_records(struct client *cl, Z_Records *r);
void session_alert_watch(struct session *s, int what);
-char *session_setting_oneval(struct session_database *db, int offset);
IOCHAN channel_list = 0; // Master list of connections we're handling events to
char *session_setting_oneval(struct session_database *db, int offset)
{
if (!db->settings[offset])
- return 0;
+ return "";
return db->settings[offset]->value;
}
*count = 0;
for (cl = se->clients; cl; cl = cl->next)
{
+ char *name = session_setting_oneval(cl->database, PZ_NAME);
+
res[*count].id = cl->database->database->url;
- res[*count].name = cl->database->database->name;
+ res[*count].name = *name ? name : "Unknown";
res[*count].hits = cl->hits;
res[*count].records = cl->records;
res[*count].diagnostic = cl->diagnostic;
-/* $Id: pazpar2.h,v 1.22 2007-04-11 02:14:15 quinn Exp $
+/* $Id: pazpar2.h,v 1.23 2007-04-11 18:42:25 quinn Exp $
Copyright (c) 2006-2007, Index Data.
This file is part of Pazpar2.
struct database {
struct host *host;
char *url;
- char *name;
char **databases;
int errors;
struct zr_explain *explain;
void session_set_watch(struct session *s, int what, session_watchfun fun, void *data);
int session_active_clients(struct session *s);
void session_apply_setting(struct session *se, char *dbname, char *setting, char *value);
+char *session_setting_oneval(struct session_database *db, int offset);
#endif
-/* $Id: settings.c,v 1.12 2007-04-11 11:22:35 marc Exp $
+/* $Id: settings.c,v 1.13 2007-04-11 18:42:25 quinn Exp $
Copyright (c) 2006-2007, Index Data.
This file is part of Pazpar2.
"pz:allow",
"pz:maxrecs",
"pz:id",
+ "pz:name",
0
};
// Callback. Adds a new entry to the dictionary if necessary
// This is used in pass 1 to determine layout of dictionary
+// and to load any databases mentioned
static void prepare_dictionary(struct setting *set)
{
int i;
char *p;
+ // If target address is not wildcard, add the database
+ if (*set->target && set->target[strlen(set->target) - 1] != '*')
+ find_database(set->target, 0);
+
+ // Determine if we already have a dictionary entry
if (!strncmp(set->name, "pz:", 3) && (p = strchr(set->name + 3, ':')))
*(p + 1) = '\0';
for (i = 0; i < dictionary->num; i++)
if (!strcmp(dictionary->dict[i], set->name))
return;
+
if (!strncmp(set->name, "pz:", 3)) // Probably a typo in config fle
{
yaz_log(YLOG_FATAL, "Unknown pz: setting '%s'", set->name);
-/* $Id: settings.h,v 1.11 2007-04-11 02:14:15 quinn Exp $
+/* $Id: settings.h,v 1.12 2007-04-11 18:42:25 quinn Exp $
Copyright (c) 2006-2007, Index Data.
This file is part of Pazpar2.
#define PZ_ALLOW 8
#define PZ_MAXRECS 9
#define PZ_ID 10
+#define PZ_NAME 11
struct setting
{