#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <yaz/log.h>
#include "pazpar2.h"
#include "host.h"
#include <netinet/in.h>
#endif
-static struct host *hosts = 0; // The hosts we know about
+static struct host *hosts = 0; /* thread pr */
-#if 0
-static xmlDoc *get_explain_xml(const char *id)
+static xmlDoc *get_explain_xml(struct conf_targetprofiles *targetprofiles,
+ const char *id)
{
struct stat st;
char *dir;
char path[256];
char ide[256];
- if (!config || !config->targetprofiles)
- {
- yaz_log(YLOG_WARN, "Config must be loaded and specify targetprofiles");
- return 0;
- }
- if (config->targetprofiles->type != Targetprofiles_local)
+ if (targetprofiles->type != Targetprofiles_local)
{
yaz_log(YLOG_FATAL, "Only supports local type");
return 0;
}
- dir = config->targetprofiles->src;
+ dir = targetprofiles->src;
urlencode(id, ide);
sprintf(path, "%s/%s", dir, ide);
if (!stat(path, &st))
else
return 0;
}
-#endif
// Create a new host structure for hostport
static struct host *create_host(const char *hostport)
return create_host(hostport);
}
+int resolve_database(struct database *db)
+{
+ if (db->host == 0)
+ {
+ struct host *host;
+ char *p;
+ char hostport[256];
+ strcpy(hostport, db->url);
+ if ((p = strchr(hostport, '/')))
+ *p = '\0';
+ if (!(host = find_host(hostport)))
+ return -1;
+ db->host = host;
+ }
+ return 0;
+}
+
+void resolve_databases(struct conf_service *service)
+{
+ struct database *db = service->databases;
+ for (; db; db = db->next)
+ resolve_database(db);
+}
+
static struct database *load_database(const char *id,
struct conf_service *service)
{
xmlDoc *doc = 0;
struct zr_explain *explain = 0;
struct database *db;
- struct host *host;
char hostport[256];
char *dbname;
struct setting *idset;
yaz_log(YLOG_LOG, "New database: %s", id);
-#if 0
- if (config && config->targetprofiles
- && (doc = get_explain_xml(id)))
+ if (service->targetprofiles
+ && (doc = get_explain_xml(service->targetprofiles, id)))
{
explain = zr_read_xml(service->nmem, xmlDocGetRootElement(doc));
if (!explain)
return 0;
}
-#endif
if (strlen(id) > 255)
return 0;
*(dbname++) = '\0';
else
dbname = "";
- if (!(host = find_host(hostport)))
- return 0;
db = nmem_malloc(service->nmem, sizeof(*db));
memset(db, 0, sizeof(*db));
- db->host = host;
+ db->host = 0;
db->url = nmem_strdup(service->nmem, id);
- db->databases = xmalloc(2 * sizeof(char *));
+ db->databases = nmem_malloc(service->nmem, 2 * sizeof(char *));
db->databases[0] = nmem_strdup(service->nmem, dbname);
db->databases[1] = 0;
db->errors = 0;