X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=asn%2Fproto.c;h=b7454799aacea9d96ca3d129ae700133e8872b81;hb=44c069f9cae451dae880e8d576387f6a46ce588d;hp=45735b6428e7732b6ac54d8b5a532fd9e8d4bcc0;hpb=1db60f5a7396b9b37560f6b6962be0b68240486c;p=yaz-moved-to-github.git diff --git a/asn/proto.c b/asn/proto.c index 45735b6..b745479 100644 --- a/asn/proto.c +++ b/asn/proto.c @@ -4,7 +4,22 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: proto.c,v $ - * Revision 1.29 1995-06-15 07:44:49 quinn + * Revision 1.34 1995-06-19 17:01:48 quinn + * This should bring us in sync with the version distributed as 1.0b + * + * Revision 1.33 1995/06/19 13:39:56 quinn + * *** empty log message *** + * + * Revision 1.32 1995/06/19 12:37:28 quinn + * Fixed a bug in the compspec. + * + * Revision 1.31 1995/06/16 13:15:56 quinn + * Fixed Defaultdiagformat. + * + * Revision 1.30 1995/06/15 15:42:01 quinn + * Fixed some v3 bugs + * + * Revision 1.29 1995/06/15 07:44:49 quinn * Moving to v3. * * Revision 1.28 1995/06/14 15:26:35 quinn @@ -99,6 +114,16 @@ /* ---------------------- GLOBAL DEFS ------------------- */ +/* + * We'll use a general octetstring here, since string operations are + * clumsy on long strings. + */ +int z_SUTRS(ODR o, Odr_oct **p, int opt) +{ + return odr_implicit(o, odr_octetstring, p, ODR_UNIVERSAL, + ODR_GENERALSTRING, opt); +} + int z_ReferenceId(ODR o, Z_ReferenceId **p, int opt) { return odr_implicit(o, odr_octetstring, (Odr_oct**) p, ODR_CONTEXT, 2, opt); @@ -122,6 +147,11 @@ int z_UserInformationField(ODR o, Odr_external **p, int opt) 11, opt); } +int z_InternationalString(ODR o, char **p, int opt) +{ + return odr_generalstring(o, p, opt); +} + int z_InfoCategory(ODR o, Z_InfoCategory **p, int opt) { if (!odr_sequence_begin(o, p, sizeof(**p))) @@ -432,14 +462,12 @@ int z_ElementSetNames(ODR o, Z_ElementSetNames **p, int opt) {-1, -1, -1, -1, 0} }; - if (!odr_constructed_begin(o, p, ODR_CONTEXT, 19)) - return opt && odr_ok(o); - if (o->direction == ODR_DECODE) *p = odr_malloc(o, sizeof(**p)); + else if (!*p) + return opt && odr_ok(o); - if (odr_choice(o, arm, &(*p)->u, &(*p)->which) && - odr_constructed_end(o)) + if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) return 1; *p = 0; return 0; @@ -721,6 +749,14 @@ int z_DatabaseRecord(ODR o, Z_DatabaseRecord **p, int opt) int z_DefaultDiagFormat(ODR o, Z_DefaultDiagFormat **p, int opt) { + static Odr_arm arm[] = + { + {-1, -1, -1, Z_DiagForm_v2AddInfo, odr_visiblestring}, + {-1, -1, -1, Z_DiagForm_v3AddInfo, z_InternationalString}, + {ODR_IMPLICIT, ODR_CONTEXT, ODR_VISIBLESTRING, Z_DiagForm_v2AddInfo, + odr_visiblestring}, /* To cater to a bug in the CNIDR servers */ + {-1, -1, -1, -1, 0} + }; if (!odr_sequence_begin(o, p, sizeof(**p))) return opt && odr_ok(o); return @@ -732,9 +768,7 @@ int z_DefaultDiagFormat(ODR o, Z_DefaultDiagFormat **p, int opt) * We need to turn it into a choice, or something, because of * that damn generalstring in v3. */ - (odr_visiblestring(o, &(*p)->addinfo, 0) || - odr_implicit(o, odr_cstring, &(*p)->addinfo, ODR_CONTEXT, - ODR_VISIBLESTRING, 1)) && + odr_choice(o, arm, &(*p)->addinfo, &(*p)->which) && odr_sequence_end(o); } @@ -780,6 +814,20 @@ int z_DiagRec(ODR o, Z_DiagRec **p, int opt) #endif +int z_DiagRecs(ODR o, Z_DiagRecs **p, int opt) +{ + if (o->direction == ODR_DECODE) + *p = odr_malloc(o, sizeof(**p)); + else if (!*p) + return opt; + + if (odr_sequence_of(o, z_DiagRec, &(*p)->diagRecs, + &(*p)->num_diagRecs)) + return 1; + *p = 0; + return 0; +} + int z_NamePlusRecord(ODR o, Z_NamePlusRecord **p, int opt) { static Odr_arm arm[] = @@ -817,10 +865,12 @@ int z_NamePlusRecordList(ODR o, Z_NamePlusRecordList **p, int opt) int z_Records(ODR o, Z_Records **p, int opt) { - Odr_arm arm[] = + static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 28, Z_Records_DBOSD, z_NamePlusRecordList}, {ODR_IMPLICIT, ODR_CONTEXT, 130, Z_Records_NSD, z_DiagRec}, + {ODR_IMPLICIT, ODR_CONTEXT, 205, Z_Records_multipleNSD, + z_DiagRecs}, {-1, -1, -1, -1, 0} }; @@ -1012,20 +1062,6 @@ int z_Entries(ODR o, Z_Entries **p, int opt) return 0; } -int z_DiagRecs(ODR o, Z_DiagRecs **p, int opt) -{ - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; - - if (odr_sequence_of(o, z_DiagRec, &(*p)->diagRecs, - &(*p)->num_diagRecs)) - return 1; - *p = 0; - return 0; -} - int z_ListEntries(ODR o, Z_ListEntries **p, int opt) { static Odr_arm arm[] = @@ -1193,7 +1229,7 @@ int z_RecordComposition(ODR o, Z_RecordComposition **p, int opt) { static Odr_arm arm[] = { - {ODR_EXPLICIT, ODR_CONTEXT, 1, Z_RecordComp_simple, + {ODR_EXPLICIT, ODR_CONTEXT, 19, Z_RecordComp_simple, z_ElementSetNames}, {ODR_IMPLICIT, ODR_CONTEXT, 209, Z_RecordComp_complex, z_CompSpec}, @@ -1243,7 +1279,8 @@ int z_PresentRequest(ODR o, Z_PresentRequest **p, int opt) &(*p)->num_ranges) || odr_ok(o)) && z_RecordComposition(o, &(*p)->recordComposition, 1) && #else - z_ElementSetNames(o, &pp->elementSetNames, 1) && + odr_explicit(o, z_ElementSetNames, &pp->elementSetNames, ODR_CONTEXT, + 19, 1) && #endif odr_implicit(o, odr_oid, &(*p)->preferredRecordSyntax, ODR_CONTEXT, 104, 1) &&