-/* $Id: zserver.c,v 1.100 2002-10-22 12:51:08 adam Exp $
+/* $Id: zserver.c,v 1.104 2003-03-04 23:30:20 adam Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
Index Data Aps
#include <yaz/log.h>
#include <yaz/ill.h>
+#include <yaz/yaz-util.h>
#include "zserver.h"
q->implementation_name = "Zebra Information Server";
q->implementation_version = "Zebra " ZEBRAVER;
- logf (LOG_DEBUG, "bend_init");
+ yaz_log (LOG_DEBUG, "bend_init");
sob = statserv_getcontrol ();
if (!(zh = zebra_open (sob->handle)))
int num_langs = 0;
int selected = 0;
int i;
+ NMEM nmem = nmem_create();
- NMEM nmem = nmem_create ();
yaz_log (LOG_LOG, "character set and language negotiation");
yaz_get_proposal_charneg (nmem, q->charneg_request,
&charsets, &num_charsets,
&langs, &num_langs, &selected);
+
for (i = 0; i < num_charsets; i++)
{
- yaz_log (LOG_LOG, "charset %d %s", i, charsets[i]);
+ const char *right_name = "";
+ /*
+ * FIXME! It is like rudiment :-))
+ * We have to support this short names of character sets,
+ * because a lot servers in Russia to use own in during
+ * character set and language negotiation still.
+ */
- if (odr_set_charset (q->decode, "UTF-8", charsets[i]) == 0)
+ if (!yaz_matchstr(charsets[i], "win")) {
+ right_name = "WINDOWS-1251";
+ } else if (!yaz_matchstr(charsets[i], "koi")) {
+ right_name = "KOI8-R";
+ } else if (!yaz_matchstr(charsets[i], "iso")) {
+ right_name = "ISO-8859-5";
+ } else if (!yaz_matchstr(charsets[i], "dos")) {
+ right_name = "CP866";
+ } else if (!yaz_matchstr(charsets[i], "uni")) {
+ right_name = "UTF-8";
+ } else {
+ right_name = charsets[i];
+ }
+ if (odr_set_charset (q->decode, "UTF-8", right_name) == 0)
{
- odr_set_charset (q->stream, charsets[i], "UTF-8");
+ yaz_log (LOG_LOG, "charset %d %s (proper name %s): OK", i,
+ charsets[i], right_name);
+ odr_set_charset (q->stream, right_name, "UTF-8");
if (selected)
- zebra_record_encoding (zh, charsets[i]);
- q->charneg_response =
- yaz_set_response_charneg (q->stream, charsets[i],
+ zebra_record_encoding (zh, right_name);
+ q->charneg_response =
+ yaz_set_response_charneg (q->stream, right_name,
0, selected);
- break;
+ break;
+ } else {
+ yaz_log (LOG_LOG, "charset %d %s (proper name %s): unsupported", i,
+ charsets[i], right_name);
}
}
- nmem_destroy (nmem);
+ nmem_destroy(nmem);
}
return r;
}
zebra_result (zh, &r->errcode, &r->errstring);
return 0;
}
- logf (LOG_LOG, "ResultSet '%s'", r->setname);
+ yaz_log (LOG_LOG, "ResultSet '%s'", r->setname);
switch (r->query->which)
{
case Z_Query_type_1: case Z_Query_type_101:
if (notToKeep)
{
int i;
- zebra_begin_trans (zh);
+ zebra_begin_trans (zh, 1);
for (i = 0; i < notToKeep->num; i++)
{
Z_External *rec = notToKeep->elements[i]->record;
char *pidfile = "zebrasrv.pid";
int fd = creat (pidfile, 0666);
if (fd == -1)
- logf (LOG_WARN|LOG_ERRNO, "creat %s", pidfile);
+ yaz_log (LOG_WARN|LOG_ERRNO, "creat %s", pidfile);
else
{
char pidstr[30];