+New OID database - with public definitions in oid_db.h. Removed old OID
+database including the head oid.h and definitions such as enum oid_value
+and struct oident. The new OID database uses the same string names as
+before but the 'protocol' is gone. There are now only two representations
+raw OID (int *) and string. Functions with prefix yaz_string_to_oid
+converts from string to OID; functions with prefix yaz_oid_to_string
+converts the other way.
+
Change to emit_term() in CQL-to-PQF query translation: when a term has
the /regexp relation modifier, do not process it for leading and
trailing "^" and "*", which have quite different meanings in regular
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: admin.c,v 1.23 2007-01-03 08:42:13 adam Exp $
+ * $Id: admin.c,v 1.24 2007-04-12 13:52:57 adam Exp $
*/
#include <stdio.h>
#include <yaz/proto.h>
#include <yaz/marcdisp.h>
#include <yaz/diagbib1.h>
-
+#include <yaz/oid_db.h>
#include <yaz/pquery.h>
#include "admin.h"
Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest );
Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
Z_External *r;
- int oid[OID_SIZE];
+ int *oid;
Z_ESAdminOriginPartToKeep *toKeep;
Z_ESAdminOriginPartNotToKeep *notToKeep;
- oident update_oid;
printf ("Admin request\n");
fflush(stdout);
- /* Set up the OID for the external */
- update_oid.proto = PROTO_Z3950;
- update_oid.oclass = CLASS_EXTSERV;
- update_oid.value = VAL_ADMINSERVICE;
+ oid = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_EXTSERV,
+ OID_STR_ADMIN,
+ out);
+
- oid_ent_to_oid (&update_oid, oid);
- req->packageType = odr_oiddup(out,oid);
+ req->packageType = oid;
req->packageName = "1.Extendedserveq";
/* Allocate the external */
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: client.c,v 1.331 2007-03-28 16:35:47 mike Exp $
+ * $Id: client.c,v 1.332 2007-04-12 13:52:57 adam Exp $
*/
/** \file client.c
* \brief yaz-client program
#include <yaz/comstack.h>
+#include <yaz/oid_db.h>
+#define NO_OID 1
#include <yaz/proto.h>
#include <yaz/marcdisp.h>
#include <yaz/diagbib1.h>
static int setno = 1; /* current set offset */
static enum oid_proto protocol = PROTO_Z3950; /* current app protocol */
#define RECORDSYNTAX_MAX 20
-static enum oid_value recordsyntax_list[RECORDSYNTAX_MAX] = { VAL_USMARC };
-static int recordsyntax_size = 1;
+static char *recordsyntax_list[RECORDSYNTAX_MAX];
+static int recordsyntax_size = 0;
static char *record_schema = 0;
static int sent_close = 0;
#define maxOtherInfosSupported 10
struct {
- int oidval;
+ int oid[OID_SIZE];
char* value;
} extraOtherInfos[maxOtherInfosSupported];
-
void process_cmd_line(char* line);
#if HAVE_READLINE_READLINE_H
yaz_oi_APDU(a, &oi);
for(i=0; i<maxOtherInfosSupported; ++i)
{
- if(extraOtherInfos[i].oidval != -1)
- yaz_oi_set_string_oidval(oi, out, extraOtherInfos[i].oidval,
+ if (oid_oidlen(extraOtherInfos[i].oid) > 0)
+ yaz_oi_set_string_oid(oi, out, extraOtherInfos[i].oid,
1, extraOtherInfos[i].value);
}
}
req->referenceId = set_refid (out);
- if (yazProxy && type_and_host)
- yaz_oi_set_string_oidval(&req->otherInfo, out, VAL_PROXY,
- 1, type_and_host);
+ if (yazProxy && type_and_host)
+ {
+ const int *oid_proxy = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_USERINFO, OID_STR_PROXY);
+ yaz_oi_set_string_oid(&req->otherInfo, out, oid_proxy,
+ 1, type_and_host);
+ }
if (negotiationCharset || yazLang) {
Z_OtherInformation **p;
}
else if (uif->which == Z_External_single)
{
+ const int *oclc_oid = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_GENERAL,
+ "OCLC-userInfo");
Odr_any *sat = uif->u.single_ASN1_type;
- oident *oid = oid_getentbyoid(uif->direct_reference);
- if (oid->value == VAL_OCLCUI) {
+ if (!oid_oidcmp(uif->direct_reference, oclc_oid))
+ {
Z_OCLC_UserInformation *oclc_ui;
ODR decode = odr_createmem(ODR_DECODE);
odr_setbuf(decode, (char *) sat->buf, sat->len, 0);
static void display_record(Z_External *r)
{
- oident *ent = oid_getentbyoid(r->direct_reference);
-
+ char oid_name_buf[OID_STR_MAX];
+ int oclass;
+ const int *oid = r->direct_reference;
+ const char *oid_name = 0;
+
record_last = r;
/*
* Tell the user what we got.
*/
- if (r->direct_reference)
+ if (oid)
{
+ oid_name = yaz_oid_to_string_buf(oid, &oclass, oid_name_buf);
printf("Record type: ");
- if (ent)
- printf("%s\n", ent->desc);
- else if (!odr_oid(print, &r->direct_reference, 0, 0))
- {
- odr_perror(print, "print oid");
- odr_reset(print);
- }
+ if (oid_name)
+ printf("%s\n", oid_name);
}
/* Check if this is a known, ASN.1 type tucked away in an octet string */
- if (ent && r->which == Z_External_octet)
+ if (r->which == Z_External_octet)
{
- Z_ext_typeent *type = z_ext_getentbyref(ent->value);
+ Z_ext_typeent *type = z_ext_getentbyref(r->direct_reference);
char *rr;
if (type)
}
}
}
- if (ent && ent->value == VAL_SOIF)
+ if (oid_name && !yaz_matchstr(oid_name, OID_STR_SOIF))
{
print_record((const unsigned char *) r->u.octet_aligned->buf,
r->u.octet_aligned->len);
if (marc_file)
fwrite (r->u.octet_aligned->buf, 1, r->u.octet_aligned->len, marc_file);
}
- else if (r->which == Z_External_octet)
+ else if (oid && r->which == Z_External_octet)
{
const char *octet_buf = (char*)r->u.octet_aligned->buf;
- if (ent->oclass == CLASS_RECSYN &&
- (ent->value == VAL_TEXT_XML ||
- ent->value == VAL_APPLICATION_XML ||
- ent->value == VAL_HTML))
+ if (oid_name && (!yaz_matchstr(oid_name, OID_STR_XML)
+ || !yaz_matchstr(oid_name, OID_STR_APPLICATION_XML)
+ || !yaz_matchstr(oid_name, OID_STR_HTML)))
{
print_record((const unsigned char *) octet_buf,
r->u.octet_aligned->len);
}
- else if (ent->value == VAL_POSTSCRIPT)
+ else if (oid_name && !yaz_matchstr(oid_name, OID_STR_POSTSCRIPT))
{
int size = r->u.octet_aligned->len;
if (size > 100)
}
else
{
+ const int *oidsuffix = oid_oidlen(oid) > 1
+ ? oid + oid_oidlen(oid)-2 : 0;
if (
#if AVOID_MARC_DECODE
/* primitive check for a marc OID 5.1-29 except 16 */
- ent->oidsuffix[0] == 5 && ent->oidsuffix[1] < 30 &&
- ent->oidsuffix[1] != 16
+ oidsuffix[0] == 5 && oidsuffix[1] < 30 && oidsuffix[1] != 16
#else
1
#endif
if (marcCharset && !strcmp(marcCharset, "auto"))
{
- if (ent->value == VAL_USMARC)
+ if (!yaz_matchstr(oid_name, OID_STR_USMARC))
{
if (octet_buf[9] == 'a')
from = "UTF-8";
if (marc_file)
fwrite (octet_buf, 1, r->u.octet_aligned->len, marc_file);
}
- else if (ent && ent->value == VAL_SUTRS)
+ else if (oid_name && !yaz_matchstr(oid_name, OID_STR_SUTRS))
{
if (r->which != Z_External_sutrs)
{
if (marc_file)
fwrite (r->u.sutrs->buf, 1, r->u.sutrs->len, marc_file);
}
- else if (ent && ent->value == VAL_GRS1)
+ else if (oid_name && !yaz_matchstr(oid_name, OID_STR_GRS1))
{
WRBUF w;
if (r->which != Z_External_grs1)
puts (wrbuf_cstr(w));
wrbuf_destroy(w);
}
- else if (ent && ent->value == VAL_OPAC)
+ else if (oid_name && !yaz_matchstr(oid_name, OID_STR_OPAC))
{
int i;
if (r->u.opac->bibliographicRecord)
static void display_diagrecs(Z_DiagRec **pp, int num)
{
int i;
- oident *ent;
Z_DefaultDiagFormat *r;
printf("Diagnostic message(s) from database:\n");
}
else
r = p->u.defaultFormat;
- if (!(ent = oid_getentbyoid(r->diagnosticSetId)) ||
- ent->oclass != CLASS_DIAGSET || ent->value != VAL_BIB1)
- printf("Missing or unknown diagset\n");
+
+ if (!r->diagnosticSetId)
+ printf("Missing diagset\n");
+ else
+ {
+ int oclass;
+ char diag_name_buf[OID_STR_MAX];
+ const char *diag_name = 0;
+ diag_name = yaz_oid_to_string_buf
+ (r->diagnosticSetId, &oclass, diag_name_buf);
+ if (yaz_matchstr(diag_name, OID_STR_BIB1))
+ printf("Unknown diagset: %s\n", diag_name);
+ }
printf(" [%d] %s", *r->condition, diagbib1_str(*r->condition));
switch (r->which)
{
if (record_schema)
sr->u.request->recordSchema = record_schema;
- if (recordsyntax_size == 1 && recordsyntax_list[0] == VAL_TEXT_XML)
+ if (recordsyntax_size == 1 && !yaz_matchstr(recordsyntax_list[0], "xml"))
sr->u.request->recordPacking = "xml";
return send_srw(sr);
}
if (smallSetUpperBound > 0 || (largeSetLowerBound > 1 &&
mediumSetPresentNumber > 0))
{
- if (recordsyntax_size > 0)
+ if (recordsyntax_size)
req->preferredRecordSyntax =
- yaz_oidval_to_z3950oid(out, CLASS_RECSYN, recordsyntax_list[0]);
+ yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_RECSYN, recordsyntax_list[0], out);
+
req->smallSetElementSetNames =
req->mediumSetElementSetNames = elementSetNames;
}
}
else
{
- oident oid;
-
- item_request_buf = odr_getbuf (out, &item_request_size, 0);
- oid.proto = PROTO_GENERAL;
- oid.oclass = CLASS_GENERAL;
- oid.value = VAL_ISO_ILL_1;
-
+ const int *ill_oid = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_GENERAL, "ISOILL-1");
r = (Z_External *) odr_malloc (out, sizeof(*r));
- r->direct_reference = odr_oiddup(out,oid_getoidbyent(&oid));
+ r->direct_reference = odr_oiddup(out, ill_oid);
r->indirect_reference = 0;
r->descriptor = 0;
r->which = Z_External_single;
}
else
{
- oident oid;
+ const int *ill_oid = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_GENERAL, "ISOILL-1");
+
ill_request_buf = odr_getbuf (out, &ill_request_size, 0);
- oid.proto = PROTO_GENERAL;
- oid.oclass = CLASS_GENERAL;
- oid.value = VAL_ISO_ILL_1;
-
r = (Z_External *) odr_malloc (out, sizeof(*r));
- r->direct_reference = odr_oiddup(out,oid_getoidbyent(&oid));
+ r->direct_reference = odr_oiddup(out, ill_oid);
r->indirect_reference = 0;
r->descriptor = 0;
r->which = Z_External_single;
static Z_External *create_ItemOrderExternal(const char *type, int itemno)
{
Z_External *r = (Z_External *) odr_malloc(out, sizeof(Z_External));
- oident ItemOrderRequest;
-
- ItemOrderRequest.proto = PROTO_Z3950;
- ItemOrderRequest.oclass = CLASS_EXTSERV;
- ItemOrderRequest.value = VAL_ITEMORDER;
-
- r->direct_reference = odr_oiddup(out,oid_getoidbyent(&ItemOrderRequest));
+ const int *itemorder_oid = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_EXTSERV,
+ "Item order");
+ r->direct_reference = odr_oiddup(out, itemorder_oid);
r->indirect_reference = 0;
r->descriptor = 0;
}
else if (!strcmp(type, "xml") || !strcmp(type, "3"))
{
- const char *xml_buf =
- "<itemorder>\n"
- " <type>request</type>\n"
- " <libraryNo>000200</libraryNo>\n"
- " <borrowerTicketNo> 1212 </borrowerTicketNo>\n"
- "</itemorder>";
+ const int *oid_xml = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_RECSYN, "xml");
+ const char *xml_buf =
+ "<itemorder>\n"
+ " <type>request</type>\n"
+ " <libraryNo>000200</libraryNo>\n"
+ " <borrowerTicketNo> 1212 </borrowerTicketNo>\n"
+ "</itemorder>";
r->u.itemOrder->u.esRequest->notToKeep->itemRequest =
- z_ext_record (out, VAL_TEXT_XML, xml_buf, strlen(xml_buf));
+ z_ext_record_oid(out, oid_xml, xml_buf, strlen(xml_buf));
}
else
r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0;
{
Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest);
Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
- oident ItemOrderRequest;
-
+ const int *itemorder_oid = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_EXTSERV,
+ "Item order");
req->referenceId = set_refid (out);
- ItemOrderRequest.proto = PROTO_Z3950;
- ItemOrderRequest.oclass = CLASS_EXTSERV;
- ItemOrderRequest.value = VAL_ITEMORDER;
- req->packageType = odr_oiddup(out,oid_getoidbyent(&ItemOrderRequest));
+ req->packageType = odr_oiddup(out, itemorder_oid);
req->packageName = esPackageName;
req->taskSpecificParameters = create_ItemOrderExternal(type, itemno);
Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
Z_External *r;
Z_External *record_this = 0;
+ const int *oid_xml = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_RECSYN, "xml");
if (rec_buf)
- record_this = z_ext_record (out, VAL_TEXT_XML, rec_buf, rec_len);
+ record_this = z_ext_record_oid(out, oid_xml, rec_buf, rec_len);
else
{
if (!record_last)
}
req->packageType =
- yaz_oidval_to_z3950oid(out, CLASS_EXTSERV,
- version == 0 ? VAL_DBUPDATE0 : VAL_DBUPDATE);
-
+ yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_EXTSERV,
+ version == 0 ? "DB. Update (first version)" :
+ "DB. Update", out);
req->packageName = esPackageName;
req->referenceId = set_refid (out);
{
char *asn_buf = 0;
int noread = 0;
+ int *oid;
char oid_str[51];
- int oid_value_xmles = VAL_XMLES;
Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest);
Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
return 0;
}
arg += noread;
- oid_value_xmles = oid_getvalbyname(oid_str);
- if (oid_value_xmles == VAL_NONE)
- {
- printf("Bad OID: %s\n", oid_str);
- return 0;
- }
-
if (parse_cmd_doc(&arg, out, &asn_buf,
&ext->u.single_ASN1_type->len, 0) == 0)
return 0;
ext->u.single_ASN1_type->buf = (unsigned char *) asn_buf;
- req->packageType = yaz_oidval_to_z3950oid(out, CLASS_EXTSERV,
- oid_value_xmles);
+ oid = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_EXTSERV, oid_str, out);
+ if (!oid)
+ {
+ printf("Bad OID: %s\n", oid_str);
+ return 0;
+ }
+
+ req->packageType = oid;
- ext->direct_reference = yaz_oidval_to_z3950oid(out, CLASS_EXTSERV,
- oid_value_xmles);
+ ext->direct_reference = oid;
+
send_apdu(apdu);
return 2;
/* save this for later .. when fetching individual records */
sr = yaz_srw_get(out, Z_SRW_explain_request);
- if (recordsyntax_size > 0 && recordsyntax_list[0] == VAL_TEXT_XML)
+ if (recordsyntax_size == 1
+ && !yaz_matchstr(recordsyntax_list[0], "xml"))
sr->u.explain_request->recordPacking = "xml";
send_srw(sr);
return 2;
req->resultSetStartPoint = &setno;
req->numberOfRecordsRequested = &nos;
- if (recordsyntax_size == 1)
+ if (recordsyntax_size)
req->preferredRecordSyntax =
- yaz_oidval_to_z3950oid(out, CLASS_RECSYN, recordsyntax_list[0]);
+ yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_RECSYN, recordsyntax_list[0], out);
if (record_schema || recordsyntax_size >= 2)
{
else
{
compo.u.complex->generic->schema.oid =
- yaz_str_to_z3950oid(out, CLASS_SCHEMA, record_schema);
+ yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_SCHEMA, record_schema, out);
if (!compo.u.complex->generic->schema.oid)
{
/* OID wasn't a schema! Try record syntax instead. */
compo.u.complex->generic->schema.oid = (Odr_oid *)
- yaz_str_to_z3950oid(out, CLASS_RECSYN, record_schema);
+ yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_RECSYN, record_schema, out);
}
}
if (!elementSetNames)
}
compo.u.complex->num_dbSpecific = 0;
compo.u.complex->dbSpecific = 0;
+
+ compo.u.complex->num_recordSyntax = 0;
+ compo.u.complex->recordSyntax = 0;
if (recordsyntax_size >= 2)
{
int i;
odr_malloc(out, recordsyntax_size * sizeof(Odr_oid*));
for (i = 0; i < recordsyntax_size; i++)
compo.u.complex->recordSyntax[i] =
- yaz_oidval_to_z3950oid(out, CLASS_RECSYN,
- recordsyntax_list[i]);
- }
- else
- {
- compo.u.complex->num_recordSyntax = 0;
- compo.u.complex->recordSyntax = 0;
+ yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_RECSYN, recordsyntax_list[i], out);
}
}
else if (elementSetNames)
sr->u.request->maximumRecords = odr_intdup(out, nos);
if (record_schema)
sr->u.request->recordSchema = record_schema;
- if (recordsyntax_size == 1 && recordsyntax_list[0] == VAL_TEXT_XML)
+ if (recordsyntax_size == 1 && !yaz_matchstr(recordsyntax_list[0], "xml"))
sr->u.request->recordPacking = "xml";
return send_srw(sr);
}
return -1;
}
req->attributeSet =
- yaz_oidval_to_z3950oid(out, CLASS_ATTSET, VAL_BIB1);
+ yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_ATTSET, "Bib-1", out);
if (!(req->termListAndStartPoint = ccl_scan_query (out, rpn)))
{
printf("Couldn't convert CCL to Scan term\n");
const char *cp = arg;
int nor;
int idx = 0;
- oid_value nsyntax[RECORDSYNTAX_MAX];
+ int i;
char form_str[41];
if (!arg || !*arg)
{
printf("Usage: format <recordsyntax>\n");
return 0;
}
+ for (i = 0; i < recordsyntax_size; i++)
+ {
+ xfree(recordsyntax_list[i]);
+ recordsyntax_list[i] = 0;
+ }
+
while (sscanf(cp, "%40s%n", form_str, &nor) >= 1 && nor > 0
&& idx < RECORDSYNTAX_MAX)
{
- nsyntax[idx] = oid_getvalbyname(form_str);
if (!strcmp(form_str, "none"))
break;
- if (nsyntax[idx] == VAL_NONE)
- {
- printf ("unknown record syntax: %s\n", form_str);
- return 0;
- }
+ recordsyntax_list[idx] = xstrdup(form_str);
cp += nor;
idx++;
}
recordsyntax_size = idx;
- memcpy(recordsyntax_list, nsyntax, idx * sizeof(*nsyntax));
return 1;
}
return 1;
}
-int cmd_attributeset(const char *arg)
-{
- char what[100];
-
- if (!arg || !*arg)
- {
- printf("Usage: attributeset <setname>\n");
- return 0;
- }
- sscanf(arg, "%s", what);
- if (p_query_attset (what))
- {
- printf("Unknown attribute set name\n");
- return 0;
- }
- return 1;
-}
-
int cmd_querytype (const char *arg)
{
if (!strcmp (arg, "ccl"))
return 1;
}
+#if 0
/*
this command takes 3 arge {name class oid}
*/
}
return 1;
}
+#endif
int cmd_push_command(const char* arg)
{
fprintf(stderr, "failed to allocate ODR streams\n");
exit(1);
}
- oid_init();
setvbuf(stdout, 0, _IONBF, 0);
if (apdu_file)
rl_attempted_completion_function = (CPPFunction*)readline_completer;
#endif
for(i = 0; i < maxOtherInfosSupported; ++i) {
- extraOtherInfos[i].oidval = -1;
+ extraOtherInfos[i].oid[0] = -1;
+ extraOtherInfos[i].value = 0;
}
+
+ cmd_format("usmarc");
source_rcfile();
char oidstr[101], otherinfoString[101];
int otherinfoNo;
int sscan_res;
- int oidval;
sscan_res = sscanf (args, "%d %100[^ ] %100s",
&otherinfoNo, oidstr, otherinfoString);
- if (sscan_res==1) {
+
+ if (sscan_res > 0 && otherinfoNo >= maxOtherInfosSupported) {
+ printf("Error otherinfo index too large (%d>=%d)\n",
+ otherinfoNo,maxOtherInfosSupported);
+ return 0;
+ }
+
+
+ if (sscan_res==1)
+ {
/* reset this otherinfo */
- if(otherinfoNo>=maxOtherInfosSupported) {
- printf("Error otherinfo index to large (%d>%d)\n",
- otherinfoNo,maxOtherInfosSupported);
- }
- extraOtherInfos[otherinfoNo].oidval = -1;
- if (extraOtherInfos[otherinfoNo].value)
- xfree(extraOtherInfos[otherinfoNo].value);
+ extraOtherInfos[otherinfoNo].oid[0] = -1;
+ xfree(extraOtherInfos[otherinfoNo].value);
extraOtherInfos[otherinfoNo].value = 0;
return 0;
}
- if (sscan_res<3) {
+ if (sscan_res != 3) {
printf("Error in set_otherinfo command \n");
return 0;
}
-
- if (otherinfoNo>=maxOtherInfosSupported) {
- printf("Error otherinfo index too large (%d>=%d)\n",
- otherinfoNo,maxOtherInfosSupported);
- }
-
- oidval = oid_getvalbyname (oidstr);
- if (oidval == VAL_NONE)
+ else
{
- printf("Error in set_otherinfo command unknown oid %s \n",oidstr);
- return 0;
- }
- extraOtherInfos[otherinfoNo].oidval = oidval;
- if (extraOtherInfos[otherinfoNo].value)
+ NMEM oid_tmp = nmem_create();
+ const int *oid =
+ yaz_string_to_oid_nmem(yaz_oid_std(),
+ CLASS_GENERAL, oidstr, oid_tmp);
+ oid_oidcpy(extraOtherInfos[otherinfoNo].oid, oid);
+
xfree(extraOtherInfos[otherinfoNo].value);
- extraOtherInfos[otherinfoNo].value = xstrdup(otherinfoString);
+ extraOtherInfos[otherinfoNo].value = xstrdup(otherinfoString);
+
+ nmem_destroy(oid_tmp);
+ }
return 0;
}
{
int i;
- if(strlen(args)>0) {
+ if (strlen(args)>0)
+ {
i = atoi(args);
- if( i >= maxOtherInfosSupported ) {
+ if (i >= maxOtherInfosSupported)
+ {
printf("Error otherinfo index to large (%d>%d)\n",i,maxOtherInfosSupported);
return 0;
}
-
- if(extraOtherInfos[i].oidval != -1)
+ if (extraOtherInfos[i].value)
+ {
+ char name_oid[OID_STR_MAX];
+ int oclass;
+ const char *name =
+ yaz_oid_to_string_buf(extraOtherInfos[i].oid, &oclass,
+ name_oid);
printf(" otherinfo %d %s %s\n",
- i,
- yaz_z3950_oid_value_to_str(
- (enum oid_value) extraOtherInfos[i].oidval,
- CLASS_RECSYN),
+ i, name ? name : "null",
extraOtherInfos[i].value);
+ }
- } else {
- for(i=0; i<maxOtherInfosSupported; ++i) {
- if(extraOtherInfos[i].oidval != -1)
+ }
+ else
+ {
+ for(i = 0; i < maxOtherInfosSupported; ++i)
+ {
+ if (extraOtherInfos[i].value)
+ {
+ char name_oid[OID_STR_MAX];
+ int oclass;
+ const char *name =
+ yaz_oid_to_string_buf(extraOtherInfos[i].oid, &oclass,
+ name_oid);
printf(" otherinfo %d %s %s\n",
- i,
- yaz_z3950_oid_value_to_str(
- (enum oid_value) extraOtherInfos[i].oidval,
- CLASS_RECSYN),
+ i, name ? name : "null",
extraOtherInfos[i].value);
+ }
+
}
-
}
return 0;
}
printf("ssub/lslb/mspn : %d/%d/%d\n",smallSetUpperBound,largeSetLowerBound,mediumSetPresentNumber);
/* print present related options */
- printf("Format : %s\n",
- (recordsyntax_size > 0) ?
- yaz_z3950_oid_value_to_str(recordsyntax_list[0], CLASS_RECSYN) :
- "none");
+ if (recordsyntax_size > 0)
+ {
+ printf("Format : %s\n", recordsyntax_list[0]);
+ }
printf("Schema : %s\n",record_schema ? record_schema : "not set");
printf("Elements : %s\n",elementSetNames?elementSetNames->u.generic:"");
otherinfoNo, maxOtherInfosSupported);
return 0;
}
- if (extraOtherInfos[otherinfoNo].oidval != -1)
+ if (extraOtherInfos[otherinfoNo].value)
{
/* only clear if set. */
- extraOtherInfos[otherinfoNo].oidval = -1;
+ extraOtherInfos[otherinfoNo].oid[0] = -1;
xfree(extraOtherInfos[otherinfoNo].value);
+ extraOtherInfos[otherinfoNo].value = 0;
}
} else {
int i;
for(i = 0; i < maxOtherInfosSupported; ++i)
{
- if (extraOtherInfos[i].oidval != -1)
+ if (extraOtherInfos[i].value)
{
- extraOtherInfos[i].oidval = -1;
+ extraOtherInfos[i].oid[0] = -1;
xfree(extraOtherInfos[i].value);
+ extraOtherInfos[i].value = 0;
}
}
}
char *ad;
completerFunctionType rl_completerfunction;
int complete_filenames;
- char **local_tabcompletes;
+ const char **local_tabcompletes;
} cmd_array[] = {
{"open", cmd_open, "('tcp'|'ssl')':<host>[':'<port>][/<db>]",NULL,0,NULL},
{"quit", cmd_quit, "",NULL,0,NULL},
{"schema", cmd_schema, "<schema>",complete_schema,0,NULL},
{"elements", cmd_elements, "<elementSetName>",NULL,0,NULL},
{"close", cmd_close, "",NULL,0,NULL},
- {"attributeset", cmd_attributeset, "<attrset>",complete_attributeset,0,NULL},
{"querytype", cmd_querytype, "<type>",complete_querytype,0,NULL},
{"refid", cmd_refid, "<id>",NULL,0,NULL},
{"itemorder", cmd_itemorder, "ill|item|xml <itemno>",NULL,0,NULL},
{"set_auto_wait", cmd_set_auto_wait," on|off",complete_auto_reconnect,1,NULL},
{"set_otherinfo", cmd_set_otherinfo,"<otherinfoinddex> <oid> <string>",NULL,0,NULL},
{"sleep", cmd_sleep,"<seconds>",NULL,0,NULL},
+#if 0
{"register_oid", cmd_register_oid,"<name> <class> <oid>",NULL,0,NULL},
+#endif
{"push_command", cmd_push_command,"<command>",command_generator,0,NULL},
{"register_tab", cmd_register_tab,"<commandname> <tab>",command_generator,0,NULL},
{"cclparse", cmd_cclparse,"<ccl find command>",NULL,0,NULL},
char command[101], tabargument[101];
int i;
int num_of_tabs;
- char** tabslist;
+ const char** tabslist;
if (sscanf (arg, "%100s %100s", command, tabargument) < 1) {
return 0;
if (!cmd_array[i].local_tabcompletes)
- cmd_array[i].local_tabcompletes = (char **) calloc(1,sizeof(char**));
+ cmd_array[i].local_tabcompletes = (const char **) calloc(1,sizeof(char**));
num_of_tabs=0;
num_of_tabs++;
}
- cmd_array[i].local_tabcompletes = (char **)
+ cmd_array[i].local_tabcompletes = (const char **)
realloc(cmd_array[i].local_tabcompletes,
(num_of_tabs+2)*sizeof(char**));
tabslist = cmd_array[i].local_tabcompletes;
}
#if HAVE_READLINE_READLINE_H
-static char** default_completer_list = NULL;
+static const char** default_completer_list = NULL;
static char* default_completer(const char* text, int state)
{
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: tabcomplete.c,v 1.17 2007-01-03 08:42:13 adam Exp $
+ * $Id: tabcomplete.c,v 1.18 2007-04-12 13:52:57 adam Exp $
*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
-#include <yaz/oid.h>
#include "tabcomplete.h"
+#include <yaz/oid_db.h>
/* ***************************************************************************
*
*
* ***************************************************************************/
-char *complete_from_list(char* completions[], const char *text, int state)
+char *complete_from_list(const char** completions,
+ const char *text, int state)
{
#if HAVE_READLINE_READLINE_H
static int idx;
- if(!completions) return NULL;
- if(state==0) {
+ if (!completions)
+ return NULL;
+ if (state==0)
idx = 0;
- }
for(; completions[idx]; ++ idx) {
if(!
#ifdef WIN32
typedef struct {
- oid_class oclass;
- char** values;
+ int oclass;
+ const char** values;
size_t index;
size_t max;
} oid_callback_t;
of pointers into the oid owned data
*/
-void oid_loader(struct oident* oid, void* data_)
+void oid_loader(const int *oid,
+ int oclass, const char *name, void* data_)
{
oid_callback_t* data=(oid_callback_t*) data_;
-
- if((oid->oclass == CLASS_GENERAL) || (oid->oclass == data->oclass)) {
- if(data->index==data->max) {
- data->values=(char**)realloc(data->values,((data->max+1)*2)*sizeof(char*));
- data->max=(data->max+1)*2 - 1;
- };
- data->values[data->index]=oid->desc;
+ if ((oclass == CLASS_GENERAL) || (oclass == data->oclass))
+ {
+ if (data->index==data->max)
+ {
+ data->values=(const char**)
+ realloc(data->values,((data->max+1)*2)*sizeof(char*));
+ data->max=(data->max+1)*2 - 1;
+ }
+ data->values[data->index] = name;
++data->index;
}
}
-char** build_list_for_oclass(oid_class oclass)
+const char** build_list_for_oclass(oid_class oclass)
{
oid_callback_t data;
- data.values = (char **) calloc(10,sizeof(char*));
+ data.values = (const char **) calloc(10,sizeof(char*));
data.index = 0;
data.max = 9;
data.oclass = oclass;
-
- oid_trav(oid_loader, &data);
-
+
+ yaz_oid_trav(yaz_oid_std(), oid_loader, &data);
+
data.values[data.index]=0;
return data.values;
}
char* complete_querytype(const char *text, int state)
{
- char* querytypes[] = {"ccl2rpn","prefix","cclrpn","ccl","cql", 0};
+ static const char* querytypes[] = {"ccl2rpn","prefix","cclrpn","ccl","cql", 0};
return complete_from_list(querytypes,text,state);
}
char* complete_auto_reconnect(const char *text, int state)
{
- char* querytypes[] = {"on","off",0};
+ static const char* querytypes[] = {"on","off",0};
return complete_from_list(querytypes,text,state);
}
char* complete_format(const char* text, int state)
{
- char** list=build_list_for_oclass(CLASS_RECSYN);
+ const char** list = build_list_for_oclass(CLASS_RECSYN);
char* res=complete_from_list(list,text,state);
free(list);
char* complete_schema(const char* text, int state)
{
- char** list = build_list_for_oclass(CLASS_SCHEMA);
+ const char** list = build_list_for_oclass(CLASS_SCHEMA);
char* res = complete_from_list(list,text,state);
free(list);
char* complete_attributeset(const char* text, int state)
{
- char** list = build_list_for_oclass(CLASS_ATTSET);
+ const char** list = build_list_for_oclass(CLASS_ATTSET);
char* res = complete_from_list(list,text,state);
free(list);
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: tabcomplete.h,v 1.8 2007-01-03 08:42:13 adam Exp $
+ * $Id: tabcomplete.h,v 1.9 2007-04-12 13:52:57 adam Exp $
*/
/*
char* complete_schema(const char* text, int state);
char* complete_attributeset(const char* text, int state);
char* complete_auto_reconnect(const char *text, int state);
-char *complete_from_list(char* completions[], const char *text, int state);
+char *complete_from_list(const char** completions,
+ const char *text, int state);
/*
* Local variables:
* c-basic-offset: 4
-## $Id: Makefile.am,v 1.40 2007-04-10 14:42:31 adam Exp $
+## $Id: Makefile.am,v 1.41 2007-04-12 13:52:57 adam Exp $
pkginclude_HEADERS= backend.h ccl.h ccl_xml.h cql.h comstack.h \
diagbib1.h diagsrw.h diagsru_update.h sortspec.h log.h logrpn.h marcdisp.h \
nmem.h nmem_xml.h odr.h \
- oid.h options.h otherinfo.h pquery.h prt-ext.h querytowrbuf.h \
+ options.h otherinfo.h pquery.h prt-ext.h querytowrbuf.h \
readconf.h record_conv.h retrieval.h statserv.h \
tcpip.h test.h timing.h unix.h tpath.h wrbuf.h xmalloc.h \
yaz-ccl.h yaz-iconv.h yaz-util.h yaz-version.h yconfig.h proto.h \
xmlquery.h libxml2_error.h xmltypes.h snprintf.h query-charset.h \
+ oid_db.h oid_util.h \
\
ill.h ill-core.h item-req.h z-accdes1.h z-accform1.h \
z-acckrb1.h z-core.h z-date.h z-diag1.h z-espec1.h z-estask.h z-exp.h \
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: backend.h,v 1.42 2007-01-16 14:12:37 adam Exp $ */
+/* $Id: backend.h,v 1.43 2007-04-12 13:52:57 adam Exp $ */
/**
* \file backend.h
#include <yaz/yconfig.h>
#include <yaz/proto.h>
#include <yaz/srw.h>
+#include <yaz/oid_db.h>
YAZ_BEGIN_CDECL
char *setname; /* set name */
int start;
int number; /* record number */
- oid_value format; /* One of the CLASS_RECSYN members */
+ int *format; /* format, transfer syntax (OID) */
Z_ReferenceId *referenceId;/* reference ID */
Z_RecordComposition *comp; /* Formatting instructions */
ODR stream; /* encoding stream - memory source if required */
char *setname; /* set name */
int number; /* record number */
Z_ReferenceId *referenceId;/* reference ID */
- oid_value request_format; /* One of the CLASS_RECSYN members */
- int *request_format_raw; /* same as above (raw OID) */
+ int *request_format; /* format, transfer syntax (OID) */
Z_RecordComposition *comp; /* Formatting instructions */
ODR stream; /* encoding stream - memory source if req */
ODR print; /* printing stream */
int len; /* length of record or -1 if structured */
char *record; /* record */
int last_in_set; /* is it? */
- oid_value output_format; /* format */
- int *output_format_raw; /* used instead of above if not-null */
+ int *output_format; /* response format/syntax (OID) */
int errcode; /* 0==success */
char *errstring; /* system error string or NULL */
int surrogate_flag; /* surrogate diagnostic */
typedef struct bend_scan_rr {
int num_bases; /* number of elements in databaselist */
char **basenames; /* databases to search */
- oid_value attributeset;
+ int *attributeset;
Z_ReferenceId *referenceId; /* reference ID */
Z_AttributesPlusTerm *term;
ODR stream; /* encoding stream - memory source if required */
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: comstack.h,v 1.26 2007-01-11 10:30:40 adam Exp $ */
+/* $Id: comstack.h,v 1.27 2007-04-12 13:52:57 adam Exp $ */
/**
* \file comstack.h
#define COMSTACK_H
#include <yaz/yconfig.h>
-#include <yaz/oid.h>
+#include <yaz/oid_util.h>
#include <yaz/xmalloc.h>
YAZ_BEGIN_CDECL
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: logrpn.h,v 1.14 2007-03-19 21:07:35 adam Exp $ */
+/* $Id: logrpn.h,v 1.15 2007-04-12 13:52:57 adam Exp $ */
/**
* \file logrpn.h
YAZ_EXPORT void log_rpn_query(Z_RPNQuery *rpn);
YAZ_EXPORT void log_rpn_query_level(int loglevel, Z_RPNQuery *rpn);
-YAZ_EXPORT void log_scan_term(Z_AttributesPlusTerm *zapt, oid_value ast);
+YAZ_EXPORT void log_scan_term(Z_AttributesPlusTerm *zapt, const int *ast);
YAZ_EXPORT void log_scan_term_level(int loglevel,
- Z_AttributesPlusTerm *zapt, oid_value ast);
-
+ Z_AttributesPlusTerm *zapt,
+ const int *ast);
YAZ_EXPORT void yaz_log_zquery(Z_Query *q);
YAZ_EXPORT void yaz_log_zquery_level(int loglevel, Z_Query *q);
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: odr.h,v 1.26 2007-03-19 21:08:13 adam Exp $ */
+/* $Id: odr.h,v 1.27 2007-04-12 13:52:57 adam Exp $ */
/**
* \file odr.h
#define odr_offset(o) ((o)->bp - (o)->buf)
#define odr_ok(o) (!(o)->error)
#define odr_getmem(o) ((o)->mem)
-#define odr_setmem(o, v) ((o)->mem = (v))
#define ODR_MAXNAME 256
YAZ_EXPORT void odr_begin(ODR o);
YAZ_EXPORT void odr_end(ODR o);
-YAZ_EXPORT Odr_oid *odr_oiddup(ODR odr, Odr_oid *o);
-YAZ_EXPORT Odr_oid *odr_oiddup_nmem(NMEM nmem, Odr_oid *o);
+YAZ_EXPORT Odr_oid *odr_oiddup(ODR odr, const Odr_oid *o);
+YAZ_EXPORT Odr_oid *odr_oiddup_nmem(NMEM nmem, const Odr_oid *o);
YAZ_EXPORT int odr_grow_block(ODR b, int min_bytes);
YAZ_EXPORT int odr_write(ODR o, unsigned char *buf, int bytes);
YAZ_EXPORT int odr_seek(ODR o, int whence, int offset);
+++ /dev/null
-/*
- * Copyright (c) 1995-2007, Index Data
- * All rights reserved.
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Index Data nor the names of its contributors
- * may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/* $Id: oid.h,v 1.30 2007-01-03 08:42:14 adam Exp $ */
-
-/**
- * \file oid.h
- * \brief Header for OID database
- *
- * More or less protocol-transparent OID database.
- * We could (and should?) extend this so that the user app can add new
- * entries to the list at initialization.
- */
-#ifndef OID_H
-#define OID_H
-
-#include <yaz/yconfig.h>
-
-YAZ_BEGIN_CDECL
-
-#define OID_SIZE 20
-#define OID_STR_MAX 256
-
-typedef enum oid_proto
-{
- PROTO_NOP=0,
- PROTO_Z3950,
- PROTO_SR,
- PROTO_GENERAL,
- PROTO_WAIS,
- PROTO_HTTP
-} oid_proto;
-
-typedef enum oid_class
-{
- CLASS_NOP=0,
- CLASS_APPCTX,
- CLASS_ABSYN,
- CLASS_ATTSET,
- CLASS_TRANSYN,
- CLASS_DIAGSET,
- CLASS_RECSYN,
- CLASS_RESFORM,
- CLASS_ACCFORM,
- CLASS_EXTSERV,
- CLASS_USERINFO,
- CLASS_ELEMSPEC,
- CLASS_VARSET,
- CLASS_SCHEMA,
- CLASS_TAGSET,
- CLASS_GENERAL,
- CLASS_NEGOT
-} oid_class;
-
-typedef enum oid_value
-{
- VAL_NOP=0,
- VAL_APDU,
- VAL_BER,
- VAL_BASIC_CTX,
- VAL_BIB1,
-
- VAL_EXP1,
- VAL_EXT1,
- VAL_CCL1,
- VAL_GILS,
- VAL_WAIS,
-/* 10 */
- VAL_STAS,
- VAL_COLLECT1,
- VAL_CIMI1,
- VAL_GEO,
- VAL_DIAG1,
-
- VAL_ISO2709,
- VAL_UNIMARC,
- VAL_INTERMARC,
- VAL_CCF,
- VAL_USMARC,
-/* 20 */
- VAL_UKMARC,
- VAL_NORMARC,
- VAL_LIBRISMARC,
- VAL_DANMARC,
- VAL_FINMARC,
-
- VAL_MAB,
- VAL_CANMARC,
- VAL_SBN,
- VAL_PICAMARC,
- VAL_AUSMARC,
-/* 30 */
- VAL_IBERMARC,
- VAL_CATMARC,
- VAL_MALMARC,
- VAL_EXPLAIN,
- VAL_SUTRS,
-
- VAL_OPAC,
- VAL_SUMMARY,
- VAL_GRS0,
- VAL_GRS1,
- VAL_EXTENDED,
-/* 40 */
- VAL_FRAGMENT,
- VAL_RESOURCE1,
- VAL_RESOURCE2,
- VAL_PROMPT1,
- VAL_DES1,
-
- VAL_KRB1,
- VAL_PRESSET,
- VAL_PQUERY,
- VAL_PCQUERY,
- VAL_ITEMORDER,
-
-/* 50 */
- VAL_DBUPDATE0,
- VAL_DBUPDATE,
- VAL_EXPORTSPEC,
- VAL_EXPORTINV,
- VAL_NONE,
-
- VAL_SETM,
- VAL_SETG,
- VAL_VAR1,
- VAL_ESPEC1,
- VAL_SOIF,
-
-/* 60 */
- VAL_SEARCHRES1,
- VAL_THESAURUS,
- VAL_CHARLANG,
- VAL_USERINFO1,
- VAL_MULTISRCH1,
-
- VAL_MULTISRCH2,
- VAL_DATETIME,
- VAL_SQLRS,
- VAL_PDF,
- VAL_POSTSCRIPT,
-
-/* 70 */
- VAL_HTML,
- VAL_TIFF,
- VAL_GIF,
- VAL_JPEG,
- VAL_PNG,
-
- VAL_MPEG,
- VAL_SGML,
- VAL_TIFFB,
- VAL_WAV,
- VAL_UPDATEES,
-
-/* 80 */
- VAL_TEXT_XML,
- VAL_APPLICATION_XML,
- VAL_UNIVERSE_REPORT,
- VAL_PROXY,
- VAL_COOKIE,
-
- VAL_CLIENT_IP,
- VAL_ISO_ILL_1,
- VAL_ZBIG,
- VAL_UTIL,
- VAL_XD1,
-
-/* 90 */
- VAL_ZTHES,
- VAL_FIN1,
- VAL_DAN1,
- VAL_DIAG_ES,
- VAL_DIAG_GENERAL,
-
- VAL_JPMARC,
- VAL_SWEMARC,
- VAL_SIGLEMARC,
- VAL_ISDSMARC,
- VAL_RUSMARC,
-
-/* 100 */
- VAL_ADMINSERVICE,
- VAL_HOLDINGS,
- VAL_HUNMARC,
- VAL_CHARNEG3,
- VAL_LIB1,
-
- VAL_VIRT,
- VAL_UCS2,
- VAL_UCS4,
- VAL_UTF16,
- VAL_UTF8,
-/* 110 */
-
- VAL_IDXPATH,
- VAL_BIB2,
- VAL_ZEEREX,
- VAL_CQL,
- VAL_DBUPDATE1,
-
- VAL_OCLCUI,
- VAL_ID_CHARSET,
- VAL_EXTLITE,
- VAL_NACSISCATP,
- VAL_FINMARC2000,
-/* 120 */
-
- VAL_MARC21FIN,
- VAL_CHARNEG4,
- VAL_XMLES,
-
-/* VAL_DYNAMIC must have highest value */
- VAL_DYNAMIC,
- VAL_MAX = VAL_DYNAMIC+30
-} oid_value;
-
-typedef struct oident
-{
- oid_proto proto;
- oid_class oclass;
- oid_value value;
- int oidsuffix[OID_SIZE];
- char *desc;
-} oident;
-
-YAZ_EXPORT int *oid_getoidbyent(struct oident *ent);
-YAZ_EXPORT int *oid_ent_to_oid(struct oident *ent, int *dst);
-YAZ_EXPORT struct oident *oid_getentbyoid(int *o);
-YAZ_EXPORT void oid_oidcpy(int *t, int *s);
-YAZ_EXPORT void oid_oidcat(int *t, int *s);
-YAZ_EXPORT int oid_oidcmp(int *o1, int *o2);
-YAZ_EXPORT int oid_oidlen(int *o);
-YAZ_EXPORT oid_value oid_getvalbyname(const char *name);
-YAZ_EXPORT void oid_setprivateoids(oident *list);
-YAZ_EXPORT struct oident *oid_addent (int *oid, enum oid_proto proto,
- enum oid_class oclass,
- const char *desc, int value);
-
-YAZ_EXPORT void oid_trav (void (*func)(struct oident *oidinfo, void *vp),
- void *vp);
-
-YAZ_EXPORT void oid_init(void);
-YAZ_EXPORT void oid_exit(void);
-YAZ_EXPORT int *oid_name_to_oid(oid_class oclass, const char *name, int *oid);
-YAZ_EXPORT char *oid_to_dotstring(const int *oid, char *oidbuf);
-YAZ_EXPORT char *oid_name_to_dotstring(oid_class oclass, const char *name,
- char *oidbuf);
-
-YAZ_END_CDECL
-
-#endif
-/*
- * Local variables:
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- * vim: shiftwidth=4 tabstop=8 expandtab
- */
-
--- /dev/null
+/*
+ * Copyright (c) 1995-2007, Index Data
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Index Data nor the names of its contributors
+ * may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/* $Id: oid_db.h,v 1.1 2007-04-12 13:52:57 adam Exp $ */
+
+/**
+ * \file oid_db.h
+ * \brief Header for OID database
+ */
+#ifndef OID_DB_H
+#define OID_DB_H
+
+#include <yaz/yconfig.h>
+#include <yaz/oid_util.h>
+#include <yaz/odr.h>
+
+YAZ_BEGIN_CDECL
+
+/** \brief OID database */
+typedef struct yaz_oid_entry *yaz_oid_db_t;
+
+/** \brief returns standard OID database
+ \retval OID database handle
+*/
+YAZ_EXPORT
+yaz_oid_db_t yaz_oid_std(void);
+
+/** \brief maps named OID string to raw OID by database lookup
+ \param oid_db OID database
+ \param oclass class of string (enum oid_class)
+ \param name OID name
+ \returns raw OID or NULL if name is unknown (bad)
+
+ This function only maps known names in the database provided.
+ Use yaz_string_to_oid_nmem or yaz_string_to_oid_odr to map
+ any named OID in dot-notation (1.2.8).
+*/
+YAZ_EXPORT
+const int *yaz_string_to_oid(yaz_oid_db_t oid_db,
+ int oclass, const char *name);
+
+
+/** \brief creates NMEM malloc'ed OID from string
+ \param oid_db OID database
+ \param oclass class of string (enum oid_class)
+ \param name OID name
+ \param nmem memory for returned OID
+ \returns raw OID or NULL if name is unknown (bad)
+*/
+YAZ_EXPORT
+int *yaz_string_to_oid_nmem(yaz_oid_db_t oid_db,
+ int oclass, const char *name, NMEM nmem);
+
+/** \brief creates ODR malloc'ed OID from string
+ \param oid_db OID database
+ \param oclass class of string (enum oid_class)
+ \param name OID name
+ \param odr memory for returned OID
+ \returns raw OID or NULL if name is unknown (bad)
+*/
+YAZ_EXPORT
+int *yaz_string_to_oid_odr(yaz_oid_db_t oid_db,
+ int oclass, const char *name, ODR odr);
+
+/** \brief maps raw OID to string
+ \param oid_db OID database
+ \param oid raw OID
+ \param oclass holds OID class if found (output parameter)
+ \returns OID name or NULL if not found in database
+*/
+YAZ_EXPORT
+const char *yaz_oid_to_string(yaz_oid_db_t oid_db,
+ const int *oid, int *oclass);
+
+
+/** \brief maps any OID to string (named or dot-notation)
+ \param oid raw OID
+ \param oclass holds OID class if found (output parameter)
+ \param buf string buffer for result (must be of size OID_STR_MAX)
+ \returns OID string (named or dot notatition)
+*/
+YAZ_EXPORT
+const char *yaz_oid_to_string_buf(const int *oid, int *oclass, char *buf);
+
+/** \brief traverses OIDs in a database
+ \param oid_db OID database
+ \param func function to be called for each OID
+ \param client_data data to be passed to func (custom defined)
+*/
+YAZ_EXPORT void yaz_oid_trav(yaz_oid_db_t oid_db,
+ void (*func)(const int *oid,
+ int oclass, const char *name,
+ void *client_data),
+ void *client_data);
+
+/** \brief checks if OID refers to MARC transfer syntax
+ \param oid raw OID
+ \retval 1 OID is a MARC type
+ \retval 0 OID is not a MARC type
+*/
+YAZ_EXPORT
+int yaz_oid_is_iso2709(const int *oid);
+
+#define OID_STR_BIB1 "Bib-1"
+#define OID_STR_DIAG1 "Diag-1"
+#define OID_STR_USMARC "USmarc"
+#define OID_STR_XML "XML"
+#define OID_STR_SOIF "SOIF"
+#define OID_STR_APPLICATION_XML "application-XML"
+#define OID_STR_HTML "html"
+#define OID_STR_GRS1 "GRS-1"
+#define OID_STR_POSTSCRIPT "postscript"
+#define OID_STR_SUTRS "SUTRS"
+#define OID_STR_OPAC "OPAC"
+#define OID_STR_EXPLAIN "Explain"
+#define OID_STR_SUMMARY "Summary"
+#define OID_STR_EXTENDED "Extended"
+#define OID_STR_COOKIE "Cookie"
+#define OID_STR_PROXY "Proxy"
+#define OID_STR_CLIENT_IP "Client-IP"
+#define OID_STR_ILL_1 "ISOILL-1"
+#define OID_STR_ADMIN "Admin"
+#define OID_STR_XMLES "XML-ES"
+#define OID_STR_EXT_UPDATE "DB. Update"
+#define OID_STR_ITEMORDER "Item order"
+#define OID_STR_USERINFO_1 "UserInfo-1"
+#define OID_STR_ID_CHARSET "ID-Charset"
+#define OID_STR_CHARNEG_3 "CharSetandLanguageNegotiation-3"
+#define OID_STR_CHARNEG_4 "CharSetandLanguageNegotiation-4"
+
+YAZ_END_CDECL
+
+#endif
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+
--- /dev/null
+/*
+ * Copyright (c) 1995-2007, Index Data
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Index Data nor the names of its contributors
+ * may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/* $Id: oid_util.h,v 1.1 2007-04-12 13:52:57 adam Exp $ */
+
+/**
+ * \file oid_util.h
+ * \brief Header for OID database
+ *
+ * More or less protocol-transparent OID database.
+ * We could (and should?) extend this so that the user app can add new
+ * entries to the list at initialization.
+ */
+#ifndef OID_UTIL_H
+#define OID_UTIL_H
+
+#include <yaz/yconfig.h>
+
+YAZ_BEGIN_CDECL
+
+#define OID_SIZE 20
+#define OID_STR_MAX 256
+
+typedef enum oid_proto
+{
+ PROTO_NOP=0,
+ PROTO_Z3950,
+ PROTO_SR,
+ PROTO_GENERAL,
+ PROTO_WAIS,
+ PROTO_HTTP
+} oid_proto;
+
+typedef enum oid_class
+{
+ CLASS_NOP=0,
+ CLASS_APPCTX,
+ CLASS_ABSYN,
+ CLASS_ATTSET,
+ CLASS_TRANSYN,
+ CLASS_DIAGSET,
+ CLASS_RECSYN,
+ CLASS_RESFORM,
+ CLASS_ACCFORM,
+ CLASS_EXTSERV,
+ CLASS_USERINFO,
+ CLASS_ELEMSPEC,
+ CLASS_VARSET,
+ CLASS_SCHEMA,
+ CLASS_TAGSET,
+ CLASS_GENERAL,
+ CLASS_NEGOT
+} oid_class;
+
+YAZ_EXPORT void oid_oidcpy(int *t, const int *s);
+YAZ_EXPORT void oid_oidcat(int *t, const int *s);
+YAZ_EXPORT int oid_oidcmp(const int *o1, const int *o2);
+YAZ_EXPORT int oid_oidlen(const int *o);
+YAZ_EXPORT char *oid_to_dotstring(const int *oid, char *oidbuf);
+YAZ_END_CDECL
+
+#endif
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: otherinfo.h,v 1.8 2007-01-03 08:42:14 adam Exp $ */
+/* $Id: otherinfo.h,v 1.9 2007-04-12 13:52:57 adam Exp $ */
/**
* \file otherinfo.h
YAZ_EXPORT void yaz_oi_APDU(Z_APDU *apdu, Z_OtherInformation ***oip);
YAZ_EXPORT Z_OtherInformationUnit *yaz_oi_update (
Z_OtherInformation **otherInformationP, ODR odr,
- int *oid, int categoryValue, int delete_flag);
+ const int *oid, int categoryValue, int delete_flag);
YAZ_EXPORT void yaz_oi_set_string_oid (
Z_OtherInformation **otherInformation, ODR odr,
- int *oid, int categoryValue,
+ const int *oid, int categoryValue,
const char *str);
+#ifndef NO_OID
YAZ_EXPORT void yaz_oi_set_string_oidval (
Z_OtherInformation **otherInformation, ODR odr,
int oidval, int categoryValue,
const char *str);
+#endif
+
YAZ_EXPORT char *yaz_oi_get_string_oid (
Z_OtherInformation **otherInformation,
- int *oid, int categoryValue, int delete_flag);
+ const int *oid, int categoryValue, int delete_flag);
+#ifndef NO_OID
YAZ_EXPORT char *yaz_oi_get_string_oidval(
Z_OtherInformation **otherInformation,
int oidval, int categoryValue, int delete_flag);
+#endif
YAZ_END_CDECL
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: pquery.h,v 1.10 2007-01-03 08:42:14 adam Exp $ */
+/* $Id: pquery.h,v 1.11 2007-04-12 13:52:57 adam Exp $ */
/**
* \file pquery.h
typedef struct yaz_pqf_parser *YAZ_PQF_Parser;
-YAZ_EXPORT Z_RPNQuery *p_query_rpn (ODR o, oid_proto proto, const char *qbuf);
+YAZ_EXPORT Z_RPNQuery *p_query_rpn(ODR o, const char *qbuf);
-YAZ_EXPORT Z_AttributesPlusTerm *p_query_scan (ODR o, oid_proto proto,
- Odr_oid **attributeSetP, const char *qbuf);
-YAZ_EXPORT int p_query_attset (const char *arg);
+YAZ_EXPORT Z_AttributesPlusTerm *p_query_scan(ODR o, oid_proto proto,
+ Odr_oid **attributeSetP, const char *qbuf);
+YAZ_EXPORT YAZ_PQF_Parser yaz_pqf_create(void);
+YAZ_EXPORT Z_RPNQuery *yaz_pqf_parse(YAZ_PQF_Parser p, ODR o,
+ const char *qbuf);
+YAZ_EXPORT Z_AttributesPlusTerm *yaz_pqf_scan(YAZ_PQF_Parser p, ODR o,
+ Odr_oid **attributeSetId,
+ const char *qbuf);
+YAZ_EXPORT void yaz_pqf_destroy(YAZ_PQF_Parser p);
-YAZ_EXPORT YAZ_PQF_Parser yaz_pqf_create (void);
-YAZ_EXPORT Z_RPNQuery *yaz_pqf_parse (YAZ_PQF_Parser p, ODR o,
- const char *qbuf);
-YAZ_EXPORT Z_AttributesPlusTerm *yaz_pqf_scan (YAZ_PQF_Parser p, ODR o,
- Odr_oid **attributeSetId,
- const char *qbuf);
-YAZ_EXPORT void yaz_pqf_destroy (YAZ_PQF_Parser p);
-
-YAZ_EXPORT int yaz_pqf_error (YAZ_PQF_Parser p, const char **msg, size_t *off);
+YAZ_EXPORT int yaz_pqf_error(YAZ_PQF_Parser p, const char **msg, size_t *off);
/* no error */
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: proto.h,v 1.26 2007-01-03 08:42:14 adam Exp $ */
+/* $Id: proto.h,v 1.27 2007-04-12 13:52:57 adam Exp $ */
/**
* \file proto.h
#include <yaz/zes-update0.h>
#include <yaz/z-charneg.h>
#include <yaz/z-mterm2.h>
-#include <yaz/oid.h>
#include <yaz/wrbuf.h>
#include <yaz/zgdu.h>
#include <yaz/z-oclcui.h>
YAZ_EXPORT Z_APDU *zget_APDU(ODR o, int which);
YAZ_EXPORT Z_Close *zget_Close (ODR o);
-YAZ_EXPORT Odr_oid *yaz_oidval_to_z3950oid (ODR o, int oid_class,
- int oid_value);
-YAZ_EXPORT Odr_oid *yaz_str_to_z3950oid (ODR o, int oid_class,
- const char *str);
-YAZ_EXPORT const char *yaz_z3950oid_to_str (Odr_oid *oid, int *oid_class);
-
-YAZ_EXPORT const char* yaz_z3950_oid_value_to_str(oid_value ov, oid_class oc);
/** \brief Performs "pretty" display of GRS-1 record to WRBUF */
YAZ_EXPORT void yaz_display_grs1(WRBUF wrbuf, Z_GenericRecord *r, int flags);
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: prt-ext.h,v 1.15 2007-01-03 08:42:14 adam Exp $ */
+/* $Id: prt-ext.h,v 1.16 2007-04-12 13:52:57 adam Exp $ */
/**
* \file prt-ext.h
#define PRT_EXT_H
#include <yaz/yconfig.h>
-#include <yaz/oid.h>
+#include <yaz/oid_util.h>
YAZ_BEGIN_CDECL
*/
typedef struct Z_ext_typeent
{
+#if 0
oid_value dref; /* the direct-reference OID value. */
+#else
+ int oid[OID_SIZE]; /* the direct-reference OID */
+#endif
int what; /* discriminator value for the external CHOICE */
Odr_fun fun; /* decoder function */
} Z_ext_typeent;
/** \brief codec for BER EXTERNAL */
YAZ_EXPORT int z_External(ODR o, Z_External **p, int opt, const char *name);
/** \brief returns type information for OID (NULL if not known) */
-YAZ_EXPORT Z_ext_typeent *z_ext_getentbyref(oid_value val);
+YAZ_EXPORT Z_ext_typeent *z_ext_getentbyref(const int *oid);
/** \brief encodes EXTERNAL record based on OID (NULL if knot known) */
-YAZ_EXPORT Z_External *z_ext_record(ODR o, int format, const char *buf,
- int len);
-
+YAZ_EXPORT Z_External *z_ext_record_oid(ODR o, const int *oid,
+ const char *buf, int len);
YAZ_END_CDECL
#endif
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: query-charset.h,v 1.1 2007-04-10 14:42:31 adam Exp $ */
+/* $Id: query-charset.h,v 1.2 2007-04-12 13:52:57 adam Exp $ */
/**
- * \file querytowrbuf.h
+ * \file query-charset.h
* \brief Query to WRBUF (to strings)
*/
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: querytowrbuf.h,v 1.5 2007-03-19 21:07:35 adam Exp $ */
+/* $Id: querytowrbuf.h,v 1.6 2007-04-12 13:52:57 adam Exp $ */
/**
* \file querytowrbuf.h
* \brief Query to WRBUF (to strings)
YAZ_EXPORT void yaz_query_to_wrbuf(WRBUF b, const Z_Query *q);
YAZ_EXPORT void yaz_scan_to_wrbuf(WRBUF b, const Z_AttributesPlusTerm *zapt,
- oid_value ast);
+ const int *attribute_set);
YAZ_EXPORT void yaz_rpnquery_to_wrbuf(WRBUF b, const Z_RPNQuery *rpn);
YAZ_EXPORT void wrbuf_diags(WRBUF b, int num_diagnostics,Z_DiagRec **diags);
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: tcpip.h,v 1.11 2007-01-03 08:42:14 adam Exp $ */
+/* $Id: tcpip.h,v 1.12 2007-04-12 13:52:57 adam Exp $ */
/**
* \file tcpip.h
#define TCPIP_H
#include <yaz/comstack.h>
-#include <yaz/oid.h>
YAZ_BEGIN_CDECL
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $Id: unix.h,v 1.8 2007-01-03 08:42:14 adam Exp $ */
+/* $Id: unix.h,v 1.9 2007-04-12 13:52:57 adam Exp $ */
/**
* \file unix.h
#ifndef WIN32
#include <yaz/comstack.h>
-#include <yaz/oid.h>
YAZ_BEGIN_CDECL
## This file is part of the YAZ toolkit.
## Copyright (C) 1995-2007, Index Data, All rights reserved.
-## $Id: Makefile.am,v 1.55 2007-03-21 19:47:28 adam Exp $
+## $Id: Makefile.am,v 1.56 2007-04-12 13:52:57 adam Exp $
YAZ_VERSION_INFO=3:0:0
libyaz_la_SOURCES=version.c options.c log.c \
marcdisp.c marc_read_xml.c marc_read_iso2709.c marc_read_line.c \
- oid.c wrbuf.c \
+ wrbuf.c oid_db.c \
nmemsdup.c xmalloc.c readconf.c tpath.c nmem.c matchstr.c atoin.c \
siconv.c marc8.c marc8r.c \
odr_bool.c ber_bool.c ber_len.c ber_tag.c odr_util.c \
ill-core.c item-req.c ill-get.c \
zget.c yaz-ccl.c diag-entry.c diag-entry.h diagbib1.c diagsrw.c \
diagsru_update.c logrpn.c \
- otherinfo.c pquery.c sortspec.c z3950oid.c charneg.c initopt.c \
+ otherinfo.c pquery.c sortspec.c charneg.c initopt.c \
zoom-c.c zoom-socket.c zoom-opt.c zoom-p.h \
grs1disp.c zgdu.c soap.c srw.c srwutil.c \
opacdisp.c cclfind.c ccltoken.c cclerrms.c cclqual.c cclptree.c \
eventl.c seshigh.c statserv.c requestq.c tcpdchk.c \
eventl.h service.c service.h session.h test.c timing.c \
xmlquery.c http.c \
- mime.c mime.h \
+ mime.c mime.h oid_util.c \
record_conv.c retrieval.c elementset.c snprintf.c query-charset.c
libyaz_la_LDFLAGS=-version-info $(YAZ_VERSION_INFO)
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: charneg.c,v 1.7 2007-01-03 08:42:15 adam Exp $
+ * $Id: charneg.c,v 1.8 2007-04-12 13:52:57 adam Exp $
*/
/**
#include <yaz/z-charneg.h>
#include <yaz/charneg.h>
#include <yaz/yaz-util.h>
+#include <yaz/oid_db.h>
-static Z_External* z_ext_record2(ODR o, int oid_class, int oid_value,
- const char *buf)
+static Z_External* z_ext_record2(ODR o, const char *buf)
{
Z_External *p;
- oident oid;
int len = strlen(buf);
if (!(p = (Z_External *)odr_malloc(o, sizeof(*p)))) return 0;
p->descriptor = 0;
p->indirect_reference = 0;
- oid.proto = PROTO_Z3950;
- oid.oclass = (enum oid_class) oid_class;
- oid.value = (enum oid_value) oid_value;
- p->direct_reference = odr_oiddup(o, oid_getoidbyent(&oid));
+ p->direct_reference = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_NEGOT,
+ OID_STR_ID_CHARSET,
+ o);
p->which = Z_External_octet;
if (!(p->u.octet_aligned = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct)))) {
p0->u.zprivate = pc;
pc->which = Z_PrivateCharacterSet_externallySpecified;
- pc->u.externallySpecified =
- z_ext_record2(o, CLASS_NEGOT, VAL_ID_CHARSET, charset);
+ pc->u.externallySpecified = z_ext_record2(o, charset);
}
return p0;
}
int selected)
{
Z_External *p = (Z_External *)odr_malloc(o, sizeof(*p));
- oident oid;
p->descriptor = 0;
p->indirect_reference = 0;
- oid.proto = PROTO_Z3950;
- oid.oclass = CLASS_NEGOT;
- oid.value = VAL_CHARNEG3;
- p->direct_reference = odr_oiddup(o, oid_getoidbyent(&oid));
+ p->direct_reference = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_NEGOT,
+ OID_STR_CHARNEG_3,
+ o);
p->which = Z_External_charSetandLanguageNegotiation;
p->u.charNeg3 = z_get_CharSetandLanguageNegotiation(o);
int langs_count = 0;
if (charset_list)
- nmem_strsplit(o->mem, delim, charset_list,
+ nmem_strsplit(odr_getmem(o), delim, charset_list,
&charsets_addresses, &charsets_count);
if (lang_list)
- nmem_strsplit(o->mem, delim, lang_list,
+ nmem_strsplit(odr_getmem(o), delim, lang_list,
&langs_addresses, &langs_count);
return yaz_set_proposal_charneg(o,
(const char **) charsets_addresses,
pc->which = Z_PrivateCharacterSet_externallySpecified;
pc->u.externallySpecified =
- z_ext_record2(o, CLASS_NEGOT, VAL_ID_CHARSET, charset);
+ z_ext_record2(o, charset);
}
p->recordsInSelectedCharSets = (bool_t *)odr_malloc(o, sizeof(bool_t));
*p->recordsInSelectedCharSets = (selected) ? 1:0;
const char *lang, int selected)
{
Z_External *p = (Z_External *)odr_malloc(o, sizeof(*p));
- oident oid;
p->descriptor = 0;
p->indirect_reference = 0;
- oid.proto = PROTO_Z3950;
- oid.oclass = CLASS_NEGOT;
- oid.value = VAL_CHARNEG3;
- p->direct_reference = odr_oiddup(o, oid_getoidbyent(&oid));
+ p->direct_reference = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_NEGOT,
+ OID_STR_CHARNEG_3,
+ o);
p->which = Z_External_charSetandLanguageNegotiation;
p->u.charNeg3 = z_get_CharSetandLanguageNegotiation(o);
Z_External *pext;
if ((p->list[i]->which == Z_OtherInfo_externallyDefinedInfo) &&
(pext = p->list[i]->information.externallyDefinedInfo)) {
-
- oident *ent = oid_getentbyoid(pext->direct_reference);
-
- if (ent && ent->value == VAL_CHARNEG3
- && ent->oclass == CLASS_NEGOT
- && pext->which == Z_External_charSetandLanguageNegotiation)
+
+ int oclass;
+ const char *name = yaz_oid_to_string(yaz_oid_std(),
+ pext->direct_reference,
+ &oclass);
+
+ if (oclass == CLASS_NEGOT
+ && name && !strcmp(name, OID_STR_CHARNEG_3)
+ && pext->which == Z_External_charSetandLanguageNegotiation)
{
return pext->u.charNeg3;
}
for (i = 0; i < (*p)->num_elements; i++) {
Z_External *pext;
if (((*p)->list[i]->which == Z_OtherInfo_externallyDefinedInfo) &&
- (pext = (*p)->list[i]->information.externallyDefinedInfo)) {
-
- oident *ent = oid_getentbyoid(pext->direct_reference);
-
- if (ent && ent->value == VAL_CHARNEG3
- && ent->oclass == CLASS_NEGOT
+ (pext = (*p)->list[i]->information.externallyDefinedInfo))
+ {
+ int oclass;
+ const char *name = yaz_oid_to_string(yaz_oid_std(),
+ pext->direct_reference,
+ &oclass);
+
+ if (oclass == CLASS_NEGOT
+ && name && !strcmp(name, OID_STR_CHARNEG_3)
&& pext->which == Z_External_charSetandLanguageNegotiation)
{
- --((*p)->num_elements);
- if ((*p)->num_elements == 0)
+ if ((*p)->num_elements <= 1)
*p = 0;
else
{
+ --((*p)->num_elements);
for(; i < (*p)->num_elements; i++)
(*p)->list[i] = (*p)->list[i+1];
}
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: grs1disp.c,v 1.6 2007-03-12 16:16:49 adam Exp $
+ * $Id: grs1disp.c,v 1.7 2007-04-12 13:52:57 adam Exp $
*/
/**
#include <ctype.h>
#include <yaz/proto.h>
+#include <yaz/oid_db.h>
static void display_variant(WRBUF w, Z_Variant *v, int level)
{
else if (t->content->which == Z_ElementData_oid)
{
int *ip = t->content->u.oid;
- oident *oent;
-
- if ((oent = oid_getentbyoid(t->content->u.oid)))
- wrbuf_printf(w, "OID: %s\n", oent->desc);
- else
+
+ if (ip)
{
- wrbuf_printf(w, "{");
- while (ip && *ip >= 0)
- wrbuf_printf(w, " %d", *(ip++));
- wrbuf_printf(w, " }\n");
+ char oid_name_str[OID_STR_MAX];
+ int oclass;
+ const char *oid_name
+ = yaz_oid_to_string_buf(ip, &oclass, oid_name_str);
+
+ if (oid_name)
+ wrbuf_printf(w, "OID: %s\n", oid_name);
}
}
else if (t->content->which == Z_ElementData_noDataRequested)
* Copyright (C) 1995-2007, Index Data ApS
* All rights reserved.
*
- * $Id: logrpn.c,v 1.15 2007-01-03 08:42:15 adam Exp $
+ * $Id: logrpn.c,v 1.16 2007-04-12 13:52:57 adam Exp $
*/
/**
#include <yaz/log.h>
#include <yaz/logrpn.h>
+#include <yaz/oid_db.h>
static const char *relToStr(int v)
{
return str;
}
-static void attrStr (int type, int value, enum oid_value ast, char *str)
+static void attrStr (int type, int value, char *str)
{
const char *rstr;
*str = '\0';
- switch (ast)
+ switch (type)
{
- case VAL_BIB1:
- case VAL_EXP1:
- case VAL_GILS:
- switch (type)
+ case 1:
+ sprintf (str, "use");
+ break;
+ case 2:
+ rstr = relToStr(value);
+ if (rstr)
+ sprintf(str, "relation=%s", rstr);
+ else
+ sprintf(str, "relation=%d", value);
+ break;
+ case 3:
+ switch (value)
{
case 1:
- sprintf (str, "use");
+ sprintf(str, "position=First in field");
break;
case 2:
- rstr = relToStr(value);
- if (rstr)
- sprintf(str, "relation=%s", rstr);
- else
- sprintf(str, "relation=%d", value);
+ sprintf(str, "position=First in any subfield");
break;
case 3:
- switch (value)
- {
- case 1:
- sprintf(str, "position=First in field");
- break;
- case 2:
- sprintf(str, "position=First in any subfield");
- break;
- case 3:
- sprintf(str, "position=Any position in field");
- break;
- default:
- sprintf(str, "position");
- }
+ sprintf(str, "position=Any position in field");
+ break;
+ default:
+ sprintf(str, "position");
+ }
+ break;
+ case 4:
+ switch (value)
+ {
+ case 1:
+ sprintf(str, "structure=Phrase");
+ break;
+ case 2:
+ sprintf(str, "structure=Word");
+ break;
+ case 3:
+ sprintf(str, "structure=Key");
break;
case 4:
- switch (value)
- {
- case 1:
- sprintf(str, "structure=Phrase");
- break;
- case 2:
- sprintf(str, "structure=Word");
- break;
- case 3:
- sprintf(str, "structure=Key");
- break;
- case 4:
- sprintf(str, "structure=Year");
- break;
- case 5:
- sprintf(str, "structure=Date");
- break;
- case 6:
- sprintf(str, "structure=Word list");
- break;
- case 100:
- sprintf(str, "structure=Date (un)");
- break;
- case 101:
- sprintf(str, "structure=Name (norm)");
- break;
- case 102:
- sprintf(str, "structure=Name (un)");
- break;
- case 103:
- sprintf(str, "structure=Structure");
- break;
- case 104:
- sprintf(str, "structure=urx");
- break;
- case 105:
- sprintf(str, "structure=free-form-text");
- break;
- case 106:
- sprintf(str, "structure=document-text");
- break;
- case 107:
- sprintf(str, "structure=local-number");
- break;
- case 108:
- sprintf(str, "structure=string");
- break;
- case 109:
- sprintf(str, "structure=numeric string");
- break;
- default:
- sprintf(str, "structure");
- }
+ sprintf(str, "structure=Year");
break;
case 5:
- switch (value)
- {
- case 1:
- sprintf(str, "truncation=Right");
- break;
- case 2:
- sprintf(str, "truncation=Left");
- break;
- case 3:
- sprintf(str, "truncation=Left&right");
- break;
- case 100:
- sprintf(str, "truncation=Do not truncate");
- break;
- case 101:
- sprintf(str, "truncation=Process #");
- break;
- case 102:
- sprintf(str, "truncation=re-1");
- break;
- case 103:
- sprintf(str, "truncation=re-2");
- break;
- case 104:
- sprintf(str, "truncation=CCL");
- break;
- default:
- sprintf(str, "truncation");
- }
+ sprintf(str, "structure=Date");
break;
case 6:
- switch(value)
- {
- case 1:
- sprintf(str, "completeness=Incomplete subfield");
- break;
- case 2:
- sprintf(str, "completeness=Complete subfield");
- break;
- case 3:
- sprintf(str, "completeness=Complete field");
- break;
- default:
- sprintf(str, "completeness");
- }
+ sprintf(str, "structure=Word list");
+ break;
+ case 100:
+ sprintf(str, "structure=Date (un)");
+ break;
+ case 101:
+ sprintf(str, "structure=Name (norm)");
+ break;
+ case 102:
+ sprintf(str, "structure=Name (un)");
+ break;
+ case 103:
+ sprintf(str, "structure=Structure");
+ break;
+ case 104:
+ sprintf(str, "structure=urx");
+ break;
+ case 105:
+ sprintf(str, "structure=free-form-text");
break;
+ case 106:
+ sprintf(str, "structure=document-text");
+ break;
+ case 107:
+ sprintf(str, "structure=local-number");
+ break;
+ case 108:
+ sprintf(str, "structure=string");
+ break;
+ case 109:
+ sprintf(str, "structure=numeric string");
+ break;
+ default:
+ sprintf(str, "structure");
}
break;
- default:
+ case 5:
+ switch (value)
+ {
+ case 1:
+ sprintf(str, "truncation=Right");
+ break;
+ case 2:
+ sprintf(str, "truncation=Left");
+ break;
+ case 3:
+ sprintf(str, "truncation=Left&right");
+ break;
+ case 100:
+ sprintf(str, "truncation=Do not truncate");
+ break;
+ case 101:
+ sprintf(str, "truncation=Process #");
+ break;
+ case 102:
+ sprintf(str, "truncation=re-1");
+ break;
+ case 103:
+ sprintf(str, "truncation=re-2");
+ break;
+ case 104:
+ sprintf(str, "truncation=CCL");
+ break;
+ default:
+ sprintf(str, "truncation");
+ }
+ break;
+ case 6:
+ switch(value)
+ {
+ case 1:
+ sprintf(str, "completeness=Incomplete subfield");
+ break;
+ case 2:
+ sprintf(str, "completeness=Complete subfield");
+ break;
+ case 3:
+ sprintf(str, "completeness=Complete field");
+ break;
+ default:
+ sprintf(str, "completeness");
+ }
break;
}
if (*str)
/*
* zlog_attributes: print attributes of term
*/
-static void zlog_attributes (Z_AttributesPlusTerm *t, int depth,
- enum oid_value ast, int loglevel)
+static void zlog_attributes(Z_AttributesPlusTerm *t, int depth,
+ const int *ast, int loglevel)
{
int of, i;
char str[80];
for (of = 0; of < num_attributes; of++)
{
- const char *attset_name = "";
+ char attset_name_buf[OID_STR_MAX];
+ const char *attset_name = 0;
Z_AttributeElement *element;
element = t->attributes->attributes[of];
if (element->attributeSet)
{
- oident *attrset;
- attrset = oid_getentbyoid (element->attributeSet);
- attset_name = attrset->desc;
+ attset_name = yaz_oid_to_string_buf(element->attributeSet,
+ 0, attset_name_buf);
}
+ if (!attset_name)
+ attset_name = "";
switch (element->which)
{
case Z_AttributeValue_numeric:
attrStr (*element->attributeType,
- *element->value.numeric, ast, str);
+ *element->value.numeric, str);
yaz_log (loglevel, "%*.0s%s %s", depth, "", attset_name, str);
break;
case Z_AttributeValue_complex:
}
}
-static void zlog_structure (Z_RPNStructure *zs, int depth,
- enum oid_value ast, int loglevel)
+static void zlog_structure(Z_RPNStructure *zs, int depth,
+ const int *ast, int loglevel)
{
if (zs->which == Z_RPNStructure_complex)
{
default:
yaz_log (loglevel, "%*.0s term (not general)", depth, "");
}
- zlog_attributes (zapt, depth+2, ast, loglevel);
+ zlog_attributes(zapt, depth+2, ast, loglevel);
}
else if (zs->u.simple->which == Z_Operand_resultSetId)
{
void log_rpn_query_level (int loglevel, Z_RPNQuery *rpn)
{
- oident *attrset;
- enum oid_value ast;
-
- attrset = oid_getentbyoid (rpn->attributeSetId);
- if (attrset)
- {
- ast = attrset->value;
- yaz_log (loglevel, "RPN query. Type: %s", attrset->desc);
- }
- else
- {
- ast = VAL_NONE;
- yaz_log (loglevel, "RPN query. Unknown type");
- }
- zlog_structure (rpn->RPNStructure, 0, ast, loglevel);
+ zlog_structure(rpn->RPNStructure, 0, rpn->attributeSetId, loglevel);
}
void log_rpn_query(Z_RPNQuery *rpn)
}
void log_scan_term_level(int loglevel,
- Z_AttributesPlusTerm *zapt, oid_value ast)
+ Z_AttributesPlusTerm *zapt, const int *ast)
{
int depth = 0;
if (!loglevel)
}
else
yaz_log (loglevel, "%*.0s term (not general)", depth, "");
- zlog_attributes (zapt, depth+2, ast, loglevel);
+ zlog_attributes(zapt, depth+2, ast, loglevel);
}
-void log_scan_term(Z_AttributesPlusTerm *zapt, oid_value ast)
+void log_scan_term(Z_AttributesPlusTerm *zapt, const int *ast)
{
log_scan_term_level (YLOG_LOG, zapt, ast);
}
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: nmem.c,v 1.28 2007-01-03 08:42:15 adam Exp $
+ * $Id: nmem.c,v 1.29 2007-04-12 13:52:57 adam Exp $
*/
/**
#include <yaz/xmalloc.h>
#include <yaz/nmem.h>
#include <yaz/log.h>
-#include <yaz/oid.h>
#ifdef WIN32
#include <windows.h>
{
if (--nmem_init_flag == 0)
{
- oid_exit();
while (freelist)
{
struct nmem_block *fl = freelist;
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: odr_mem.c,v 1.9 2007-03-19 21:08:13 adam Exp $
+ * $Id: odr_mem.c,v 1.10 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file odr_mem.c
{
NMEM r = o->mem;
- o->mem = 0;
+ o->mem = nmem_create();
return r;
}
void *odr_malloc(ODR o, int size)
{
- if (o && !o->mem)
- o->mem = nmem_create();
- return nmem_malloc(o ? o->mem : 0, size);
+ return nmem_malloc(o->mem, size);
}
char *odr_strdup(ODR o, const char *str)
{
- if (o && !o->mem)
- o->mem = nmem_create();
return nmem_strdup(o->mem, str);
}
int *odr_intdup(ODR o, int v)
{
- if (o && !o->mem)
- o->mem = nmem_create();
return nmem_intdup(o->mem, v);
}
int odr_total(ODR o)
{
- return o->mem ? nmem_total(o->mem) : 0;
+ return nmem_total(o->mem);
}
Odr_oct *odr_create_Odr_oct(ODR o, const unsigned char *buf, int sz)
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: odr_oid.c,v 1.9 2007-03-19 21:08:13 adam Exp $
+ * $Id: odr_oid.c,v 1.10 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file odr_oid.c
#include <config.h>
#endif
+#include <yaz/oid_util.h>
#include "odr-priv.h"
-#include <yaz/oid.h>
/*
* Top level oid en/decoder.
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: odr_util.c,v 1.10 2007-03-19 21:08:13 adam Exp $
+ * $Id: odr_util.c,v 1.11 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file odr_util.c
#include <string.h>
#include <ctype.h>
#include "odr-priv.h"
-#include <yaz/oid.h>
+#include <yaz/oid_util.h>
void odr_prname(ODR o, const char *name)
{
return o->bp - base < len;
}
-Odr_oid *odr_oiddup_nmem(NMEM nmem, Odr_oid *o)
+Odr_oid *odr_oiddup_nmem(NMEM nmem, const Odr_oid *o)
{
Odr_oid *r;
return r;
}
-Odr_oid *odr_oiddup(ODR odr, Odr_oid *o)
+Odr_oid *odr_oiddup(ODR odr, const Odr_oid *o)
{
- if (!odr->mem)
- odr->mem = nmem_create();
- return odr_oiddup_nmem (odr->mem, o);
+ return odr_oiddup_nmem(odr_getmem(odr), o);
}
Odr_oid *odr_getoidbystr_nmem(NMEM nmem, const char *str)
Odr_oid *odr_getoidbystr(ODR o, const char *str)
{
- if (!o->mem)
- o->mem = nmem_create();
- return odr_getoidbystr_nmem (o->mem, str);
+ return odr_getoidbystr_nmem(odr_getmem(o), str);
}
int odr_missing(ODR o, int opt, const char *name)
+++ /dev/null
-/*
- * Copyright (C) 1995-2007, Index Data ApS
- * See the file LICENSE for details.
- *
- * $Id: oid.c,v 1.13 2007-01-03 08:42:15 adam Exp $
- */
-
-/**
- * \file oid.c
- * \brief Implements OID database
- *
- * More or less protocol-transparent OID database.
- * We could (and should?) extend this so that the user app can add new
- * entries to the list at initialization.
- */
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <yaz/oid.h>
-#include <yaz/yaz-util.h>
-
-static int z3950_prefix[] = { 1, 2, 840, 10003, -1 };
-static int sr_prefix[] = { 1, 0, 10163, -1 };
-
-struct oident_list {
- struct oident oident;
- struct oident_list *next;
-};
-
-static struct oident_list *oident_table = NULL;
-static int oid_value_dynamic = VAL_DYNAMIC;
-static int oid_init_flag = 0;
-static NMEM_MUTEX oid_mutex = 0;
-static NMEM oid_nmem = 0;
-
-/*
- * OID database
- */
-static oident standard_oids[] =
-{
- /* General definitions */
- {PROTO_GENERAL, CLASS_TRANSYN, VAL_BER, {2,1,1,-1},
- "BER" },
- {PROTO_GENERAL, CLASS_TRANSYN, VAL_ISO2709, {1,0,2709,1,1,-1},
- "ISO2709"},
- {PROTO_GENERAL, CLASS_GENERAL, VAL_ISO_ILL_1, {1,0,10161,2,1,-1},
- "ISOILL-1"},
- /* Z39.50v3 definitions */
- {PROTO_Z3950, CLASS_ABSYN, VAL_APDU, {2,1,-1},
- "Z-APDU"},
- {PROTO_Z3950, CLASS_APPCTX, VAL_BASIC_CTX, {1,1,-1},
- "Z-BASIC"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_BIB1, {3,1,-1},
- "Bib-1"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_EXP1, {3,2,-1},
- "Exp-1"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_EXT1, {3,3,-1},
- "Ext-1"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_CCL1, {3,4,-1},
- "CCL-1"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_GILS, {3,5,-1},
- "GILS-attset"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_GILS, {3,5,-1},
- "GILS"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_STAS, {3,6,-1},
- "STAS-attset"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_COLLECT1, {3,7,-1},
- "Collections-attset"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_CIMI1, {3,8,-1},
- "CIMI-attset"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_GEO, {3,9,-1},
- "Geo-attset"},
-
- {PROTO_Z3950, CLASS_ATTSET, VAL_ZBIG, {3,10,-1},
- "ZBIG"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_UTIL, {3,11,-1},
- "Util"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_XD1, {3,12,-1},
- "XD-1"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_ZTHES, {3,13,-1},
- "Zthes"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_FIN1, {3,14,-1},
- "Fin-1"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_DAN1, {3,15,-1},
- "Dan-1"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_HOLDINGS, {3,16,-1},
- "Holdings"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_USMARC, {3,17,-1},
- "MARC"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_BIB2, {3,18,-1},
- "Bib-2"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_ZEEREX, {3,19,-1},
- "ZeeRex"},
- /* New applications should use Zthes-1 instead of this Satan-spawn */
- {PROTO_Z3950, CLASS_ATTSET, VAL_THESAURUS, {3,1000,81,1,-1},
- "Thesaurus-attset"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_IDXPATH, {3,1000,81,2,-1},
- "IDXPATH"},
- {PROTO_Z3950, CLASS_ATTSET, VAL_EXTLITE, {3,1000,81,3,-1},
- "EXTLITE"},
- {PROTO_Z3950, CLASS_DIAGSET, VAL_BIB1, {4,1,-1},
- "Bib-1"},
- {PROTO_Z3950, CLASS_DIAGSET, VAL_DIAG1, {4,2,-1},
- "Diag-1"},
- {PROTO_Z3950, CLASS_DIAGSET, VAL_DIAG_ES, {4,3,-1},
- "Diag-ES"},
- {PROTO_Z3950, CLASS_DIAGSET, VAL_DIAG_GENERAL, {4,3,-1},
- "Diag-General"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_UNIMARC, {5,1,-1},
- "Unimarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_INTERMARC, {5,2,-1},
- "Intermarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_CCF, {5,3,-1},
- "CCF"},
- /* MARC21 is just an alias for the original USmarc */
- {PROTO_Z3950, CLASS_RECSYN, VAL_USMARC, {5,10,-1},
- "MARC21"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_USMARC, {5,10,-1},
- "USmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_UKMARC, {5,11,-1},
- "UKmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_NORMARC, {5,12,-1},
- "Normarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_LIBRISMARC, {5,13,-1},
- "Librismarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_DANMARC, {5,14,-1},
- "Danmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_FINMARC, {5,15,-1},
- "Finmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_MAB, {5,16,-1},
- "MAB"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_CANMARC, {5,17,-1},
- "Canmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_SBN, {5,18,-1},
- "SBN"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_PICAMARC, {5,19,-1},
- "Picamarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_AUSMARC, {5,20,-1},
- "Ausmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_IBERMARC, {5,21,-1},
- "Ibermarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_CATMARC, {5,22,-1},
- "Carmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_MALMARC, {5,23,-1},
- "Malmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_JPMARC, {5,24,-1},
- "JPmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_SWEMARC, {5,25,-1},
- "SWEmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_SIGLEMARC, {5,26,-1},
- "SIGLEmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_ISDSMARC, {5,27,-1},
- "ISDSmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_RUSMARC, {5,28,-1},
- "RUSmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_HUNMARC, {5,29,-1},
- "Hunmarc"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_NACSISCATP, {5,30,-1},
- "NACSIS-CATP"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_FINMARC2000, {5,31,-1},
- "FINMARC2000"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_MARC21FIN, {5,32,-1},
- "MARC21-fin"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_EXPLAIN, {5,100,-1},
- "Explain"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_SUTRS, {5,101,-1},
- "SUTRS"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_OPAC, {5,102,-1},
- "OPAC"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_SUMMARY, {5,103,-1},
- "Summary"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_GRS0, {5,104,-1},
- "GRS-0"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_GRS1, {5,105,-1},
- "GRS-1"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_EXTENDED, {5,106,-1},
- "Extended"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_FRAGMENT, {5,107,-1},
- "Fragment"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_PDF, {5,109,1,-1},
- "pdf"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_POSTSCRIPT, {5,109,2,-1},
- "postscript"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_HTML, {5,109,3,-1},
- "html"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_TIFF, {5,109,4,-1},
- "tiff"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_GIF, {5,109,5,-1},
- "gif"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_JPEG, {5,109,6,-1},
- "jpeg"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_PNG, {5,109,7,-1},
- "png"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_MPEG, {5,109,8,-1},
- "mpeg"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_SGML, {5,109,9,-1},
- "sgml"},
-
- {PROTO_Z3950, CLASS_RECSYN, VAL_TIFFB, {5,110,1,-1},
- "tiff-b"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_WAV, {5,110,2,-1},
- "wav"},
-
- {PROTO_Z3950, CLASS_RECSYN, VAL_SQLRS, {5,111,-1},
- "SQL-RS"},
- {PROTO_Z3950, CLASS_RECSYN, VAL_SOIF, {5,1000,81,2,-1},
- "SOIF" },
- {PROTO_Z3950, CLASS_RECSYN, VAL_TEXT_XML, {5,109,10,-1},
- "text-XML" },
- {PROTO_Z3950, CLASS_RECSYN, VAL_TEXT_XML, {5,109,10,-1},
- "XML" },
- {PROTO_Z3950, CLASS_RECSYN, VAL_APPLICATION_XML, {5,109,11,-1},
- "application-XML" },
- {PROTO_Z3950, CLASS_RESFORM, VAL_RESOURCE1, {7,1,-1},
- "Resource-1"},
- {PROTO_Z3950, CLASS_RESFORM, VAL_RESOURCE2, {7,2,-1},
- "Resource-2"},
- {PROTO_Z3950, CLASS_RESFORM, VAL_UNIVERSE_REPORT, {7,1000,81,1,-1},
- "UNIverse-Resource-Report"},
-
- {PROTO_Z3950, CLASS_ACCFORM, VAL_PROMPT1, {8,1,-1},
- "Prompt-1"},
- {PROTO_Z3950, CLASS_ACCFORM, VAL_DES1, {8,2,-1},
- "Des-1"},
- {PROTO_Z3950, CLASS_ACCFORM, VAL_KRB1, {8,3,-1},
- "Krb-1"},
- {PROTO_Z3950, CLASS_EXTSERV, VAL_PRESSET, {9,1,-1},
- "Pers. set"},
- {PROTO_Z3950, CLASS_EXTSERV, VAL_PQUERY, {9,2,-1},
- "Pers. query"},
- {PROTO_Z3950, CLASS_EXTSERV, VAL_PCQUERY, {9,3,-1},
- "Per'd query"},
- {PROTO_Z3950, CLASS_EXTSERV, VAL_ITEMORDER, {9,4,-1},
- "Item order"},
- {PROTO_Z3950, CLASS_EXTSERV, VAL_DBUPDATE0, {9,5,-1},
- "DB. Update (first version)"},
- {PROTO_Z3950, CLASS_EXTSERV, VAL_DBUPDATE1, {9,5,1,-1},
- "DB. Update (second version)"},
- {PROTO_Z3950, CLASS_EXTSERV, VAL_DBUPDATE, {9,5,1,1,-1},
- "DB. Update"},
- {PROTO_Z3950, CLASS_EXTSERV, VAL_EXPORTSPEC, {9,6,-1},
- "exp. spec."},
- {PROTO_Z3950, CLASS_EXTSERV, VAL_EXPORTINV, {9,7,-1},
- "exp. inv."},
- {PROTO_Z3950, CLASS_EXTSERV, VAL_ADMINSERVICE, {9,1000,81,1,-1},
- "Admin"},
- {PROTO_Z3950, CLASS_USERINFO,VAL_SEARCHRES1, {10,1,-1},
- "searchResult-1"},
- {PROTO_Z3950, CLASS_USERINFO,VAL_CHARLANG, {10,2,-1},
- "CharSetandLanguageNegotiation"},
- {PROTO_Z3950, CLASS_USERINFO,VAL_USERINFO1, {10,3,-1},
- "UserInfo-1"},
- {PROTO_Z3950, CLASS_USERINFO,VAL_MULTISRCH1, {10,4,-1},
- "MultipleSearchTerms-1"},
- {PROTO_Z3950, CLASS_USERINFO,VAL_MULTISRCH2, {10,5,-1},
- "MultipleSearchTerms-2"},
- {PROTO_Z3950, CLASS_USERINFO,VAL_DATETIME, {10,6,-1},
- "DateTime"},
- {PROTO_Z3950, CLASS_USERINFO,VAL_PROXY, {10,1000,81,1,-1},
- "Proxy" },
- {PROTO_Z3950, CLASS_USERINFO,VAL_COOKIE, {10,1000,81,2,-1},
- "Cookie" },
- {PROTO_Z3950, CLASS_USERINFO,VAL_CLIENT_IP, {10,1000,81,3,-1},
- "Client-IP" },
- {PROTO_Z3950, CLASS_ELEMSPEC,VAL_ESPEC1, {11,1,-1},
- "Espec-1"},
- {PROTO_Z3950, CLASS_VARSET, VAL_VAR1, {12,1,-1},
- "Variant-1"},
- {PROTO_Z3950, CLASS_SCHEMA, VAL_WAIS, {13,1,-1},
- "WAIS-schema"},
- {PROTO_Z3950, CLASS_SCHEMA, VAL_GILS, {13,2,-1},
- "GILS-schema"},
- {PROTO_Z3950, CLASS_SCHEMA, VAL_COLLECT1, {13,3,-1},
- "Collections-schema"},
- {PROTO_Z3950, CLASS_SCHEMA, VAL_GEO, {13,4,-1},
- "Geo-schema"},
- {PROTO_Z3950, CLASS_SCHEMA, VAL_CIMI1, {13,5,-1},
- "CIMI-schema"},
- {PROTO_Z3950, CLASS_SCHEMA, VAL_UPDATEES, {13,6,-1},
- "Update ES"},
- {PROTO_Z3950, CLASS_SCHEMA, VAL_HOLDINGS, {13,7,-1},
- "Holdings"},
- {PROTO_Z3950, CLASS_SCHEMA, VAL_ZTHES, {13,8,-1},
- "Zthes"},
- {PROTO_Z3950, CLASS_SCHEMA, VAL_THESAURUS, {13,1000,81,1,-1},
- "thesaurus-schema"},
- {PROTO_Z3950, CLASS_SCHEMA, VAL_EXPLAIN, {13,1000,81,2,-1},
- "Explain-schema"},
- {PROTO_Z3950, CLASS_TAGSET, VAL_SETM, {14,1,-1},
- "TagsetM"},
- {PROTO_Z3950, CLASS_TAGSET, VAL_SETG, {14,2,-1},
- "TagsetG"},
- {PROTO_Z3950, CLASS_TAGSET, VAL_STAS, {14,3,-1},
- "STAS-tagset"},
- {PROTO_Z3950, CLASS_TAGSET, VAL_GILS, {14,4,-1},
- "GILS-tagset"},
- {PROTO_Z3950, CLASS_TAGSET, VAL_COLLECT1, {14,5,-1},
- "Collections-tagset"},
- {PROTO_Z3950, CLASS_TAGSET, VAL_CIMI1, {14,6,-1},
- "CIMI-tagset"},
- {PROTO_Z3950, CLASS_TAGSET, VAL_THESAURUS, {14,1000,81,1,-1},
- "thesaurus-tagset"}, /* What is this Satan-spawn doing here? */
- {PROTO_Z3950, CLASS_TAGSET, VAL_EXPLAIN, {14,1000,81,2,-1},
- "Explain-tagset"},
- {PROTO_Z3950, CLASS_TAGSET, VAL_ZTHES, {14,8,-1},
- "Zthes-tagset"},
- {PROTO_Z3950, CLASS_NEGOT, VAL_CHARNEG3, {15,3,-1},
- "CharSetandLanguageNegotiation-3"},
- {PROTO_Z3950, CLASS_NEGOT, VAL_CHARNEG4, {15,4,-1},
- "CharSetandLanguageNegotiation-4"},
- {PROTO_Z3950, CLASS_NEGOT, VAL_ID_CHARSET, {15,1000,81,1,-1},
- "ID-Charset" },
- {PROTO_Z3950, CLASS_USERINFO,VAL_CQL, {16, 2, -1},
- "CQL"},
- {PROTO_GENERAL, CLASS_GENERAL, VAL_UCS2, {1,0,10646,1,0,2,-1},
- "UCS-2"},
- {PROTO_GENERAL, CLASS_GENERAL, VAL_UCS4, {1,0,10646,1,0,4,-1},
- "UCS-4"},
- {PROTO_GENERAL, CLASS_GENERAL, VAL_UTF16, {1,0,10646,1,0,5,-1},
- "UTF-16"},
- {PROTO_GENERAL, CLASS_GENERAL, VAL_UTF8, {1,0,10646,1,0,8,-1},
- "UTF-8"},
- {PROTO_Z3950, CLASS_USERINFO,VAL_OCLCUI, {10, 1000, 17, 1, -1},
- "OCLC-userInfo"},
- {PROTO_Z3950, CLASS_EXTSERV, VAL_XMLES, {9,1000,105,4,-1},
- "XML-ES"},
- {PROTO_NOP, CLASS_NOP, VAL_NOP, {-1}, 0 }
-};
-
-/* OID utilities */
-
-void oid_oidcpy(int *t, int *s)
-{
- while ((*(t++) = *(s++)) > -1);
-}
-
-void oid_oidcat(int *t, int *s)
-{
- while (*t > -1)
- t++;
- while ((*(t++) = *(s++)) > -1);
-}
-
-int oid_oidcmp(int *o1, int *o2)
-{
- while (*o1 == *o2 && *o1 > -1)
- {
- o1++;
- o2++;
- }
- if (*o1 == *o2)
- return 0;
- else if (*o1 > *o2)
- return 1;
- else
- return -1;
-}
-
-int oid_oidlen(int *o)
-{
- int len = 0;
-
- while (*(o++) >= 0)
- len++;
- return len;
-}
-
-
-static int match_prefix(int *look, int *prefix)
-{
- int len;
-
- for (len = 0; *look == *prefix; look++, prefix++, len++);
- if (*prefix < 0) /* did we reach the end of the prefix? */
- return len;
- return 0;
-}
-
-void oid_transfer (struct oident *oidentp)
-{
- while (*oidentp->oidsuffix >= 0)
- {
- oid_addent (oidentp->oidsuffix, oidentp->proto,
- oidentp->oclass,
- oidentp->desc, oidentp->value);
- oidentp++;
- }
-}
-
-void oid_init (void)
-{
- if (oid_init_flag == 0)
- {
- /* oid_transfer is thread safe, so there's nothing wrong in having
- two threads calling it simultaniously. On the other hand
- no thread may exit oid_init before all OID's bave been
- transferred - which is why checked is set after oid_transfer...
- */
- nmem_mutex_create (&oid_mutex);
- nmem_mutex_enter (oid_mutex);
- if (!oid_nmem)
- oid_nmem = nmem_create ();
- nmem_mutex_leave (oid_mutex);
- oid_transfer (standard_oids);
- oid_init_flag = 1;
- }
-}
-
-void oid_exit (void)
-{
- if (oid_init_flag)
- {
- oid_init_flag = 0;
- nmem_mutex_destroy (&oid_mutex);
- nmem_destroy (oid_nmem);
- oid_nmem = 0;
- }
-}
-
-static struct oident *oid_getentbyoid_x(int *o)
-{
- enum oid_proto proto;
- int prelen;
- struct oident_list *ol;
-
- /* determine protocol type */
- if ((prelen = match_prefix(o, z3950_prefix)) != 0)
- proto = PROTO_Z3950;
- else if ((prelen = match_prefix(o, sr_prefix)) != 0)
- proto = PROTO_SR;
- else
- proto = PROTO_GENERAL;
- for (ol = oident_table; ol; ol = ol->next)
- {
- struct oident *p = &ol->oident;
- if (p->proto == proto && !oid_oidcmp(o + prelen, p->oidsuffix))
- return p;
- if (p->proto == PROTO_GENERAL && !oid_oidcmp (o, p->oidsuffix))
- return p;
- }
- return 0;
-}
-
-/*
- * To query, fill out proto, class, and value of the ent parameter.
- */
-int *oid_ent_to_oid(struct oident *ent, int *ret)
-{
- struct oident_list *ol;
-
- oid_init ();
- for (ol = oident_table; ol; ol = ol->next)
- {
- struct oident *p = &ol->oident;
- if (ent->value == p->value &&
- (p->proto == PROTO_GENERAL || (ent->proto == p->proto &&
- (ent->oclass == p->oclass || ent->oclass == CLASS_GENERAL))))
- {
- if (p->proto == PROTO_Z3950)
- oid_oidcpy(ret, z3950_prefix);
- else if (p->proto == PROTO_SR)
- oid_oidcpy(ret, sr_prefix);
- else
- ret[0] = -1;
- oid_oidcat(ret, p->oidsuffix);
- ent->desc = p->desc;
- return ret;
- }
- }
- ret[0] = -1;
- return 0;
-}
-
-/*
- * To query, fill out proto, class, and value of the ent parameter.
- */
-int *oid_getoidbyent(struct oident *ent)
-{
- static int ret[OID_SIZE];
-
- return oid_ent_to_oid (ent, ret);
-}
-
-struct oident *oid_addent (int *oid, enum oid_proto proto,
- enum oid_class oclass,
- const char *desc, int value)
-{
- struct oident *oident = 0;
-
- nmem_mutex_enter (oid_mutex);
- if (!oident)
- {
- struct oident_list *oident_list;
- oident_list = (struct oident_list *)
- nmem_malloc (oid_nmem, sizeof(*oident_list));
- oident = &oident_list->oident;
- oident->proto = proto;
- oident->oclass = oclass;
-
- if (!desc)
- {
- char desc_str[OID_STR_MAX];
- int i;
-
- *desc_str = '\0';
- if (*oid >= 0)
- {
- sprintf (desc_str, "%d", *oid);
- for (i = 1; i < OID_SIZE && oid[i] >= 0; i++)
- sprintf (desc_str+strlen(desc_str), ".%d", oid[i]);
- }
- oident->desc = nmem_strdup(oid_nmem, desc_str);
- }
- else
- oident->desc = nmem_strdup(oid_nmem, desc);
- if (value == VAL_DYNAMIC)
- oident->value = (enum oid_value) (++oid_value_dynamic);
- else
- oident->value = (enum oid_value) value;
- oid_oidcpy (oident->oidsuffix, oid);
- oident_list->next = oident_table;
- oident_table = oident_list;
- }
- nmem_mutex_leave (oid_mutex);
- return oident;
-}
-
-struct oident *oid_getentbyoid(int *oid)
-{
- struct oident *oident;
-
- if (!oid)
- return 0;
- oid_init ();
- oident = oid_getentbyoid_x (oid);
- if (!oident)
- oident = oid_addent (oid, PROTO_GENERAL, CLASS_GENERAL,
- NULL, VAL_DYNAMIC);
- return oident;
-}
-
-static oid_value oid_getval_raw(const char *name)
-{
- int val = 0, i = 0, oid[OID_SIZE];
- struct oident *oident;
-
- while (isdigit (*(const unsigned char *) name))
- {
- val = val*10 + (*name - '0');
- name++;
- if (*name == '.')
- {
- if (i < OID_SIZE-1)
- oid[i++] = val;
- val = 0;
- name++;
- }
- }
- oid[i] = val;
- oid[i+1] = -1;
- oident = oid_getentbyoid_x (oid);
- if (!oident)
- oident = oid_addent (oid, PROTO_GENERAL, CLASS_GENERAL, NULL,
- VAL_DYNAMIC);
- return oident->value;
-}
-
-oid_value oid_getvalbyname(const char *name)
-{
- struct oident_list *ol;
-
- oid_init ();
- if (isdigit (*(const unsigned char *) name))
- return oid_getval_raw (name);
- for (ol = oident_table; ol; ol = ol->next)
- if (!yaz_matchstr(ol->oident.desc, name))
- {
- return ol->oident.value;
- }
- return VAL_NONE;
-}
-
-void oid_setprivateoids(oident *list)
-{
- oid_transfer (list);
-}
-
-void oid_trav (void (*func)(struct oident *oidinfo, void *vp), void *vp)
-{
- struct oident_list *ol;
-
- oid_init ();
- for (ol = oident_table; ol; ol = ol->next)
- (*func)(&ol->oident, vp);
-}
-
-int *oid_name_to_oid(oid_class oclass, const char *name, int *oid)
-{
- struct oident ent;
-
- /* Translate syntax to oid_val */
- oid_value value = oid_getvalbyname(name);
-
- /* Build it into an oident */
- ent.proto = PROTO_Z3950;
- ent.oclass = oclass;
- ent.value = value;
-
- /* Translate to an array of int */
- return oid_ent_to_oid(&ent, oid);
-}
-
-char *oid_to_dotstring(const int *oid, char *oidbuf)
-{
- char tmpbuf[20];
- int i;
-
- oidbuf[0] = '\0';
- for (i = 0; oid[i] != -1 && i < OID_SIZE; i++)
- {
- sprintf(tmpbuf, "%d", oid[i]);
- if (i > 0)
- strcat(oidbuf, ".");
- strcat(oidbuf, tmpbuf);
- }
- return oidbuf;
-}
-
-char *oid_name_to_dotstring(oid_class oclass, const char *name, char *oidbuf)
-{
- int oid[OID_SIZE];
-
- (void) oid_name_to_oid(oclass, name, oid);
- return oid_to_dotstring(oid, oidbuf);
-}
-
-/*
- * Local variables:
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- * vim: shiftwidth=4 tabstop=8 expandtab
- */
-
--- /dev/null
+/*
+ * Copyright (C) 1995-2007, Index Data ApS
+ * See the file LICENSE for details.
+ *
+ * $Id: oid_db.c,v 1.1 2007-04-12 13:52:57 adam Exp $
+ */
+
+/**
+ * \brief OID Database
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <yaz/yaz-util.h>
+#include <yaz/odr.h>
+#include <yaz/oid_util.h>
+#include <yaz/oid_db.h>
+
+struct yaz_oid_entry {
+ int oclass;
+ int oid[10];
+ char *name;
+};
+
+#define Z3950_PREFIX 1, 2, 840, 10003
+
+static struct yaz_oid_entry standard_oids[] =
+{
+ /* General definitions */
+ {CLASS_TRANSYN, {2, 1, 1,-1}, "BER" },
+ {CLASS_TRANSYN, {1, 0, 2709, 1, 1,-1}, "ISO2709"},
+ {CLASS_GENERAL, {1, 0, 10161, 2, 1,-1}, OID_STR_ILL_1 },
+ {CLASS_ABSYN, {2, 1,-1}, "Z-APDU"},
+ {CLASS_APPCTX, {1, 1,-1}, "Z-BASIC"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 1,-1}, "Bib-1"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 2,-1}, "Exp-1"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 3,-1}, "Ext-1"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 4,-1}, "CCL-1"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 5,-1}, "GILS"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 5,-1}, "GILS-attset"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 6,-1}, "STAS-attset"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 7,-1}, "Collections-attset"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 8,-1}, "CIMI-attset"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 9,-1}, "Geo-attset"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 10,-1}, "ZBIG"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 11,-1}, "Util"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 12,-1}, "XD-1"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 13,-1}, "Zthes"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 14,-1}, "Fin-1"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 15,-1}, "Dan-1"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 16,-1}, "Holdings"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 17,-1}, "MARC"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 18,-1}, "Bib-2"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3, 19,-1}, "ZeeRex"},
+ /* New applications should use Zthes-1 instead of this Satan-spawn */
+ {CLASS_ATTSET, {Z3950_PREFIX, 3,1000, 81,1,-1},
+ "Thesaurus-attset"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3,1000, 81,2,-1},
+ "IDXPATH"},
+ {CLASS_ATTSET, {Z3950_PREFIX, 3,1000, 81,3,-1},
+ "EXTLITE"},
+ {CLASS_DIAGSET, {Z3950_PREFIX, 4, 1,-1},
+ OID_STR_BIB1},
+ {CLASS_DIAGSET, {Z3950_PREFIX, 4, 2,-1},
+ OID_STR_DIAG1},
+ {CLASS_DIAGSET, {Z3950_PREFIX, 4, 3,-1},
+ "Diag-ES"},
+ {CLASS_DIAGSET, {Z3950_PREFIX, 4, 3,-1},
+ "Diag-General"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 1,-1},
+ "Unimarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 2,-1},
+ "Intermarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 3,-1},
+ "CCF"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 10,-1},
+ OID_STR_USMARC},
+ /* MARC21 is just an alias for the original USmarc */
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 10,-1},
+ "MARC21"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 11,-1},
+ "UKmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 12,-1},
+ "Normarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 13,-1},
+ "Librismarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 14,-1},
+ "Danmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 15,-1},
+ "Finmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 16,-1},
+ "MAB"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 17,-1},
+ "Canmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 18,-1},
+ "SBN"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 19,-1},
+ "Picamarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 20,-1},
+ "Ausmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 21,-1},
+ "Ibermarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 22,-1},
+ "Carmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 23,-1},
+ "Malmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 24,-1},
+ "JPmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 25,-1},
+ "SWEmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 26,-1},
+ "SIGLEmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 27,-1},
+ "ISDSmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 28,-1},
+ "RUSmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 29,-1},
+ "Hunmarc"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 30,-1},
+ "NACSIS-CATP"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 31,-1},
+ "FINMARC2000"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 32,-1},
+ "MARC21-fin"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 100,-1},
+ OID_STR_EXPLAIN},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 101,-1},
+ OID_STR_SUTRS},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 102,-1},
+ OID_STR_OPAC},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 103,-1},
+ OID_STR_SUMMARY},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 104,-1},
+ "GRS-0"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 105,-1},
+ OID_STR_GRS1 },
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 106,-1},
+ OID_STR_EXTENDED},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 107,-1},
+ "Fragment"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,1,-1},
+ "pdf"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,2,-1},
+ OID_STR_POSTSCRIPT},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,3,-1},
+ OID_STR_HTML},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,4,-1},
+ "tiff"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,5,-1},
+ "gif"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,6,-1},
+ "jpeg"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,7,-1},
+ "png"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,8,-1},
+ "mpeg"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109,9,-1},
+ "sgml"},
+
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 110,1,-1},
+ "tiff-b"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 110,2,-1},
+ "wav"},
+
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 111,-1},
+ "SQL-RS"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 1000, 81, 2,-1},
+ OID_STR_SOIF},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109, 10,-1},
+ OID_STR_XML },
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109, 10,-1},
+ "application-XML"},
+ {CLASS_RECSYN, {Z3950_PREFIX, 5, 109, 11,-1},
+ OID_STR_APPLICATION_XML },
+ {CLASS_RESFORM, {Z3950_PREFIX, 7, 1,-1},
+ "Resource-1"},
+ {CLASS_RESFORM, {Z3950_PREFIX, 7, 2,-1},
+ "Resource-2"},
+ {CLASS_RESFORM, {Z3950_PREFIX, 7, 1000, 81, 1,-1},
+ "UNIverse-Resource-Report"},
+
+ {CLASS_ACCFORM, {Z3950_PREFIX, 8, 1,-1},
+ "Prompt-1"},
+ {CLASS_ACCFORM, {Z3950_PREFIX, 8, 2,-1},
+ "Des-1"},
+ {CLASS_ACCFORM, {Z3950_PREFIX, 8, 3,-1},
+ "Krb-1"},
+ {CLASS_EXTSERV, {Z3950_PREFIX, 9, 1,-1},
+ "Pers. set"},
+ {CLASS_EXTSERV, {Z3950_PREFIX, 9, 2,-1},
+ "Pers. query"},
+ {CLASS_EXTSERV, {Z3950_PREFIX, 9, 3,-1},
+ "Per'd query"},
+ {CLASS_EXTSERV, {Z3950_PREFIX, 9, 4,-1},
+ OID_STR_ITEMORDER },
+ {CLASS_EXTSERV, {Z3950_PREFIX, 9, 5,-1},
+ "DB. Update (first version)"},
+ {CLASS_EXTSERV, {Z3950_PREFIX, 9, 5,1,-1},
+ "DB. Update (second version)"},
+ {CLASS_EXTSERV, {Z3950_PREFIX, 9, 5, 1, 1,-1},
+ OID_STR_EXT_UPDATE},
+ {CLASS_EXTSERV, {Z3950_PREFIX, 9, 6,-1},
+ "exp. spec."},
+ {CLASS_EXTSERV, {Z3950_PREFIX, 9, 7,-1},
+ "exp. inv."},
+ {CLASS_EXTSERV, {Z3950_PREFIX, 9, 1000, 81, 1,-1},
+ OID_STR_ADMIN},
+ {CLASS_USERINFO, {Z3950_PREFIX, 10, 1,-1},
+ "searchResult-1"},
+ {CLASS_USERINFO, {Z3950_PREFIX, 10, 2,-1},
+ "CharSetandLanguageNegotiation"},
+ {CLASS_USERINFO, {Z3950_PREFIX, 10, 3,-1},
+ OID_STR_USERINFO_1},
+ {CLASS_USERINFO, {Z3950_PREFIX, 10, 4,-1},
+ "MultipleSearchTerms-1"},
+ {CLASS_USERINFO, {Z3950_PREFIX, 10, 5,-1},
+ "MultipleSearchTerms-2"},
+ {CLASS_USERINFO, {Z3950_PREFIX, 10, 6,-1},
+ "DateTime"},
+ {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 81, 1,-1},
+ OID_STR_PROXY},
+ {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 81, 2,-1},
+ OID_STR_COOKIE},
+ {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 81, 3,-1},
+ OID_STR_CLIENT_IP },
+ {CLASS_ELEMSPEC, {1, 2, 840, 1003, 11, 1,-1},
+ "Espec-1"},
+ {CLASS_VARSET, {Z3950_PREFIX, 12, 1,-1},
+ "Variant-1"},
+ {CLASS_SCHEMA, {Z3950_PREFIX, 13, 1,-1},
+ "WAIS-schema"},
+ {CLASS_SCHEMA, {Z3950_PREFIX, 13, 2,-1},
+ "GILS-schema"},
+ {CLASS_SCHEMA, {Z3950_PREFIX, 13, 3,-1},
+ "Collections-schema"},
+ {CLASS_SCHEMA, {Z3950_PREFIX, 13, 4,-1},
+ "Geo-schema"},
+ {CLASS_SCHEMA, {Z3950_PREFIX, 13, 5,-1},
+ "CIMI-schema"},
+ {CLASS_SCHEMA, {Z3950_PREFIX, 13, 6,-1},
+ "Update ES"},
+ {CLASS_SCHEMA, {Z3950_PREFIX, 13, 7,-1},
+ "Holdings"},
+ {CLASS_SCHEMA, {Z3950_PREFIX, 13, 8,-1},
+ "Zthes"},
+ {CLASS_SCHEMA, {Z3950_PREFIX, 13, 1000, 81, 1,-1},
+ "thesaurus-schema"},
+ {CLASS_SCHEMA, {Z3950_PREFIX, 13, 1000, 81, 2,-1},
+ "Explain-schema"},
+ {CLASS_TAGSET, {Z3950_PREFIX, 14, 1,-1},
+ "TagsetM"},
+ {CLASS_TAGSET, {Z3950_PREFIX, 14, 2,-1},
+ "TagsetG"},
+ {CLASS_TAGSET, {Z3950_PREFIX, 14, 3,-1},
+ "STAS-tagset"},
+ {CLASS_TAGSET, {Z3950_PREFIX, 14, 4,-1},
+ "GILS-tagset"},
+ {CLASS_TAGSET, {Z3950_PREFIX, 14, 5,-1},
+ "Collections-tagset"},
+ {CLASS_TAGSET, {Z3950_PREFIX, 14, 6,-1},
+ "CIMI-tagset"},
+ {CLASS_TAGSET, {Z3950_PREFIX, 14, 1000, 81, 1,-1},
+ "thesaurus-tagset"},
+ {CLASS_TAGSET, {Z3950_PREFIX, 14, 1000, 81, 2,-1},
+ "Explain-tagset"},
+ {CLASS_TAGSET, {Z3950_PREFIX, 14, 8,-1},
+ "Zthes-tagset"},
+ {CLASS_NEGOT, {Z3950_PREFIX, 15, 3,-1},
+ OID_STR_CHARNEG_3 },
+ {CLASS_NEGOT, {Z3950_PREFIX, 15, 4,-1},
+ OID_STR_CHARNEG_4 },
+ {CLASS_NEGOT, {Z3950_PREFIX, 15, 1000, 81,1,-1},
+ OID_STR_ID_CHARSET },
+ {CLASS_USERINFO, {1, 2, 840, 1003, 16, 2, -1},
+ "CQL"},
+ {CLASS_GENERAL, {1,0,10646,1,0,2,-1},
+ "UCS-2"},
+ {CLASS_GENERAL, {1,0,10646,1,0,4,-1},
+ "UCS-4"},
+ {CLASS_GENERAL, {1,0,10646,1,0,5,-1},
+ "UTF-16"},
+ {CLASS_GENERAL, {1,0,10646,1,0,8,-1},
+ "UTF-8"},
+ {CLASS_USERINFO, {Z3950_PREFIX, 10, 1000, 17, 1, -1},
+ "OCLC-userInfo"},
+ {CLASS_EXTSERV, {Z3950_PREFIX, 9, 1000,105,4,-1},
+ OID_STR_XMLES },
+ {CLASS_NOP, {-1}, 0}
+};
+
+yaz_oid_db_t yaz_oid_std(void)
+{
+ return standard_oids;
+}
+
+const int *yaz_string_to_oid(yaz_oid_db_t oid_list,
+ int oclass, const char *name)
+{
+ for (; oid_list->name; oid_list++)
+ {
+ if (!yaz_matchstr(oid_list->name, name)
+ && (oclass == CLASS_GENERAL || oclass == oid_list->oclass))
+ return oid_list->oid;
+ }
+ return 0;
+}
+
+int *yaz_string_to_oid_nmem(yaz_oid_db_t oid_list,
+ int oclass, const char *name, NMEM nmem)
+{
+ const int *oid = yaz_string_to_oid(oid_list, oclass, name);
+ if (oid)
+ return odr_oiddup_nmem(nmem, oid);
+ return odr_getoidbystr_nmem(nmem, name);
+}
+
+int *yaz_string_to_oid_odr(yaz_oid_db_t oid_list,
+ int oclass, const char *name, ODR o)
+{
+ return yaz_string_to_oid_nmem(oid_list, oclass, name, odr_getmem(o));
+}
+
+const char *yaz_oid_to_string(yaz_oid_db_t oid_list,
+ const int *oid, int *oclass)
+{
+ if (!oid)
+ return 0;
+ for (; oid_list->name; oid_list++)
+ {
+ if (!oid_oidcmp(oid_list->oid, oid))
+ {
+ if (oclass)
+ *oclass = oid_list->oclass;
+ return oid_list->name;
+ }
+ }
+ return 0;
+}
+
+const char *yaz_oid_to_string_buf(const int *oid, int *oclass, char *buf)
+{
+ const char *p = yaz_oid_to_string(standard_oids, oid, oclass);
+ if (p)
+ return p;
+ if (oclass)
+ *oclass = CLASS_GENERAL;
+ return oid_to_dotstring(oid, buf);
+}
+
+int yaz_oid_is_iso2709(const int *oid)
+{
+ if (oid_oidlen(oid) == 6 && oid[0] == 1 && oid[1] == 2
+ && oid[2] == 840 && oid[3] == 10003 && oid[4] == 5
+ && oid[5] <= 29 && oid[5] != 16)
+ return 1;
+ return 0;
+}
+
+void yaz_oid_trav(yaz_oid_db_t oid_list,
+ void (*func)(const int *oid,
+ int oclass, const char *name,
+ void *client_data),
+ void *client_data)
+{
+ for (; oid_list->name; oid_list++)
+ func(oid_list->oid, oid_list->oclass, oid_list->name, client_data);
+}
+
--- /dev/null
+/*
+ * Copyright (C) 1995-2007, Index Data ApS
+ * See the file LICENSE for details.
+ *
+ * $Id: oid_util.c,v 1.1 2007-04-12 13:52:57 adam Exp $
+ */
+
+/**
+ * \file oid_util.c
+ * \brief Implements OID base utilities
+ *
+ */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <yaz/snprintf.h>
+#include <yaz/oid_util.h>
+
+void oid_oidcpy(int *t, const int *s)
+{
+ while ((*(t++) = *(s++)) > -1);
+}
+
+void oid_oidcat(int *t, const int *s)
+{
+ while (*t > -1)
+ t++;
+ while ((*(t++) = *(s++)) > -1);
+}
+
+int oid_oidcmp(const int *o1, const int *o2)
+{
+ while (*o1 == *o2 && *o1 > -1)
+ {
+ o1++;
+ o2++;
+ }
+ if (*o1 == *o2)
+ return 0;
+ else if (*o1 > *o2)
+ return 1;
+ else
+ return -1;
+}
+
+int oid_oidlen(const int *o)
+{
+ int len = 0;
+
+ while (*(o++) >= 0)
+ len++;
+ return len;
+}
+
+
+char *oid_to_dotstring(const int *oid, char *oidbuf)
+{
+ char tmpbuf[20];
+ int i;
+
+ oidbuf[0] = '\0';
+ for (i = 0; oid[i] != -1 && i < OID_SIZE; i++)
+ {
+ yaz_snprintf(tmpbuf, sizeof(tmpbuf)-1, "%d", oid[i]);
+ if (i > 0)
+ strcat(oidbuf, ".");
+ strcat(oidbuf, tmpbuf);
+ }
+ return oidbuf;
+}
+
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: otherinfo.c,v 1.6 2007-01-03 08:42:15 adam Exp $
+ * $Id: otherinfo.c,v 1.7 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file otherinfo.c
Z_OtherInformationUnit *yaz_oi_update (
Z_OtherInformation **otherInformationP, ODR odr,
- int *oid, int categoryValue, int delete_flag)
+ const int *oid, int categoryValue, int delete_flag)
{
int i;
Z_OtherInformation *otherInformation;
void yaz_oi_set_string_oid (
Z_OtherInformation **otherInformation, ODR odr,
- int *oid, int categoryValue,
+ const int *oid, int categoryValue,
const char *str)
{
Z_OtherInformationUnit *oi =
oi->information.characterInfo = odr_strdup (odr, str);
}
-void yaz_oi_set_string_oidval (
- Z_OtherInformation **otherInformation, ODR odr,
- int oidval, int categoryValue,
- const char *str)
-{
- int oid[OID_SIZE];
- struct oident ent;
- ent.proto = PROTO_Z3950;
- ent.oclass = CLASS_USERINFO;
- ent.value = (oid_value) oidval;
- if (!oid_ent_to_oid (&ent, oid))
- return ;
- yaz_oi_set_string_oid(otherInformation,
- odr, oid, categoryValue, str);
-}
-
char *yaz_oi_get_string_oid (
Z_OtherInformation **otherInformation,
- int *oid, int categoryValue, int delete_flag)
+ const int *oid, int categoryValue, int delete_flag)
{
Z_OtherInformationUnit *oi;
return 0;
}
-char *yaz_oi_get_string_oidval(Z_OtherInformation **otherInformation,
- int oidval, int categoryValue, int delete_flag)
-{
- int oid[OID_SIZE];
- struct oident ent;
- ent.proto = PROTO_Z3950;
- ent.oclass = CLASS_USERINFO;
- ent.value = (oid_value) oidval;
-
- if (!oid_ent_to_oid (&ent, oid))
- return 0;
- return yaz_oi_get_string_oid (otherInformation, oid, categoryValue,
- delete_flag);
-}
-
/*
* Local variables:
* c-basic-offset: 4
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: pquery.c,v 1.9 2007-01-03 08:42:15 adam Exp $
+ * $Id: pquery.c,v 1.10 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file pquery.c
#include <ctype.h>
#include <yaz/proto.h>
-#include <yaz/oid.h>
+#include <yaz/oid_db.h>
#include <yaz/pquery.h>
-static oid_value p_query_dfset = VAL_NONE;
-
struct yaz_pqf_parser {
const char *query_buf;
const char *query_ptr;
int error;
};
-static Z_RPNStructure *rpn_structure (struct yaz_pqf_parser *li, ODR o,
- oid_proto,
- int num_attr, int max_attr,
- int *attr_list, char **attr_clist,
- oid_value *attr_set);
+static Z_RPNStructure *rpn_structure(struct yaz_pqf_parser *li, ODR o,
+ int num_attr, int max_attr,
+ int *attr_list, char **attr_clist,
+ int **attr_set);
-static enum oid_value query_oid_getvalbyname (struct yaz_pqf_parser *li)
+static int *query_oid_getvalbyname(struct yaz_pqf_parser *li, ODR o)
{
- enum oid_value value;
char buf[32];
if (li->lex_len > 31)
- return VAL_NONE;
+ return 0;
memcpy (buf, li->lex_buf, li->lex_len);
buf[li->lex_len] = '\0';
- value = oid_getvalbyname (buf);
- return value;
+ return yaz_string_to_oid_odr(yaz_oid_std(), CLASS_ATTSET, buf, o);
}
-static int compare_term (struct yaz_pqf_parser *li, const char *src,
- size_t off)
+static int compare_term(struct yaz_pqf_parser *li, const char *src,
+ size_t off)
{
size_t len=strlen(src);
return 0;
}
-static int query_token (struct yaz_pqf_parser *li)
+static int query_token(struct yaz_pqf_parser *li)
{
int sep_char = ' ';
const char *sep_match;
return 't';
}
-static int lex (struct yaz_pqf_parser *li)
+static int lex(struct yaz_pqf_parser *li)
{
- return li->query_look = query_token (li);
+ return li->query_look = query_token(li);
}
static int escape_string(char *out_buf, const char *in, int len)
static int p_query_parse_attr(struct yaz_pqf_parser *li, ODR o,
int num_attr, int *attr_list,
- char **attr_clist, oid_value *attr_set)
+ char **attr_clist, int **attr_set)
{
const char *cp;
if (!(cp = strchr (li->lex_buf, '=')) ||
(size_t) (cp-li->lex_buf) > li->lex_len)
{
- attr_set[num_attr] = query_oid_getvalbyname (li);
- if (attr_set[num_attr] == VAL_NONE)
+ attr_set[num_attr] = query_oid_getvalbyname (li, o);
+ if (attr_set[num_attr] == 0)
{
li->error = YAZ_PQF_ERROR_ATTSET;
return 0;
if (num_attr > 0)
attr_set[num_attr] = attr_set[num_attr-1];
else
- attr_set[num_attr] = VAL_NONE;
+ attr_set[num_attr] = 0;
}
if (*li->lex_buf < '0' || *li->lex_buf > '9')
{
return 1;
}
-static Z_AttributesPlusTerm *rpn_term (struct yaz_pqf_parser *li, ODR o,
- oid_proto proto,
- int num_attr, int *attr_list,
- char **attr_clist, oid_value *attr_set)
+static Z_AttributesPlusTerm *rpn_term(struct yaz_pqf_parser *li, ODR o,
+ int num_attr, int *attr_list,
+ char **attr_clist, int **attr_set)
{
Z_AttributesPlusTerm *zapt;
Odr_oct *term_octet;
elements[k] =
(Z_AttributeElement*)odr_malloc (o,sizeof(**elements));
elements[k]->attributeType = &attr_tmp[2*i];
- elements[k]->attributeSet =
- yaz_oidval_to_z3950oid(o, CLASS_ATTSET, attr_set[i]);
+ elements[k]->attributeSet = attr_set[i];
if (attr_clist[i])
{
return zapt;
}
-static Z_Operand *rpn_simple (struct yaz_pqf_parser *li, ODR o, oid_proto proto,
- int num_attr, int *attr_list, char **attr_clist,
- oid_value *attr_set)
+static Z_Operand *rpn_simple(struct yaz_pqf_parser *li, ODR o,
+ int num_attr, int *attr_list, char **attr_clist,
+ int **attr_set)
{
Z_Operand *zo;
case 't':
zo->which = Z_Operand_APT;
if (!(zo->u.attributesPlusTerm =
- rpn_term (li, o, proto, num_attr, attr_list, attr_clist,
- attr_set)))
+ rpn_term (li, o, num_attr, attr_list, attr_clist, attr_set)))
return 0;
lex (li);
break;
return p;
}
-static Z_Complex *rpn_complex (struct yaz_pqf_parser *li, ODR o, oid_proto proto,
- int num_attr, int max_attr,
- int *attr_list, char **attr_clist,
- oid_value *attr_set)
+static Z_Complex *rpn_complex(struct yaz_pqf_parser *li, ODR o,
+ int num_attr, int max_attr,
+ int *attr_list, char **attr_clist,
+ int **attr_set)
{
Z_Complex *zc;
Z_Operator *zo;
}
lex (li);
if (!(zc->s1 =
- rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
- attr_clist, attr_set)))
+ rpn_structure(li, o, num_attr, max_attr, attr_list,
+ attr_clist, attr_set)))
return NULL;
if (!(zc->s2 =
- rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
- attr_clist, attr_set)))
+ rpn_structure(li, o, num_attr, max_attr, attr_list,
+ attr_clist, attr_set)))
return NULL;
return zc;
}
-static void rpn_term_type (struct yaz_pqf_parser *li, ODR o)
+static void rpn_term_type(struct yaz_pqf_parser *li, ODR o)
{
if (!li->query_look)
return ;
li->term_type = Z_Term_dateTime;
else if (compare_term (li, "null", 0))
li->term_type = Z_Term_null;
+#if 0
else if (compare_term(li, "range", 0))
{
/* prepare for external: range search .. */
li->term_type = Z_Term_external;
li->external_type = VAL_MULTISRCH2;
}
+#endif
lex (li);
}
-static Z_RPNStructure *rpn_structure (struct yaz_pqf_parser *li, ODR o,
- oid_proto proto,
- int num_attr, int max_attr,
- int *attr_list,
- char **attr_clist,
- oid_value *attr_set)
+static Z_RPNStructure *rpn_structure(struct yaz_pqf_parser *li, ODR o,
+ int num_attr, int max_attr,
+ int *attr_list,
+ char **attr_clist,
+ int **attr_set)
{
Z_RPNStructure *sz;
case 'p':
sz->which = Z_RPNStructure_complex;
if (!(sz->u.complex =
- rpn_complex (li, o, proto, num_attr, max_attr, attr_list,
+ rpn_complex (li, o, num_attr, max_attr, attr_list,
attr_clist, attr_set)))
return NULL;
break;
case 's':
sz->which = Z_RPNStructure_simple;
if (!(sz->u.simple =
- rpn_simple (li, o, proto, num_attr, attr_list,
+ rpn_simple (li, o, num_attr, attr_list,
attr_clist, attr_set)))
return NULL;
break;
num_attr++;
lex (li);
return
- rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
+ rpn_structure (li, o, num_attr, max_attr, attr_list,
attr_clist, attr_set);
case 'y':
lex (li);
rpn_term_type (li, o);
return
- rpn_structure (li, o, proto, num_attr, max_attr, attr_list,
+ rpn_structure (li, o, num_attr, max_attr, attr_list,
attr_clist, attr_set);
case 0: /* operator/operand expected! */
li->error = YAZ_PQF_ERROR_MISSING;
return sz;
}
-Z_RPNQuery *p_query_rpn_mk (ODR o, struct yaz_pqf_parser *li, oid_proto proto,
- const char *qbuf)
+Z_RPNQuery *p_query_rpn_mk(ODR o, struct yaz_pqf_parser *li, const char *qbuf)
{
Z_RPNQuery *zq;
int attr_array[1024];
char *attr_clist[512];
- oid_value attr_set[512];
- oid_value topSet = VAL_NONE;
+ int *attr_set[512];
+ int *top_set = 0;
zq = (Z_RPNQuery *)odr_malloc (o, sizeof(*zq));
lex (li);
if (li->query_look == 'r')
{
lex (li);
- topSet = query_oid_getvalbyname (li);
- if (topSet == VAL_NONE)
+ top_set = query_oid_getvalbyname(li, o);
+ if (!top_set)
{
li->error = YAZ_PQF_ERROR_ATTSET;
return NULL;
}
-
lex (li);
}
- if (topSet == VAL_NONE)
- topSet = p_query_dfset;
- if (topSet == VAL_NONE)
- topSet = VAL_BIB1;
+ if (!top_set)
+ {
+ top_set = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_ATTSET, OID_STR_BIB1, o);
+ }
- zq->attributeSetId = yaz_oidval_to_z3950oid(o, CLASS_ATTSET, topSet);
+ zq->attributeSetId = top_set;
if (!zq->attributeSetId)
{
return 0;
}
- if (!(zq->RPNStructure = rpn_structure (li, o, proto, 0, 512,
- attr_array, attr_clist, attr_set)))
+ if (!(zq->RPNStructure = rpn_structure(li, o, 0, 512,
+ attr_array, attr_clist, attr_set)))
return 0;
if (li->query_look)
{
return zq;
}
-Z_RPNQuery *p_query_rpn (ODR o, oid_proto proto, const char *qbuf)
+Z_RPNQuery *p_query_rpn(ODR o, const char *qbuf)
{
struct yaz_pqf_parser li;
li.term_type = Z_Term_general;
li.query_buf = li.query_ptr = qbuf;
li.lex_buf = 0;
- return p_query_rpn_mk (o, &li, proto, qbuf);
+ return p_query_rpn_mk(o, &li, qbuf);
}
-Z_AttributesPlusTerm *p_query_scan_mk (struct yaz_pqf_parser *li,
- ODR o, oid_proto proto,
- Odr_oid **attributeSetP,
- const char *qbuf)
+Z_AttributesPlusTerm *p_query_scan_mk(struct yaz_pqf_parser *li,
+ ODR o, oid_proto proto,
+ Odr_oid **attributeSetP,
+ const char *qbuf)
{
int attr_list[1024];
char *attr_clist[512];
- oid_value attr_set[512];
+ int *attr_set[512];
int num_attr = 0;
int max_attr = 512;
- oid_value topSet = VAL_NONE;
+ int *top_set = 0;
Z_AttributesPlusTerm *apt;
lex (li);
if (li->query_look == 'r')
{
lex (li);
- topSet = query_oid_getvalbyname (li);
-
+ top_set = query_oid_getvalbyname(li, o);
+ if (!top_set)
+ {
+ li->error = YAZ_PQF_ERROR_ATTSET;
+ return NULL;
+ }
lex (li);
}
- if (topSet == VAL_NONE)
- topSet = p_query_dfset;
- if (topSet == VAL_NONE)
- topSet = VAL_BIB1;
-
- *attributeSetP = yaz_oidval_to_z3950oid (o, CLASS_ATTSET, topSet);
+ if (!top_set)
+ {
+ top_set = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_ATTSET, OID_STR_BIB1, o);
+ }
+ *attributeSetP = top_set;
while (1)
{
li->error = YAZ_PQF_ERROR_MISSING;
return 0;
}
- apt = rpn_term (li, o, proto, num_attr, attr_list, attr_clist, attr_set);
+ apt = rpn_term(li, o, num_attr, attr_list, attr_clist, attr_set);
lex (li);
return p_query_scan_mk (&li, o, proto, attributeSetP, qbuf);
}
-int p_query_attset (const char *arg)
-{
- p_query_dfset = oid_getvalbyname (arg);
- return (p_query_dfset == VAL_NONE) ? -1 : 0;
-}
-
YAZ_PQF_Parser yaz_pqf_create (void)
{
YAZ_PQF_Parser p = (YAZ_PQF_Parser) xmalloc (sizeof(*p));
return p;
}
-void yaz_pqf_destroy (YAZ_PQF_Parser p)
+void yaz_pqf_destroy(YAZ_PQF_Parser p)
{
xfree (p);
}
-Z_RPNQuery *yaz_pqf_parse (YAZ_PQF_Parser p, ODR o, const char *qbuf)
+Z_RPNQuery *yaz_pqf_parse(YAZ_PQF_Parser p, ODR o, const char *qbuf)
{
if (!p)
return 0;
p->query_buf = p->query_ptr = qbuf;
p->lex_buf = 0;
- return p_query_rpn_mk (o, p, PROTO_Z3950, qbuf);
+ return p_query_rpn_mk (o, p, qbuf);
}
-Z_AttributesPlusTerm *yaz_pqf_scan (YAZ_PQF_Parser p, ODR o,
- Odr_oid **attributeSetP,
- const char *qbuf)
+Z_AttributesPlusTerm *yaz_pqf_scan(YAZ_PQF_Parser p, ODR o,
+ Odr_oid **attributeSetP,
+ const char *qbuf)
{
if (!p)
return 0;
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: prt-ext.c,v 1.7 2007-01-03 08:42:15 adam Exp $
+ * $Id: prt-ext.c,v 1.8 2007-04-12 13:52:57 adam Exp $
*/
/**
#include <yaz/proto.h>
+#include <yaz/oid_db.h>
#define PRT_EXT_DEBUG 0
#if PRT_EXT_DEBUG
*/
static Z_ext_typeent type_table[] =
{
- {VAL_SUTRS, Z_External_sutrs, (Odr_fun) z_SUTRS},
- {VAL_EXPLAIN, Z_External_explainRecord, (Odr_fun)z_ExplainRecord},
- {VAL_RESOURCE1, Z_External_resourceReport1, (Odr_fun)z_ResourceReport1},
- {VAL_RESOURCE2, Z_External_resourceReport2, (Odr_fun)z_ResourceReport2},
- {VAL_PROMPT1, Z_External_promptObject1, (Odr_fun)z_PromptObject1 },
- {VAL_GRS1, Z_External_grs1, (Odr_fun)z_GenericRecord},
- {VAL_EXTENDED, Z_External_extendedService, (Odr_fun)z_TaskPackage},
- {VAL_ITEMORDER, Z_External_itemOrder, (Odr_fun)z_IOItemOrder},
- {VAL_DIAG1, Z_External_diag1, (Odr_fun)z_DiagnosticFormat},
- {VAL_ESPEC1, Z_External_espec1, (Odr_fun)z_Espec1},
- {VAL_SUMMARY, Z_External_summary, (Odr_fun)z_BriefBib},
- {VAL_OPAC, Z_External_OPAC, (Odr_fun)z_OPACRecord},
- {VAL_SEARCHRES1, Z_External_searchResult1, (Odr_fun)z_SearchInfoReport},
- {VAL_DBUPDATE, Z_External_update, (Odr_fun)z_IUUpdate},
- {VAL_DBUPDATE0, Z_External_update0, (Odr_fun)z_IU0Update},
- {VAL_DBUPDATE1, Z_External_update0, (Odr_fun)z_IU0Update},
- {VAL_DATETIME, Z_External_dateTime, (Odr_fun)z_DateTime},
- {VAL_UNIVERSE_REPORT, Z_External_universeReport,(Odr_fun)z_UniverseReport},
- {VAL_ADMINSERVICE, Z_External_ESAdmin, (Odr_fun)z_Admin},
- {VAL_USERINFO1, Z_External_userInfo1, (Odr_fun) z_OtherInformation},
- {VAL_CHARNEG3, Z_External_charSetandLanguageNegotiation, (Odr_fun)
+ {{1, 2, 830, 10003, 5, 101,-1}, Z_External_sutrs, (Odr_fun) z_SUTRS},
+ {{1, 2, 830, 10003, 5, 100,-1}, Z_External_explainRecord, (Odr_fun)z_ExplainRecord},
+ {{1, 2, 840, 10003, 7, 1,-1}, Z_External_resourceReport1, (Odr_fun)z_ResourceReport1},
+ {{1, 2, 840, 10003, 7, 2,-1}, Z_External_resourceReport2, (Odr_fun)z_ResourceReport2},
+ {{1, 2, 840, 10003, 8, 1,-1}, Z_External_promptObject1, (Odr_fun)z_PromptObject1 },
+ {{1, 2, 840, 10003, 5, 105,-1}, Z_External_grs1, (Odr_fun)z_GenericRecord},
+ {{1, 2, 840, 10003, 5, 106,-1}, Z_External_extendedService, (Odr_fun)z_TaskPackage},
+ {{1, 2, 840, 10003, 9, 4,-1}, Z_External_itemOrder, (Odr_fun)z_IOItemOrder},
+ {{1, 2, 840, 10003, 4, 2,-1}, Z_External_diag1, (Odr_fun)z_DiagnosticFormat},
+ {{1, 2, 840, 10003, 11, 1,-1}, Z_External_espec1, (Odr_fun)z_Espec1},
+ {{1, 2, 840, 10003, 5, 103,-1}, Z_External_summary, (Odr_fun)z_BriefBib},
+ {{1, 2, 840, 10003, 5, 102,-1}, Z_External_OPAC, (Odr_fun)z_OPACRecord},
+ {{1, 2, 840, 10003, 10, 1,-1}, Z_External_searchResult1, (Odr_fun)z_SearchInfoReport},
+ {{1, 2, 840, 10003, 9, 5,-1}, Z_External_update, (Odr_fun)z_IUUpdate},
+ {{1, 2, 840, 10003, 9, 5,1,-1}, Z_External_update0, (Odr_fun)z_IU0Update},
+ {{1, 2, 840, 10003, 9, 5, 1, 1,-1}, Z_External_update0, (Odr_fun)z_IU0Update},
+ {{1, 2, 840, 10003, 10, 6,-1}, Z_External_dateTime, (Odr_fun)z_DateTime},
+ {{1, 2, 840, 10003, 7, 1000, 81, 1,-1}, Z_External_universeReport,(Odr_fun)z_UniverseReport},
+ {{1, 2, 840, 10003, 9, 1000, 81, 1,-1}, Z_External_ESAdmin, (Odr_fun)z_Admin},
+ {{1, 2, 840, 10003, 10, 3,-1}, Z_External_userInfo1, (Odr_fun) z_OtherInformation},
+ {{1, 2, 840, 10003, 15, 3,-1}, Z_External_charSetandLanguageNegotiation, (Odr_fun)
z_CharSetandLanguageNegotiation},
- {VAL_PROMPT1, Z_External_acfPrompt1, (Odr_fun) z_PromptObject1},
- {VAL_DES1, Z_External_acfDes1, (Odr_fun) z_DES_RN_Object},
- {VAL_KRB1, Z_External_acfKrb1, (Odr_fun) z_KRBObject},
- {VAL_MULTISRCH2, Z_External_multisrch2, (Odr_fun) z_MultipleSearchTerms_2},
- {VAL_CQL, Z_External_CQL, (Odr_fun) z_InternationalString},
- {VAL_NONE, 0, 0}
+ {{1, 2, 840, 10003, 8, 1,-1}, Z_External_acfPrompt1, (Odr_fun) z_PromptObject1},
+ {{1, 2, 840, 10003, 8, 2,-1}, Z_External_acfDes1, (Odr_fun) z_DES_RN_Object},
+ {{1, 2, 840, 10003, 8, 3,-1}, Z_External_acfKrb1, (Odr_fun) z_KRBObject},
+ {{1, 2, 840, 10003, 10, 5,-1}, Z_External_multisrch2, (Odr_fun) z_MultipleSearchTerms_2},
+ {{1, 2, 840, 10003, 16, 2, -1}, Z_External_CQL, (Odr_fun) z_InternationalString},
+ {{-1}, 0, 0}
};
-Z_ext_typeent *z_ext_getentbyref(oid_value val)
+Z_ext_typeent *z_ext_getentbyref(const int *oid)
{
- Z_ext_typeent *i;
+ Z_ext_typeent *p;
- for (i = type_table; i->dref != VAL_NONE; i++)
- if (i->dref == val)
- return i;
+ for (p = type_table; p->oid[0] != -1; p++)
+ if (!oid_oidcmp(oid, p->oid))
+ return p;
return 0;
}
*/
int z_External(ODR o, Z_External **p, int opt, const char *name)
{
- oident *oid;
Z_ext_typeent *type;
static Odr_arm arm[] =
#endif
/* Do we know this beast? */
if (o->direction == ODR_DECODE && (*p)->direct_reference &&
- (oid = oid_getentbyoid((*p)->direct_reference)) &&
- (type = z_ext_getentbyref(oid->value)))
+ (type = z_ext_getentbyref((*p)->direct_reference)))
{
int zclass, tag, cons;
/* OID is present and we know it */
odr_sequence_end(o);
}
-Z_External *z_ext_record(ODR o, int format, const char *buf, int len)
+Z_External *z_ext_record_oid(ODR o, const int *oid, const char *buf, int len)
{
Z_External *thisext;
+ char oid_str_buf[OID_STR_MAX];
+ const char *oid_str;
+ int oclass;
+ if (!oid)
+ return 0;
thisext = (Z_External *) odr_malloc(o, sizeof(*thisext));
thisext->descriptor = 0;
thisext->indirect_reference = 0;
- thisext->direct_reference =
- yaz_oidval_to_z3950oid (o, CLASS_RECSYN, format);
- if (!thisext->direct_reference)
- return 0;
+ oid_str = yaz_oid_to_string_buf(oid, &oclass, oid_str_buf);
+
+ thisext->direct_reference = odr_oiddup(o, oid);
if (len < 0) /* Structured data */
{
*/
thisext->u.grs1 = (Z_GenericRecord*) buf;
- switch (format)
+ if (!strcmp(oid_str, OID_STR_SUTRS))
{
- case VAL_SUTRS:
thisext->which = Z_External_sutrs;
- break;
- case VAL_GRS1:
+ }
+ else if (!strcmp(oid_str, OID_STR_GRS1))
+ {
thisext->which = Z_External_grs1;
- break;
- case VAL_EXPLAIN:
+ }
+ else if (!strcmp(oid_str, OID_STR_EXPLAIN))
+ {
thisext->which = Z_External_explainRecord;
- break;
- case VAL_SUMMARY:
+ }
+ else if (!strcmp(oid_str, OID_STR_SUMMARY))
+ {
thisext->which = Z_External_summary;
- break;
- case VAL_OPAC:
+ }
+ else if (!strcmp(oid_str, OID_STR_OPAC))
+ {
thisext->which = Z_External_OPAC;
- break;
- case VAL_EXTENDED:
+ }
+ else if (!strcmp(oid_str, OID_STR_EXTENDED))
+ {
thisext->which = Z_External_extendedService;
- break;
- default:
+ }
+ else
+ {
return 0;
}
}
- else if (format == VAL_SUTRS) /* SUTRS is a single-ASN.1-type */
+ else if (!strcmp(oid_str, OID_STR_SUTRS)) /* SUTRS is a single-ASN.1-type */
{
Odr_oct *sutrs = (Odr_oct *)odr_malloc(o, sizeof(*sutrs));
* Copyright (C) 1995-2007, Index Data ApS
* All rights reserved.
*
- * $Id: querytowrbuf.c,v 1.8 2007-03-19 21:07:35 adam Exp $
+ * $Id: querytowrbuf.c,v 1.9 2007-04-12 13:52:57 adam Exp $
*/
/** \file querytowrbuf.c
#include <yaz/logrpn.h>
#include <yaz/querytowrbuf.h>
+#include <yaz/oid_db.h>
static void yaz_term_to_wrbuf(WRBUF b, const char *term, int len)
{
const Z_AttributeElement *element)
{
int i;
- char *setname="";
- char *sep = ""; /* optional space after attrset name */
+ char oid_name_str[OID_STR_MAX];
+ const char *setname = 0;
+ char *sep = " "; /* optional space after attrset name */
if (element->attributeSet)
{
- oident *attrset;
- attrset = oid_getentbyoid (element->attributeSet);
- setname = attrset->desc;
- sep = " ";
+ setname = yaz_oid_to_string_buf(element->attributeSet,
+ 0, oid_name_str);
+ }
+ if (!setname)
+ {
+ setname = "";
+ sep = "";
}
switch (element->which)
{
void yaz_rpnquery_to_wrbuf(WRBUF b, const Z_RPNQuery *rpn)
{
- oident *attrset;
- enum oid_value ast;
-
- attrset = oid_getentbyoid (rpn->attributeSetId);
- if (attrset)
+ if (rpn->attributeSetId)
{
- ast = attrset->value;
- wrbuf_printf(b, "@attrset %s ", attrset->desc);
+ char oid_name_str[OID_STR_MAX];
+ const char *oid_name = yaz_oid_to_string_buf(rpn->attributeSetId,
+ 0, oid_name_str);
+ if (oid_name)
+ wrbuf_printf(b, "@attrset %s ", oid_name);
}
yaz_rpnstructure_to_wrbuf(b, rpn->RPNStructure);
wrbuf_chop_right(b);
}
void yaz_scan_to_wrbuf(WRBUF b, const Z_AttributesPlusTerm *zapt,
- oid_value ast)
+ const int *attrbute_set)
{
/* should print attr set here */
wrbuf_printf(b, "RPN ");
* Copyright (C) 2005-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: retrieval.c,v 1.17 2007-03-19 14:40:07 adam Exp $
+ * $Id: retrieval.c,v 1.18 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file retrieval.c
#include <yaz/nmem.h>
#include <yaz/tpath.h>
#include <yaz/proto.h>
+#include <yaz/oid_db.h>
#if YAZ_HAVE_XML2
#include <libxml/parser.h>
{
yaz_retrieval_t p = xmalloc(sizeof(*p));
p->odr = odr_createmem(ODR_ENCODE);
- p->nmem = p->odr->mem;
+ p->nmem = odr_getmem(p->odr);
p->wr_error = wrbuf_alloc();
p->list = 0;
p->path = 0;
if (!xmlStrcmp(attr->name, BAD_CAST "syntax") &&
attr->children && attr->children->type == XML_TEXT_NODE)
{
- el->syntax = yaz_str_to_z3950oid(
- p->odr, CLASS_RECSYN,
- (const char *) attr->children->content);
+ el->syntax = yaz_string_to_oid_odr(
+ yaz_oid_std(),
+ CLASS_RECSYN,
+ (const char *) attr->children->content,
+ p->odr);
if (!el->syntax)
{
wrbuf_printf(p->wr_error, "Element <retrieval>: "
&& attr->children
&& attr->children->type == XML_TEXT_NODE){
el->backend_syntax
- = yaz_str_to_z3950oid(p->odr, CLASS_RECSYN,
- (const char *) attr->children->content);
-
+ = yaz_string_to_oid_odr(
+ yaz_oid_std(),
+ CLASS_RECSYN,
+ (const char *) attr->children->content,
+ p->odr);
if (!el->backend_syntax){
wrbuf_printf(p->wr_error,
"Element <backend syntax='%s'>: "
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: seshigh.c,v 1.112 2007-03-19 14:40:07 adam Exp $
+ * $Id: seshigh.c,v 1.113 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file seshigh.c
#include "session.h"
#include "mime.h"
#include <yaz/proto.h>
-#include <yaz/oid.h>
+#include <yaz/oid_db.h>
#include <yaz/log.h>
#include <yaz/logrpn.h>
#include <yaz/querytowrbuf.h>
#include <yaz/otherinfo.h>
#include <yaz/yaz-util.h>
#include <yaz/pquery.h>
+#include <yaz/oid_db.h>
#include <yaz/srw.h>
#include <yaz/backend.h>
{
int r;
const char *input_schema = yaz_get_esn(rr->comp);
- Odr_oid *input_syntax_raw = rr->request_format_raw;
+ Odr_oid *input_syntax_raw = rr->request_format;
const char *backend_schema = 0;
Odr_oid *backend_syntax = 0;
}
if (backend_schema)
{
- yaz_set_esn(&rr->comp, backend_schema, rr->stream->mem);
+ yaz_set_esn(&rr->comp, backend_schema, odr_getmem(rr->stream));
}
if (backend_syntax)
- {
- oident *oident_syntax = oid_getentbyoid(backend_syntax);
-
- rr->request_format_raw = backend_syntax;
-
- if (oident_syntax)
- rr->request_format = oident_syntax->value;
- else
- rr->request_format = VAL_NONE;
- }
+ rr->request_format = backend_syntax;
}
(*assoc->init->bend_fetch)(assoc->backend, rr);
if (rc && rr->record && rr->errcode == 0 && rr->len > 0)
wrbuf_destroy(output_record);
}
if (match_syntax)
- {
- struct oident *oi = oid_getentbyoid(match_syntax);
- rr->output_format = oi ? oi->value : VAL_NONE;
- rr->output_format_raw = match_syntax;
- }
+ rr->output_format = match_syntax;
if (match_schema)
rr->schema = odr_strdup(rr->stream, match_schema);
return 0;
rr.setname = "default";
rr.number = pos;
rr.referenceId = 0;
- rr.request_format = VAL_TEXT_XML;
- rr.request_format_raw = yaz_oidval_to_z3950oid(assoc->decode,
- CLASS_RECSYN,
- VAL_TEXT_XML);
+ rr.request_format = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_RECSYN,
+ OID_STR_XML,
+ assoc->decode);
rr.comp = (Z_RecordComposition *)
odr_malloc(assoc->decode, sizeof(*rr.comp));
rr.comp->which = Z_RecordComp_complex;
bprr->setname = "default";
bprr->start = start;
bprr->number = number;
- bprr->format = VAL_TEXT_XML;
if (srw_req->recordSchema)
{
bprr->comp = (Z_RecordComposition *) odr_malloc(assoc->decode,
if (srw_req->query_type == Z_SRW_query_type_pqf &&
assoc->init->bend_scan)
{
- Odr_oid *scan_attributeSet = 0;
- oident *attset;
YAZ_PQF_Parser pqf_parser = yaz_pqf_create();
bsrr->term = yaz_pqf_scan(pqf_parser, assoc->decode,
- &scan_attributeSet,
+ &bsrr->attributeset,
srw_req->scanClause.pqf);
- if (scan_attributeSet &&
- (attset = oid_getentbyoid(scan_attributeSet)) &&
- (attset->oclass == CLASS_ATTSET ||
- attset->oclass == CLASS_GENERAL))
- bsrr->attributeset = attset->value;
- else
- bsrr->attributeset = VAL_NONE;
yaz_pqf_destroy(pqf_parser);
bsrr->scanClause = 0;
((int (*)(void *, bend_scan_rr *))
{
int srw_error;
bsrr->scanClause = 0;
- bsrr->attributeset = VAL_NONE;
+ bsrr->attributeset = 0;
bsrr->term = odr_malloc(assoc->decode, sizeof(*bsrr->term));
srw_error = cql2pqf_scan(assoc->encode,
srw_req->scanClause.cql,
&& assoc->init->bend_srw_scan)
{
bsrr->term = 0;
- bsrr->attributeset = VAL_NONE;
+ bsrr->attributeset = 0;
bsrr->scanClause = srw_req->scanClause.cql;
((int (*)(void *, bend_scan_rr *))
(*assoc->init->bend_srw_scan))(assoc->backend, bsrr);
static char *get_vhost(Z_OtherInformation *otherInfo)
{
- return yaz_oi_get_string_oidval(&otherInfo, VAL_PROXY, 1, 0);
+ const int *oid = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_USERINFO, OID_STR_PROXY);
+ return yaz_oi_get_string_oid(&otherInfo, oid, 1, 0);
}
/*
assoc->init->implementation_name,
odr_prepend(assoc->encode, "GFS", resp->implementationName));
- version = odr_strdup(assoc->encode, "$Revision: 1.112 $");
+ version = odr_strdup(assoc->encode, "$Revision: 1.113 $");
if (strlen(version) > 10) /* check for unexpanded CVS strings */
version[strlen(version)-2] = '\0';
resp->implementationVersion = odr_prepend(assoc->encode,
static Z_Records *pack_records(association *a, char *setname, int start,
int *num, Z_RecordComposition *comp,
- int *next, int *pres, oid_value format,
+ int *next, int *pres,
Z_ReferenceId *referenceId,
int *oid, int *errcode)
{
freq.surrogate_flag = 0;
freq.number = recno;
freq.comp = comp;
- freq.request_format = format;
- freq.request_format_raw = oid;
- freq.output_format = format;
- freq.output_format_raw = 0;
+ freq.request_format = oid;
+ freq.output_format = 0;
freq.stream = a->encode;
freq.print = a->print;
freq.referenceId = referenceId;
thisrec->databaseName = 0;
thisrec->which = Z_NamePlusRecord_databaseRecord;
- if (freq.output_format_raw)
- {
- struct oident *ident = oid_getentbyoid(freq.output_format_raw);
- freq.output_format = ident->value;
- }
- thisrec->u.databaseRecord = z_ext_record(a->encode, freq.output_format,
- freq.record, freq.len);
+ if (!freq.output_format)
+ freq.output_format = freq.request_format;
+ thisrec->u.databaseRecord = z_ext_record_oid(
+ a->encode, freq.output_format, freq.record, freq.len);
if (!thisrec->u.databaseRecord)
return 0;
reclist->records[reclist->num_records] = thisrec;
bsrr->basenames = req->databaseNames;
bsrr->query = req->query;
bsrr->stream = assoc->encode;
- nmem_transfer(bsrr->stream->mem, reqb->request_mem);
+ nmem_transfer(odr_getmem(bsrr->stream), reqb->request_mem);
bsrr->decode = assoc->decode;
bsrr->print = assoc->print;
bsrr->hits = 0;
if (*toget && !resp->records)
{
- oident *prefformat;
- oid_value form;
int *presst = odr_intdup(assoc->encode, 0);
-
- if (!(prefformat = oid_getentbyoid(req->preferredRecordSyntax)))
- form = VAL_NONE;
- else
- form = prefformat->value;
-
/* Call bend_present if defined */
if (assoc->init->bend_present)
{
bprr->setname = req->resultSetName;
bprr->start = 1;
bprr->number = *toget;
- bprr->format = form;
+ bprr->format = req->preferredRecordSyntax;
bprr->comp = compp;
bprr->referenceId = req->referenceId;
bprr->stream = assoc->encode;
}
if (!resp->records)
- resp->records = pack_records(assoc, req->resultSetName, 1,
- toget, compp, next, presst, form, req->referenceId,
- req->preferredRecordSyntax, NULL);
+ resp->records = pack_records(
+ assoc, req->resultSetName, 1,
+ toget, compp, next, presst, req->referenceId,
+ req->preferredRecordSyntax, NULL);
if (!resp->records)
return 0;
resp->numberOfRecordsReturned = toget;
int *fd)
{
Z_PresentRequest *req = reqb->apdu_request->u.presentRequest;
- oident *prefformat;
- oid_value form;
Z_APDU *apdu;
Z_PresentResponse *resp;
int *next;
yaz_log(log_requestdetail, "Got PresentRequest.");
- if (!(prefformat = oid_getentbyoid(req->preferredRecordSyntax)))
- form = VAL_NONE;
- else
- form = prefformat->value;
resp = (Z_PresentResponse *)odr_malloc (assoc->encode, sizeof(*resp));
resp->records = 0;
resp->presentStatus = odr_intdup(assoc->encode, 0);
bprr->setname = req->resultSetId;
bprr->start = *req->resultSetStartPoint;
bprr->number = *req->numberOfRecordsRequested;
- bprr->format = form;
+ bprr->format = req->preferredRecordSyntax;
bprr->comp = req->recordComposition;
bprr->referenceId = req->referenceId;
bprr->stream = assoc->encode;
pack_records(assoc, req->resultSetId, *req->resultSetStartPoint,
num, req->recordComposition, next,
resp->presentStatus,
- form, req->referenceId, req->preferredRecordSyntax,
+ req->referenceId, req->preferredRecordSyntax,
&errcode);
}
if (log_request)
Z_ListEntries *ents = (Z_ListEntries *)
odr_malloc (assoc->encode, sizeof(*ents));
Z_DiagRecs *diagrecs_p = NULL;
- oident *attset;
bend_scan_rr *bsrr = (bend_scan_rr *)
odr_malloc (assoc->encode, sizeof(*bsrr));
struct scan_entry *save_entries;
}
save_entries = bsrr->entries; /* save it so we can compare later */
- if (req->attributeSet &&
- (attset = oid_getentbyoid(req->attributeSet)) &&
- (attset->oclass == CLASS_ATTSET || attset->oclass == CLASS_GENERAL))
- bsrr->attributeset = attset->value;
- else
- bsrr->attributeset = VAL_NONE;
+ bsrr->attributeset = req->attributeSet;
log_scan_term_level (log_requestdetail, req->termListAndStartPoint,
bsrr->attributeset);
bsrr->term_position = req->preferredPositionInResponse ?
}
/* Do something with the members of bend_extendedservice */
if (esrequest.taskPackage)
- resp->taskPackage = z_ext_record (assoc->encode, VAL_EXTENDED,
- (const char *) esrequest.taskPackage,
- -1);
+ {
+ const int *oid = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_EXTSERV, OID_STR_EXTENDED);
+ resp->taskPackage = z_ext_record_oid(assoc->encode, oid,
+ (const char *) esrequest.taskPackage,
+ -1);
+ }
yaz_log(YLOG_DEBUG,"Send the result apdu");
return apdu;
}
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: session.h,v 1.13 2007-01-03 08:42:15 adam Exp $
+ * $Id: session.h,v 1.14 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file session.h
#include <yaz/comstack.h>
#include <yaz/cql.h>
#include <yaz/odr.h>
-#include <yaz/oid.h>
#include <yaz/proto.h>
#include <yaz/backend.h>
#include <yaz/retrieval.h>
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: sortspec.c,v 1.8 2007-01-03 08:42:15 adam Exp $
+ * $Id: sortspec.c,v 1.9 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file sortspec.c
#include <stdlib.h>
#include <yaz/proto.h>
-#include <yaz/oid.h>
#include <yaz/sortspec.h>
+#include <yaz/oid_db.h>
Z_SortKeySpecList *yaz_sort_spec (ODR out, const char *arg)
{
sk->u.sortAttributes = (Z_SortAttributes *)
odr_malloc (out, sizeof(*sk->u.sortAttributes));
sk->u.sortAttributes->id =
- yaz_oidval_to_z3950oid(out, CLASS_ATTSET, VAL_BIB1);
+ yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_ATTSET, OID_STR_BIB1, out);
sk->u.sortAttributes->list = (Z_AttributeList *)
odr_malloc (out, sizeof(*sk->u.sortAttributes->list));
sk->u.sortAttributes->list->attributes = (Z_AttributeElement **)
* Copyright (C) 1995-2007, Index Data ApS
* All rights reserved.
*
- * $Id: xmlquery.c,v 1.12 2007-01-03 08:42:15 adam Exp $
+ * $Id: xmlquery.c,v 1.13 2007-04-12 13:52:57 adam Exp $
*/
/** \file xmlquery.c
{
char formstr[30];
const char *setname = 0;
+ char oid_name_str[OID_STR_MAX];
if (element->attributeSet)
{
- oident *attrset;
- attrset = oid_getentbyoid (element->attributeSet);
- setname = attrset->desc;
+ setname = yaz_oid_to_string_buf(element->attributeSet,
+ 0, oid_name_str);
}
if (element->which == Z_AttributeValue_numeric)
xmlNodePtr yaz_query2xml_rpn(const Z_RPNQuery *rpn, xmlNodePtr parent)
{
- oident *attrset = oid_getentbyoid (rpn->attributeSetId);
- if (attrset && attrset->value)
- xmlNewProp(parent, BAD_CAST "set", BAD_CAST attrset->desc);
+ if (rpn->attributeSetId)
+ {
+ char oid_name_str[OID_STR_MAX];
+ const char *setname = yaz_oid_to_string_buf(rpn->attributeSetId,
+ 0, oid_name_str);
+ if (setname)
+ xmlNewProp(parent, BAD_CAST "set", BAD_CAST setname);
+ }
return yaz_query2xml_rpnstructure(rpn->RPNStructure, parent);
}
*elem = (Z_AttributeElement *) odr_malloc(odr, sizeof(**elem));
if (set)
- (*elem)->attributeSet = yaz_str_to_z3950oid(odr, CLASS_ATTSET,
- (const char *)set);
+ (*elem)->attributeSet = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_ATTSET,
+ (const char *) set,
+ odr);
else
(*elem)->attributeSet = 0;
(*elem)->attributeType = intVal(odr, (const char *) type);
char *strVal(const xmlNode *ptr_cdata, ODR odr)
{
- return nmem_text_node_cdata(ptr_cdata, odr->mem);
+ return nmem_text_node_cdata(ptr_cdata, odr_getmem(odr));
}
void yaz_xml2query_term(const xmlNode *ptr,
*query = (Z_RPNQuery*) odr_malloc(odr, sizeof(Z_RPNQuery));
if (set)
- (*query)->attributeSetId = yaz_str_to_z3950oid(odr, CLASS_ATTSET, set);
+ (*query)->attributeSetId = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_ATTSET, set, odr);
else
(*query)->attributeSetId = 0;
yaz_xml2query_rpnstructure(ptr->children, &(*query)->RPNStructure,
+++ /dev/null
-/*
- * Copyright (C) 1995-2007, Index Data ApS
- * See the file LICENSE for details.
- *
- * $Id: z3950oid.c,v 1.6 2007-01-03 08:42:15 adam Exp $
- */
-
-/** \file z3950oid.c
- \brief Z3950 OID conversion utilities
-*/
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <yaz/proto.h>
-
-Odr_oid *yaz_oidval_to_z3950oid (ODR o, int oid_class, int oid_value)
-{
- oident ident;
- int oid[OID_SIZE];
-
- ident.proto = PROTO_Z3950;
- ident.oclass = (enum oid_class) oid_class;
- ident.value = (enum oid_value) oid_value;
-
- if (ident.value == VAL_NONE)
- return 0;
-
- return odr_oiddup(o, oid_ent_to_oid(&ident, oid));
-}
-
-Odr_oid *yaz_str_to_z3950oid (ODR o, int oid_class, const char *str)
-{
- struct oident ident;
- int oid[OID_SIZE];
-
- ident.proto = PROTO_Z3950;
- ident.oclass = (enum oid_class) oid_class;
- ident.value = oid_getvalbyname(str);
-
- if (ident.value == VAL_NONE)
- return 0;
-
- return odr_oiddup(o, oid_ent_to_oid(&ident, oid));
-}
-
-const char *yaz_z3950oid_to_str (Odr_oid *oid, int *oid_class)
-{
- struct oident *ident = oid_getentbyoid(oid);
-
- if (!ident || ident->value == VAL_NONE)
- return 0;
- *oid_class = ident->oclass;
- return ident->desc;
-}
-
-
-const char* yaz_z3950_oid_value_to_str(oid_value ov, oid_class oc)
-{
- struct oident tmpentry;
- int tmp_oid[OID_SIZE];
-
- tmpentry.proto = PROTO_Z3950;
- tmpentry.oclass = oc;
- tmpentry.value = ov;
-
- if( oid_ent_to_oid(&tmpentry,tmp_oid) )
- {
- return tmpentry.desc;
- }
- else
- {
- return "";
- }
-}
-/*
- * Local variables:
- * c-basic-offset: 4
- * indent-tabs-mode: nil
- * End:
- * vim: shiftwidth=4 tabstop=8 expandtab
- */
-
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: zget.c,v 1.12 2007-01-03 08:42:15 adam Exp $
+ * $Id: zget.c,v 1.13 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file zget.c
*/
#include <yaz/proto.h>
+#include <yaz/oid_db.h>
Z_InitRequest *zget_InitRequest(ODR o)
{
Z_DefaultDiagFormat *dr = (Z_DefaultDiagFormat *)
odr_malloc (o, sizeof(*dr));
- dr->diagnosticSetId = yaz_oidval_to_z3950oid (o, CLASS_DIAGSET, VAL_BIB1);
+ dr->diagnosticSetId = yaz_string_to_oid_odr(
+ yaz_oid_std(), CLASS_DIAGSET, OID_STR_BIB1, o);
dr->condition = odr_intdup(o, error);
dr->which = Z_DefaultDiagFormat_v2Addinfo;
dr->u.v2Addinfo = odr_strdup (o, addinfo ? addinfo : "");
Z_External *zget_init_diagnostics(ODR odr, int error, const char *addinfo)
{
Z_External *x, *x2;
- oident oid;
Z_OtherInformation *u;
Z_OtherInformationUnit *l;
Z_DiagnosticFormat *d;
x = (Z_External*) odr_malloc(odr, sizeof *x);
x->descriptor = 0;
x->indirect_reference = 0;
- oid.proto = PROTO_Z3950;
- oid.oclass = CLASS_USERINFO;
- oid.value = VAL_USERINFO1;
- x->direct_reference = odr_oiddup(odr, oid_getoidbyent(&oid));
+ x->direct_reference = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_USERINFO,
+ OID_STR_USERINFO_1,
+ odr);
x->which = Z_External_userInfo1;
u = odr_malloc(odr, sizeof *u);
l->information.externallyDefinedInfo = x2;
x2->descriptor = 0;
x2->indirect_reference = 0;
- oid.oclass = CLASS_DIAGSET;
- oid.value = VAL_DIAG1;
- x2->direct_reference = odr_oiddup(odr, oid_getoidbyent(&oid));
+ x2->direct_reference = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_DIAGSET,
+ OID_STR_DIAG1,
+ odr);
x2->which = Z_External_diag1;
d = (Z_DiagnosticFormat*) odr_malloc(odr, sizeof *d);
const char *addinfo)
{
Z_External *x, *x2;
- oident oid;
Z_OtherInformation *u;
Z_OtherInformationUnit *l;
Z_DiagnosticFormat *d;
l->information.externallyDefinedInfo = x2;
x2->descriptor = 0;
x2->indirect_reference = 0;
- oid.oclass = CLASS_DIAGSET;
- oid.proto = PROTO_Z3950;
- oid.value = VAL_DIAG1;
- x2->direct_reference = odr_oiddup(odr, oid_getoidbyent(&oid));
+
+ x2->direct_reference = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_DIAGSET,
+ OID_STR_DIAG1,
+ odr);
x2->which = Z_External_diag1;
d = (Z_DiagnosticFormat*) odr_malloc(odr, sizeof *d);
x = (Z_External*) odr_malloc(odr, sizeof *x);
x->descriptor = 0;
x->indirect_reference = 0;
- oid.proto = PROTO_Z3950;
- oid.oclass = CLASS_USERINFO;
- oid.value = VAL_USERINFO1;
- x->direct_reference = odr_oiddup(odr, oid_getoidbyent(&oid));
+ x->direct_reference = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_USERINFO,
+ OID_STR_USERINFO_1,
+ odr);
x->which = Z_External_octet;
x->u.octet_aligned = (Odr_oct *) odr_malloc(odr, sizeof(Odr_oct));
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: zoom-c.c,v 1.122 2007-03-21 11:27:46 adam Exp $
+ * $Id: zoom-c.c,v 1.123 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file zoom-c.c
* This wrapper is just for logging failed lookups. It would be nicer
* if it could cause failure when a lookup fails, but that's hard.
*/
-static Odr_oid *zoom_yaz_str_to_z3950oid(ZOOM_connection c,
- int oid_class, const char *str) {
- Odr_oid *res = yaz_str_to_z3950oid(c->odr_out, oid_class, str);
+static int *zoom_yaz_str_to_z3950oid(ZOOM_connection c,
+ int oid_class, const char *str) {
+ int *res = yaz_string_to_oid_odr(yaz_oid_std(), oid_class, str,
+ c->odr_out);
if (res == 0)
yaz_log(YLOG_WARN, "%p OID lookup (%d, '%s') failed",
c, (int) oid_class, str);
}
if (!cp)
cp = "Default";
- nmem_strsplit(odr->mem, "+", cp, &databaseNames, num);
+ nmem_strsplit(odr_getmem(odr), "+", cp, &databaseNames, num);
return databaseNames;
}
s->query_string = odr_strdup(s->odr, str);
s->z_query = (Z_Query *) odr_malloc(s->odr, sizeof(*s->z_query));
s->z_query->which = Z_Query_type_1;
- s->z_query->u.type_1 = p_query_rpn(s->odr, PROTO_Z3950, str);
+ s->z_query->u.type_1 = p_query_rpn(s->odr, str);
if (!s->z_query->u.type_1)
{
yaz_log(log_details, "%p ZOOM_query_prefix str=%s failed", s, str);
for (i = 0; i<200; i++)
{
size_t len;
+ int *oid;
Z_OtherInformation **oi;
char buf[80];
const char *val;
const char *cp;
- int oidval;
sprintf(buf, "otherInfo%d", i);
val = ZOOM_options_get(c->options, buf);
len = sizeof(buf)-1;
memcpy(buf, val, len);
buf[len] = '\0';
- oidval = oid_getvalbyname(buf);
- if (oidval == VAL_NONE)
+
+ oid = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_USERINFO,
+ buf, out);
+ if (!oid)
continue;
yaz_oi_APDU(a, &oi);
- yaz_oi_set_string_oidval(oi, out, oidval, 1, cp+1);
+ yaz_oi_set_string_oid(oi, out, oid, 1, cp+1);
}
}
assert(a);
if (c->cookie_out)
{
+ const int *oid = yaz_string_to_oid(
+ yaz_oid_std(), CLASS_USERINFO, OID_STR_COOKIE);
Z_OtherInformation **oi;
yaz_oi_APDU(a, &oi);
- yaz_oi_set_string_oidval(oi, out, VAL_COOKIE, 1, c->cookie_out);
+ yaz_oi_set_string_oid(oi, out, oid, 1, c->cookie_out);
}
if (c->client_IP)
{
+ const int *oid = yaz_string_to_oid(
+ yaz_oid_std(), CLASS_USERINFO, OID_STR_CLIENT_IP);
Z_OtherInformation **oi;
yaz_oi_APDU(a, &oi);
- yaz_oi_set_string_oidval(oi, out, VAL_CLIENT_IP, 1, c->client_IP);
+ yaz_oi_set_string_oid(oi, out, oid, 1, c->client_IP);
}
otherInfo_attach(c, a, out);
if (!z_APDU(out, &a, 0, 0))
odr_prepend(c->odr_out, "ZOOM-C",
ireq->implementationName));
- version = odr_strdup(c->odr_out, "$Revision: 1.122 $");
+ version = odr_strdup(c->odr_out, "$Revision: 1.123 $");
if (strlen(version) > 10) /* check for unexpanded CVS strings */
version[strlen(version)-2] = '\0';
ireq->implementationVersion =
ireq->idAuthentication = auth;
}
if (c->proxy)
- yaz_oi_set_string_oidval(&ireq->otherInfo, c->odr_out,
- VAL_PROXY, 1, c->host_port);
+ {
+ const int *oid = yaz_string_to_oid(
+ yaz_oid_std(), CLASS_USERINFO, OID_STR_CLIENT_IP);
+ yaz_oi_set_string_oid(&ireq->otherInfo, c->odr_out,
+ oid, 1, c->host_port);
+ }
if (c->charset || c->lang)
{
Z_OtherInformation **oi;
xfree(c->addinfo);
c->addinfo = 0;
set_dset_error(c, *r->condition,
- yaz_z3950oid_to_str(r->diagnosticSetId, &oclass),
+ yaz_oid_to_string(yaz_oid_std(),
+ r->diagnosticSetId, &oclass),
addinfo, 0);
}
break;
}
if (diagset)
- *diagset = yaz_z3950oid_to_str(ddf->diagnosticSetId, &oclass);
+ *diagset =
+ yaz_oid_to_string(yaz_oid_std(),
+ ddf->diagnosticSetId, &oclass);
}
else
{
if (npr->which == Z_NamePlusRecord_databaseRecord)
{
Z_External *r = (Z_External *) npr->u.databaseRecord;
- oident *ent = oid_getentbyoid(r->direct_reference);
- if (ent)
- desc = ent->desc;
+ desc = yaz_oid_to_string(yaz_oid_std(), r->direct_reference, 0);
}
if (!desc)
desc = "none";
if (!strcmp(type, "render"))
{
Z_External *r = (Z_External *) npr->u.databaseRecord;
- oident *ent = oid_getentbyoid(r->direct_reference);
+ const int *oid = r->direct_reference;
/* render bibliographic record .. */
if (r->which == Z_External_OPAC)
r = r->u.opac->bibliographicRecord;
if (!r)
return 0;
- ent = oid_getentbyoid(r->direct_reference);
+ oid = r->direct_reference;
}
if (r->which == Z_External_sutrs)
return record_iconv_return(rec, len,
charset);
else if (r->which == Z_External_octet)
{
- const char *ret_buf;
- switch (ent->value)
+ if (yaz_oid_is_iso2709(oid))
{
- case VAL_SOIF:
- case VAL_HTML:
- case VAL_SUTRS:
- break;
- case VAL_TEXT_XML:
- case VAL_APPLICATION_XML:
- break;
- default:
- ret_buf = marc_iconv_return(
+ const char *ret_buf = marc_iconv_return(
rec, YAZ_MARC_LINE, len,
(const char *) r->u.octet_aligned->buf,
r->u.octet_aligned->len,
else if (!strcmp(type, "xml"))
{
Z_External *r = (Z_External *) npr->u.databaseRecord;
- oident *ent = oid_getentbyoid(r->direct_reference);
+ const int *oid = r->direct_reference;
/* render bibliographic record .. */
if (r->which == Z_External_OPAC)
r = r->u.opac->bibliographicRecord;
if (!r)
return 0;
- ent = oid_getentbyoid(r->direct_reference);
+ oid = r->direct_reference;
}
if (r->which == Z_External_sutrs)
charset);
else if (r->which == Z_External_octet)
{
- const char *ret_buf;
int marc_decode_type = YAZ_MARC_MARCXML;
-
- switch (ent->value)
+ if (yaz_oid_is_iso2709(oid))
{
- case VAL_SOIF:
- case VAL_HTML:
- case VAL_SUTRS:
- break;
- case VAL_TEXT_XML:
- case VAL_APPLICATION_XML:
- break;
- default:
- ret_buf = marc_iconv_return(
+ const char *ret_buf = marc_iconv_return(
rec, marc_decode_type, len,
(const char *) r->u.octet_aligned->buf,
r->u.octet_aligned->len,
resultset, *start, *count);
/* transfer our response to search_nmem .. we need it later */
- nmem_transfer(resultset->odr->mem, nmem);
+ nmem_transfer(odr_getmem(resultset->odr), nmem);
nmem_destroy(nmem);
if (present_phase && p->num_records == 0)
{
if (res->entries && res->entries->nonsurrogateDiagnostics)
response_diag(c, res->entries->nonsurrogateDiagnostics[0]);
scan->scan_response = res;
- nmem_transfer(scan->odr->mem, nmem);
+ nmem_transfer(odr_getmem(scan->odr), nmem);
if (res->stepSize)
ZOOM_options_set_int(scan->options, "stepSize", *res->stepSize);
if (res->positionOfTerm)
ZOOM_options_set(scan->options, key, val);
}
-static Z_APDU *create_es_package(ZOOM_package p, int type)
+static Z_APDU *create_es_package(ZOOM_package p, const char *type)
{
const char *str;
Z_APDU *apdu = zget_APDU(p->odr_out, Z_APDU_extendedServicesRequest);
str = ZOOM_options_get(p->options, "package-name");
if (str && *str)
- req->packageName = nmem_strdup(p->odr_out->mem, str);
+ req->packageName = odr_strdup(p->odr_out, str);
str = ZOOM_options_get(p->options, "user-id");
if (str)
- req->userId = nmem_strdup(p->odr_out->mem, str);
+ req->userId = odr_strdup(p->odr_out, str);
- req->packageType = yaz_oidval_to_z3950oid(p->odr_out, CLASS_EXTSERV,
- type);
+ req->packageType = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_EXTSERV,
+ type, p->odr_out);
str = ZOOM_options_get(p->options, "function");
if (str)
}
else
{
- oident oid;
int illRequest_size = 0;
char *illRequest_buf = odr_getbuf(out, &illRequest_size, 0);
- oid.proto = PROTO_GENERAL;
- oid.oclass = CLASS_GENERAL;
- oid.value = VAL_ISO_ILL_1;
-
r = (Z_External *) odr_malloc(out, sizeof(*r));
- r->direct_reference = odr_oiddup(out,oid_getoidbyent(&oid));
+ r->direct_reference = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_GENERAL,
+ OID_STR_ILL_1,
+ out);
r->indirect_reference = 0;
r->descriptor = 0;
r->which = Z_External_single;
str = ZOOM_options_get(p->options, "contact-name");
req->u.esRequest->toKeep->contact->name = str ?
- nmem_strdup(p->odr_out->mem, str) : 0;
+ odr_strdup(p->odr_out, str) : 0;
str = ZOOM_options_get(p->options, "contact-phone");
req->u.esRequest->toKeep->contact->phone = str ?
- nmem_strdup(p->odr_out->mem, str) : 0;
+ odr_strdup(p->odr_out, str) : 0;
str = ZOOM_options_get(p->options, "contact-email");
req->u.esRequest->toKeep->contact->email = str ?
- nmem_strdup(p->odr_out->mem, str) : 0;
+ odr_strdup(p->odr_out, str) : 0;
req->u.esRequest->toKeep->addlBilling = 0;
odr_malloc(p->odr_out, sizeof(Z_IOResultSetItem));
req->u.esRequest->notToKeep->resultSetItem->resultSetId =
- nmem_strdup(p->odr_out->mem, str);
+ odr_strdup(p->odr_out, str);
req->u.esRequest->notToKeep->resultSetItem->item =
(int *) odr_malloc(p->odr_out, sizeof(int));
str = ZOOM_options_get(p->options, "doc");
if (str)
+ {
+ const int *oid = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_RECSYN, OID_STR_XML);
req->u.esRequest->notToKeep->itemRequest =
- z_ext_record(p->odr_out, VAL_TEXT_XML, str, strlen(str));
+ z_ext_record_oid(p->odr_out, oid, str, strlen(str));
+ }
else
req->u.esRequest->notToKeep->itemRequest = encode_ill_request(p);
Z_ESAdminOriginPartToKeep **toKeepP,
Z_ESAdminOriginPartNotToKeep **notToKeepP)
{
- Z_APDU *apdu = create_es_package(p, VAL_ADMINSERVICE);
+ Z_APDU *apdu = create_es_package(p, OID_STR_ADMIN);
if (apdu)
{
Z_ESAdminOriginPartToKeep *toKeep;
first_db = db[0];
r->direct_reference =
- yaz_oidval_to_z3950oid(p->odr_out, CLASS_EXTSERV,
- VAL_ADMINSERVICE);
+ yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_EXTSERV, OID_STR_ADMIN, p->odr_out);
r->descriptor = 0;
r->indirect_reference = 0;
r->which = Z_External_ESAdmin;
static Z_APDU *create_xmlupdate_package(ZOOM_package p)
{
- Z_APDU *apdu = create_es_package(p, VAL_XMLES);
+ Z_APDU *apdu = create_es_package(p, OID_STR_XMLES);
Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
Z_External *ext = (Z_External *) odr_malloc(p->odr_out, sizeof(*ext));
const char *doc = ZOOM_options_get(p->options, "doc");
const char *recordIdNumber = ZOOM_options_get(p->options, "recordIdNumber");
const char *record_buf = ZOOM_options_get(p->options, "record");
const char *syntax_str = ZOOM_options_get(p->options, "syntax");
- int syntax_oid = VAL_NONE;
int action_no = -1;
-
- if (syntax_str)
- syntax_oid = oid_getvalbyname(syntax_str);
+ int *syntax_oid = 0;
+
+ if (!syntax_str)
+ syntax_str = "xml";
if (!record_buf)
{
record_buf = "void";
- syntax_oid = VAL_SUTRS;
+ syntax_str = "SUTRS";
}
- if (syntax_oid == VAL_NONE)
- syntax_oid = VAL_TEXT_XML;
-
+
+ if (syntax_str)
+ {
+ syntax_oid = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_RECSYN, syntax_str,
+ p->odr_out);
+ }
+ if (!syntax_oid)
+ return 0;
+
if (num_db > 0)
first_db = db[0];
else
return 0;
- apdu = create_es_package(p, VAL_DBUPDATE);
+ apdu = create_es_package(p, OID_STR_EXT_UPDATE);
if (apdu)
{
Z_IUOriginPartToKeep *toKeep;
odr_malloc(p->odr_out, sizeof(*r));
apdu->u.extendedServicesRequest->taskSpecificParameters = r;
+
r->direct_reference =
- yaz_oidval_to_z3950oid(p->odr_out, CLASS_EXTSERV,
- VAL_DBUPDATE);
+ yaz_string_to_oid_odr(yaz_oid_std(), CLASS_EXTSERV,
+ OID_STR_EXT_UPDATE, p->odr_out);
r->descriptor = 0;
r->which = Z_External_update;
r->indirect_reference = 0;
notToKeep->elements[0]->supplementalId = 0;
notToKeep->elements[0]->correlationInfo = 0;
notToKeep->elements[0]->record =
- z_ext_record(p->odr_out, syntax_oid,
- record_buf, strlen(record_buf));
+ z_ext_record_oid(p->odr_out, syntax_oid,
+ record_buf, strlen(record_buf));
}
if (0 && apdu)
{
p->buf_out = 0;
if (!strcmp(type, "itemorder"))
{
- apdu = create_es_package(p, VAL_ITEMORDER);
+ apdu = create_es_package(p, OID_STR_ITEMORDER);
if (apdu)
{
Z_External *r = (Z_External *) odr_malloc(p->odr_out, sizeof(*r));
r->direct_reference =
- yaz_oidval_to_z3950oid(p->odr_out, CLASS_EXTSERV,
- VAL_ITEMORDER);
+ yaz_string_to_oid_odr(yaz_oid_std(), CLASS_EXTSERV,
+ OID_STR_ITEMORDER, p->odr_out);
r->descriptor = 0;
r->which = Z_External_itemOrder;
r->indirect_reference = 0;
}
else
{
+ const int *oid = yaz_string_to_oid(yaz_oid_std(),
+ CLASS_USERINFO,
+ OID_STR_COOKIE);
char *cookie =
- yaz_oi_get_string_oidval(&apdu->u.initResponse->otherInfo,
- VAL_COOKIE, 1, 0);
+ yaz_oi_get_string_oid(&apdu->u.initResponse->otherInfo,
+ oid, 1, 0);
xfree(c->cookie_in);
c->cookie_in = 0;
if (cookie)
odr_malloc(c->odr_in, sizeof(Z_External));
npr->u.databaseRecord->descriptor = 0;
npr->u.databaseRecord->direct_reference =
- yaz_oidval_to_z3950oid(c->odr_in, CLASS_RECSYN, VAL_TEXT_XML);
+ yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, OID_STR_XML,
+ c->odr_in);
npr->u.databaseRecord->which = Z_External_octet;
npr->u.databaseRecord->u.octet_aligned = (Odr_oct *)
}
}
nmem = odr_extract_mem(c->odr_in);
- nmem_transfer(resultset->odr->mem, nmem);
+ nmem_transfer(odr_getmem(resultset->odr), nmem);
nmem_destroy(nmem);
}
#endif
* Copyright (C) 1995-2005, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: zoom-p.h,v 1.17 2007-01-09 13:56:48 adam Exp $
+ * $Id: zoom-p.h,v 1.18 2007-04-12 13:52:57 adam Exp $
*/
/**
* \file zoom-p.h
* \brief Internal header for ZOOM implementation
*/
-
#include <yaz/proto.h>
+#include <yaz/oid_db.h>
#include <yaz/comstack.h>
#include <yaz/wrbuf.h>
#include <yaz/zoom.h>
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: zoomsh.c,v 1.45 2007-03-21 11:27:47 adam Exp $
+ * $Id: zoomsh.c,v 1.46 2007-04-12 13:52:58 adam Exp $
*/
/** \file zoomsh.c
#include <yaz/log.h>
#include <yaz/nmem.h>
#include <yaz/zoom.h>
-#include <yaz/oid.h>
#define MAX_CON 100
/* if rec is non-null, we got a record for display */
if (rec)
{
- char oidbuf[100];
- (void) oid_name_to_dotstring(CLASS_RECSYN, syntax, oidbuf);
- printf ("%d %s %s (%s)\n",
- pos, (db ? db : "unknown"), syntax, oidbuf);
+ printf ("%d %s %s\n",
+ pos, (db ? db : "unknown"), syntax);
if (render)
fwrite (render, 1, len, stdout);
printf ("\n");
* Copyright (C) 1995-2007, Index Data ApS
* See the file LICENSE for details.
*
- * $Id: ztest.c,v 1.85 2007-01-16 14:12:38 adam Exp $
+ * $Id: ztest.c,v 1.86 2007-04-12 13:52:58 adam Exp $
*/
/*
#include <unistd.h>
#endif
-#include <yaz/yaz-util.h>
+#include <yaz/log.h>
#include <yaz/backend.h>
#include <yaz/ill.h>
ILL_APDU *ill_apdu = 0;
if (r->direct_reference)
{
- oident *ent = oid_getentbyoid(r->direct_reference);
- if (ent)
- yaz_log(log_level, "OID %s", ent->desc);
- if (ent && ent->value == VAL_TEXT_XML)
+ char oid_name_str[OID_STR_MAX];
+ int oclass;
+ const char *oid_name =
+ yaz_oid_to_string_buf(r->direct_reference,
+ &oclass, oid_name_str);
+ if (oid_name)
+ yaz_log(log_level, "OID %s", oid_name);
+ if (oid_name && !strcmp(oid_name, OID_STR_XML))
{
yaz_log (log_level, "ILL XML request");
if (r->which == Z_External_octet)
yaz_log (log_level, "%.*s", r->u.octet_aligned->len,
r->u.octet_aligned->buf);
}
- if (ent && ent->value == VAL_ISO_ILL_1)
+ if (oid_name && !strcmp(oid_name, OID_STR_ILL_1))
{
yaz_log (log_level, "Decode ItemRequest begin");
if (r->which == ODR_EXTERNAL_single)
targetPart->taskPackageRecords[0]->which =
Z_IUTaskPackageRecordStructure_record;
targetPart->taskPackageRecords[0]->u.record =
- z_ext_record (rr->stream, VAL_SUTRS, "test", 4);
+ z_ext_record_oid(rr->stream,
+ yaz_string_to_oid_odr(
+ yaz_oid_std(),
+ CLASS_RECSYN,
+ OID_STR_SUTRS,
+ rr->stream),
+ "test", 4);
targetPart->taskPackageRecords[0]->correlationInfo = 0;
targetPart->taskPackageRecords[0]->recordStatus =
odr_intdup (rr->stream,
if (rec->direct_reference)
{
- struct oident *oident;
- oident = oid_getentbyoid(rec->direct_reference);
- if (oident)
+ char oid_name_str[OID_STR_MAX];
+ const char *oid_name
+ = oid_name = yaz_oid_to_string_buf(
+ rec->direct_reference, 0,
+ oid_name_str);
+ if (oid_name)
yaz_log (log_level, "record %d type %s", i,
- oident->desc);
+ oid_name);
}
switch (rec->which)
{
int ztest_fetch(void *handle, bend_fetch_rr *r)
{
char *cp;
+ int oclass;
+ char oid_str_buf[OID_STR_MAX];
+ const char *oid_str = 0;
r->last_in_set = 0;
r->basename = "Default";
- r->output_format = r->request_format;
- if (r->request_format == VAL_SUTRS)
+ r->output_format = r->request_format;
+
+ oid_str = yaz_oid_to_string_buf(r->request_format, &oclass,
+ oid_str_buf);
+
+ if (oid_str && !strcmp(oid_str, OID_STR_SUTRS))
{
/* this section returns a small record */
char buf[100];
r->record = (char *) odr_malloc (r->stream, r->len+1);
strcpy(r->record, buf);
}
- else if (r->request_format == VAL_GRS1)
+ else if (oid_str && !strcmp(oid_str, OID_STR_GRS1))
{
r->len = -1;
r->record = (char*) dummy_grs_record(r->number, r->stream);
return 0;
}
}
- else if (r->request_format == VAL_POSTSCRIPT)
+ else if (oid_str && !strcmp(oid_str, OID_STR_POSTSCRIPT))
{
char fname[20];
FILE *f;
fseek (f, 0L, SEEK_SET);
r->record = (char*) odr_malloc (r->stream, size);
r->len = size;
- r->output_format = VAL_POSTSCRIPT;
fread (r->record, size, 1, f);
fclose (f);
}
- else if (r->request_format == VAL_TEXT_XML)
+ else if (oid_str && !strcmp(oid_str, OID_STR_XML))
{
if ((cp = dummy_xml_record (r->number, r->stream)))
{
r->len = strlen(cp);
r->record = cp;
- r->output_format = VAL_TEXT_XML;
}
else
{
{
r->len = strlen(cp);
r->record = cp;
- r->output_format = VAL_USMARC;
+ r->output_format = yaz_string_to_oid_odr(
+ yaz_oid_std(), CLASS_RECSYN, OID_STR_USMARC, r->stream);
}
else
{