/*
- * $Id: zoom-c.c,v 1.2 2002-09-24 08:05:42 adam Exp $
+ * $Id: zoom-c.c,v 1.9 2002-12-03 10:03:27 adam Exp $
*
* ZOOM layer for C, connections, result sets, queries.
*/
#include <yaz/otherinfo.h>
#include <yaz/log.h>
#include <yaz/pquery.h>
+#include <yaz/marcdisp.h>
#include <yaz/diagbib1.h>
#include <yaz/charneg.h>
#include <yaz/ill.h>
}
else if (!strcmp (type, "syntax"))
{
+ const char *desc = 0;
if (npr->which == Z_NamePlusRecord_databaseRecord)
{
Z_External *r = (Z_External *) npr->u.databaseRecord;
oident *ent = oid_getentbyoid(r->direct_reference);
if (ent)
- {
- if (len)
- *len = strlen(ent->desc);
- return ent->desc;
- }
+ desc = ent->desc;
}
- return "none";
+ if (!desc)
+ desc = "none";
+ if (len)
+ *len = strlen(desc);
+ return desc;
}
else if (!strcmp (type, "render") &&
npr->which == Z_NamePlusRecord_databaseRecord)
}
else if (r->which == Z_External_grs1)
{
- if (len) *len = 5;
- return "GRS-1";
+ if (!rec->wrbuf_marc)
+ rec->wrbuf_marc = wrbuf_alloc();
+ wrbuf_rewind (rec->wrbuf_marc);
+ yaz_display_grs1(rec->wrbuf_marc, r->u.grs1, 0);
+ if (len)
+ *len = wrbuf_len(rec->wrbuf_marc);
+ return wrbuf_buf(rec->wrbuf_marc);
}
return 0;
}
- else if (!strcmp (type, "xml") &&
- npr->which == Z_NamePlusRecord_databaseRecord)
+ else if (npr->which == Z_NamePlusRecord_databaseRecord &&
+ (!strcmp (type, "xml") || !strcmp(type, "MarcXML")))
{
Z_External *r = (Z_External *) npr->u.databaseRecord;
oident *ent = oid_getentbyoid(r->direct_reference);
}
else if (r->which == Z_External_octet)
{
+ int marc_decode_type = YAZ_MARC_OAIMARC;
+
+ if (!strcmp(type, "MarcXML"))
+ marc_decode_type = YAZ_MARC_MARCXML;
switch (ent->value)
{
case VAL_SOIF:
r->u.octet_aligned->buf,
rec->wrbuf_marc, 0,
r->u.octet_aligned->len,
- 1) > 0)
+ marc_decode_type) > 0)
{
if (len) *len = wrbuf_len(rec->wrbuf_marc);
return wrbuf_buf(rec->wrbuf_marc);
int sel;
yaz_get_response_charneg(tmpmem, p, &charset, &lang, &sel);
- yaz_log(LOG_DEBUG, "Target accepted: charset - %s,"
- "language - %s, select - %d",
- charset, lang, sel);
-
+ yaz_log(LOG_DEBUG, "Target accepted: charset %s, "
+ "language %s, select %d",
+ charset ? charset : "none", lang ? lang : "none", sel);
+ if (charset)
+ ZOOM_connection_option_set (c, "negotiation-charset",
+ charset);
+ if (lang)
+ ZOOM_connection_option_set (c, "negotiation-lang",
+ lang);
nmem_destroy(tmpmem);
}
}
}
else
{
- // c->reconnect_ok = 0;
c->mask = ZOOM_SELECT_READ|ZOOM_SELECT_EXCEPT;
yaz_log (LOG_DEBUG, "do_write_ex 2 mask=%d", c->mask);
}
return addinfo;
}
+ZOOM_API(const char *)
+ZOOM_diag_str (int error)
+{
+ switch (error)
+ {
+ case ZOOM_ERROR_NONE:
+ return "No error";
+ case ZOOM_ERROR_CONNECT:
+ return "Connect failed";
+ case ZOOM_ERROR_MEMORY:
+ return "Out of memory";
+ case ZOOM_ERROR_ENCODE:
+ return "Encoding failed";
+ case ZOOM_ERROR_DECODE:
+ return "Decoding failed";
+ case ZOOM_ERROR_CONNECTION_LOST:
+ return "Connection lost";
+ case ZOOM_ERROR_INIT:
+ return "Init rejected";
+ case ZOOM_ERROR_INTERNAL:
+ return "Internal failure";
+ case ZOOM_ERROR_TIMEOUT:
+ return "Timeout";
+ default:
+ return diagbib1_str (error);
+ }
+}
+
ZOOM_API(int)
ZOOM_connection_error (ZOOM_connection c, const char **cp,
const char **addinfo)
int error = c->error;
if (cp)
{
- switch (error)
- {
- case ZOOM_ERROR_NONE:
- *cp = "No error"; break;
- case ZOOM_ERROR_CONNECT:
- *cp = "Connect failed"; break;
- case ZOOM_ERROR_MEMORY:
- *cp = "Out of memory"; break;
- case ZOOM_ERROR_ENCODE:
- *cp = "Encoding failed"; break;
- case ZOOM_ERROR_DECODE:
- *cp = "Decoding failed"; break;
- case ZOOM_ERROR_CONNECTION_LOST:
- *cp = "Connection lost"; break;
- case ZOOM_ERROR_INIT:
- *cp = "Init rejected"; break;
- case ZOOM_ERROR_INTERNAL:
- *cp = "Internal failure"; break;
- case ZOOM_ERROR_TIMEOUT:
- *cp = "Timeout"; break;
- default:
- *cp = diagbib1_str (error);
- }
+ *cp = ZOOM_diag_str(error);
}
if (addinfo)
{