X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Foid.c;h=ccfca7fb89a8420cc20f26cb28875c33a0737a6f;hb=bf4149c63ad2e11429e302a89f472de52b4d7ce8;hp=4c45984200f787044a9a2a4ea80fbc4c2451a8b1;hpb=4ae699c927bc26f3550d1a8ca911e8d1fe75dbfc;p=yaz-moved-to-github.git diff --git a/util/oid.c b/util/oid.c index 4c45984..ccfca7f 100644 --- a/util/oid.c +++ b/util/oid.c @@ -4,7 +4,28 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: oid.c,v $ - * Revision 1.12 1996-01-02 08:57:53 quinn + * Revision 1.19 1997-05-02 08:39:41 quinn + * Support for private OID table added. Thanks to Ronald van der Meer + * + * Revision 1.18 1997/04/30 08:52:12 quinn + * Null + * + * Revision 1.17 1996/10/10 12:35:23 quinn + * Added Update extended service. + * + * Revision 1.16 1996/10/09 15:55:02 quinn + * Added SearchInfoReport + * + * Revision 1.15 1996/10/07 15:29:43 quinn + * Added SOIF support + * + * Revision 1.14 1996/02/20 17:58:28 adam + * Added const to oid_getvalbyname. + * + * Revision 1.13 1996/02/20 16:37:33 quinn + * Using yaz_matchstr in oid_getvalbyname + * + * Revision 1.12 1996/01/02 08:57:53 quinn * Changed enums in the ASN.1 .h files to #defines. Changed oident.class to oclass * * Revision 1.11 1995/12/13 16:03:35 quinn @@ -65,10 +86,13 @@ */ #include +#include static int z3950_prefix[] = { 1, 2, 840, 10003, -1 }; static int sr_prefix[] = { 1, 0, 10163, -1 }; +static oident *extoids = NULL; + /* * OID database */ @@ -114,6 +138,7 @@ static oident oids[] = #if 0 {PROTO_Z3950, CLASS_RECSYN, VAL_ID_SGML, {5,1000,81,1,-1},"ID-SGML" }, #endif + {PROTO_Z3950, CLASS_RECSYN, VAL_SOIF, {5,1000,81,2,-1},"SOIF" }, {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_ACCFORM, VAL_PROMPT1, {8,1,-1}, "Prompt-1" }, @@ -126,6 +151,9 @@ static oident oids[] = {PROTO_Z3950, CLASS_EXTSERV, VAL_DBUPDATE, {9,5,-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_USERINFO,VAL_SEARCHRES1,{10,1,-1}, "searchResult-1"}, + {PROTO_Z3950, CLASS_ELEMSPEC,VAL_ESPEC1, {11,1,-1}, "Espec-1" }, {PROTO_Z3950, CLASS_VARSET, VAL_VAR1, {12,1,-1}, "Variant-1" }, @@ -259,15 +287,19 @@ struct oident *oid_getentbyoid(int *o) /* determine protocol type */ if (!o) return 0; - if ((prelen = match_prefix(o, z3950_prefix))) + if ((prelen = match_prefix(o, z3950_prefix)) != 0) proto = PROTO_Z3950; - else if ((prelen = match_prefix(o, sr_prefix))) + else if ((prelen = match_prefix(o, sr_prefix)) != 0) proto = PROTO_SR; else proto = PROTO_GENERAL; for (p = oids; *p->oidsuffix >= 0; p++) if (p->proto == proto && !oid_oidcmp(o + prelen, p->oidsuffix)) return p; + if (extoids != NULL) + for (p = extoids; *p->oidsuffix >= 0; p++) + if (p->proto == proto && !oid_oidcmp(o + prelen, p->oidsuffix)) + return p; return 0; } @@ -293,15 +325,39 @@ int *oid_getoidbyent(struct oident *ent) oid_oidcat(ret, p->oidsuffix); return ret; } + if (extoids != NULL) + for (p = extoids; *p->oidsuffix >= 0; p++) + if (ent->proto == p->proto && + ent->oclass == p->oclass && + ent->value == p->value) + { + if (ent->proto == PROTO_Z3950) + oid_oidcpy(ret, z3950_prefix); + else if (ent->proto == PROTO_SR) + oid_oidcpy(ret, sr_prefix); + else + ret[0] = -1; + oid_oidcat(ret, p->oidsuffix); + return ret; + } return 0; } -oid_value oid_getvalbyname(char *name) +oid_value oid_getvalbyname(const char *name) { struct oident *p; for (p = oids; *p->oidsuffix >= 0; p++) - if (!strcmp(p->desc, name)) + if (!yaz_matchstr(p->desc, name)) return p->value; + if (extoids != NULL) + for (p = extoids; *p->oidsuffix >= 0; p++) + if (!yaz_matchstr(p->desc, name)) + return p->value; return VAL_NONE; } + +void oid_setprivateoids(oident *list) +{ + extoids = list; +}