X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=asn%2Fproto.c;h=b7454799aacea9d96ca3d129ae700133e8872b81;hb=a200fc19301615242b43e18b9c03027d495302bb;hp=a69d49bd88c851a8720e71f7d5c41736ae3f9e79;hpb=78f86cdd3cc8d44fb8c4329e408a3aa679bd8b9e;p=yaz-moved-to-github.git diff --git a/asn/proto.c b/asn/proto.c index a69d49b..b745479 100644 --- a/asn/proto.c +++ b/asn/proto.c @@ -4,7 +4,19 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: proto.c,v $ - * Revision 1.30 1995-06-15 15:42:01 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 @@ -102,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); @@ -125,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))) @@ -435,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; @@ -724,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 @@ -735,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); } @@ -1198,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}, @@ -1248,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) &&