-/* $Id: zebraapi.c,v 1.79 2002-11-26 22:18:34 adam Exp $
+/* $Id: zebraapi.c,v 1.80 2003-01-13 10:56:09 oleg Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
Index Data Aps
int zebra_record_encoding (ZebraHandle zh, const char *encoding)
{
xfree (zh->record_encoding);
+
+ /*
+ * Fixme!
+ */
+
+ if (zh->iconv_to_utf8 != 0)
+ yaz_iconv_close(zh->iconv_to_utf8);
+ if (zh->iconv_from_utf8 != 0)
+ yaz_iconv_close(zh->iconv_from_utf8);
+
zh->record_encoding = xstrdup (encoding);
+
+ logf(LOG_DEBUG, "Reset record encoding: %s", encoding);
+
+ zh->iconv_to_utf8 =
+ yaz_iconv_open ("UTF-8", encoding);
+ if (zh->iconv_to_utf8 == 0)
+ yaz_log (LOG_WARN, "iconv: %s to UTF-8 unsupported", encoding);
+ zh->iconv_from_utf8 =
+ yaz_iconv_open (encoding, "UTF-8");
+ if (zh->iconv_to_utf8 == 0)
+ yaz_log (LOG_WARN, "iconv: UTF-8 to %s unsupported", encoding);
+
return 0;
}
-/* $Id: zserver.c,v 1.100 2002-10-22 12:51:08 adam Exp $
+/* $Id: zserver.c,v 1.101 2003-01-13 10:56:09 oleg Exp $
Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
Index Data Aps
int num_langs = 0;
int selected = 0;
int i;
+ char *right_name;
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);
+
+ right_name = (char *)nmem_malloc(nmem, 32);
+
for (i = 0; i < num_charsets; i++)
{
- yaz_log (LOG_LOG, "charset %d %s", i, charsets[i]);
+ *right_name = '\0';
+
+ /*
+ * 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 (!yaz_matchstr(charsets[i], "win")) {
+ strcpy(right_name, "WINDOWS-1251");
+ } else if (!yaz_matchstr(charsets[i], "koi")) {
+ strcpy(right_name, "KOI8-R");
+ } else if (!yaz_matchstr(charsets[i], "iso")) {
+ strcpy(right_name, "ISO-8859-5");
+ } else if (!yaz_matchstr(charsets[i], "dos")) {
+ strcpy(right_name, "CP866");
+ } else if (!yaz_matchstr(charsets[i], "uni")) {
+ strcpy(right_name, "UTF-8");
+ } else {
+ strcpy(right_name, charsets[i]);
+ }
+
+ logf (LOG_LOG, "charset %d %s (right name is %s)", i,
+ charsets[i], right_name);
- 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],
+ if (odr_set_charset (q->decode, "UTF-8", right_name) == 0)
+ {
+ odr_set_charset (q->stream, right_name, "UTF-8");
+ if (selected)
+ 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, "odr_set_charset(): charset name %s unsupported",
+ right_name);
}
}
nmem_destroy (nmem);
#ifdef WIN32
#else
+ /*
+ * Fixme! Why commets?, because the first chaild process to invoke bend_stop().
+ *
+
if (!sob->inetd)
unlink ("zebrasrv.pid");
+ */
+
#endif
if (sob->handle)
{