-/*
- * Copyright (C) 1995-2002, Index Data
- * All rights reserved.
- *
- * $Id: zserver.c,v 1.88 2002-05-07 11:05:19 adam Exp $
- */
+/* $Id: zserver.c,v 1.94 2002-09-06 19:54:05 adam Exp $
+ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
+ Index Data Aps
+
+This file is part of the Zebra server.
+
+Zebra is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Zebra; see the file LICENSE.zebra. If not, write to the
+Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.
+*/
+
+
#include <stdio.h>
#include <assert.h>
q->bend_fetch = bend_fetch;
q->bend_scan = bend_scan;
-#if ZMBOL
- q->implementation_name = "Z'mbol Information Server";
- q->implementation_version = "Z'mbol " ZEBRAVER;
-#else
q->implementation_name = "Zebra Information Server";
q->implementation_version = "Zebra " ZEBRAVER;
-#endif
logf (LOG_DEBUG, "bend_init");
sob = statserv_getcontrol ();
if (!(zh = zebra_open (sob->handle)))
{
- yaz_log (LOG_FATAL, "Failed to open config `%s'", sob->configname);
+ yaz_log (LOG_WARN, "Failed to open config `%s'", sob->configname);
r->errcode = 1;
return r;
}
return r;
}
r->handle = zh;
+ if (q->charneg_request) /* characater set and langauge negotiation? */
+ {
+ char **charsets = 0;
+ int num_charsets;
+ char **langs = 0;
+ int num_langs = 0;
+ int selected = 0;
+ int i;
+
+ 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]);
+
+ if (odr_set_charset (q->decode, "UTF-8", charsets[i]) == 0)
+ {
+ odr_set_charset (q->stream, charsets[i], "UTF-8");
+ if (selected)
+ zebra_record_encoding (zh, charsets[i]);
+ q->charneg_response =
+ yaz_set_response_charneg (q->stream, charsets[i],
+ 0, selected);
+ break;
+ }
+ }
+ nmem_destroy (nmem);
+ }
return r;
}
int count;
int no_terms;
int i;
+ int type;
struct Z_External *ext;
Z_SearchInfoReport *sr;
/* get no of terms for result set */
- zebra_resultSetTerms (zh, r->setname, -1, &count, &no_terms);
+ no_terms = zebra_resultSetTerms (zh, r->setname, 0, 0, 0, 0, 0);
if (!no_terms)
return;
for (i = 0; i<no_terms; i++)
{
Z_Term *term;
- const char *termz = zebra_resultSetTerms (zh, r->setname, i,
- &count, &no_terms);
+ char outbuf[1024];
+ size_t len = sizeof(outbuf);
+ zebra_resultSetTerms (zh, r->setname, i,
+ &count, &type, outbuf, &len);
sr->elements[i] = odr_malloc (r->stream, sizeof(**sr->elements));
sr->elements[i]->subqueryId = 0;
odr_malloc (r->stream, sizeof(Z_QueryExpressionTerm));
term = odr_malloc (r->stream, sizeof(Z_Term));
sr->elements[i]->subqueryExpression->u.term->queryTerm = term;
-
- term->which = Z_Term_general;
- term->u.general = odr_malloc (r->stream, sizeof(Odr_oct));
- term->u.general->buf = odr_strdup (r->stream, termz);
-
- term->u.general->len = strlen (termz);
- term->u.general->size = strlen (termz);
-
+ switch (type)
+ {
+ case Z_Term_characterString:
+ yaz_log (LOG_DEBUG, "term as characterString");
+ term->which = Z_Term_characterString;
+ term->u.characterString = odr_strdup (r->stream, outbuf);
+ break;
+ case Z_Term_general:
+ yaz_log (LOG_DEBUG, "term as general");
+ term->which = Z_Term_general;
+ term->u.general = odr_malloc (r->stream, sizeof(*term->u.general));
+ term->u.general->size = term->u.general->len = len;
+ term->u.general->buf = odr_malloc (r->stream, len);
+ memcpy (term->u.general->buf, outbuf, len);
+ break;
+ default:
+ term->which = Z_Term_general;
+ term->u.null = odr_nullval();
+ }
sr->elements[i]->subqueryExpression->u.term->termComment = 0;
sr->elements[i]->subqueryInterpretation = 0;
sr->elements[i]->subqueryRecommendation = 0;
strcpy (sob->configname, "zebra.cfg");
sob->bend_start = bend_start;
sob->bend_stop = bend_stop;
+ strcpy (sob->service_display_name, "Zebra Server");
statserv_setcontrol (sob);