X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=asn%2Fproto.c;h=9bcdde78d882a7203be290697e2dcaa2cd2fd0f3;hp=c309e7bedb25f5460073103143d33c6ef03d4d12;hb=a807bde38544a7aa45dd2988e504a1acb3fd30c0;hpb=657fb99115b87a5244e9a33bbe4ca3d9d18849c4 diff --git a/asn/proto.c b/asn/proto.c index c309e7b..9bcdde7 100644 --- a/asn/proto.c +++ b/asn/proto.c @@ -4,7 +4,55 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: proto.c,v $ - * Revision 1.38 1995-09-27 15:02:40 quinn + * Revision 1.54 1996-11-11 13:14:46 adam + * Fixed tagging bug in z_ProximityOperator. + * + * Revision 1.53 1996/10/09 15:54:55 quinn + * Added SearchInfoReport + * + * Revision 1.52 1996/10/08 12:56:57 adam + * Bug fix: tagging of type 101 query. + * + * Revision 1.51 1996/07/26 14:07:21 quinn + * Small + * + * Revision 1.50 1996/07/26 13:36:15 quinn + * Various smallish + * + * Revision 1.49 1996/07/06 19:58:28 quinn + * System headerfiles gathered in yconfig + * + * Revision 1.48 1996/06/10 08:53:33 quinn + * Added Summary,OPAC,ResourceReport + * + * Revision 1.47 1996/05/29 15:47:50 quinn + * Fixed in bug DiagRecs decoder. Thanks to Linda Harris. + * + * Revision 1.46 1996/04/10 11:39:42 quinn + * Fixed bug in UserInfo + * + * Revision 1.45 1996/02/23 10:00:25 quinn + * Fixes to SCAN + * + * Revision 1.44 1996/02/20 12:51:41 quinn + * Completed SCAN. Fixed problems with EXTERNAL. + * + * Revision 1.43 1996/02/10 12:22:49 quinn + * Work on SCAN + * + * Revision 1.42 1996/01/22 09:46:31 quinn + * Added Sort PDU. Moved StringList to main protocol file. + * + * Revision 1.41 1996/01/10 15:21:24 quinn + * Added links to access control PDUs + * + * Revision 1.40 1996/01/02 11:46:40 quinn + * Changed 'operator' to 'roperator' to avoid C++ conflict. + * + * Revision 1.39 1995/09/29 17:11:53 quinn + * Smallish + * + * Revision 1.38 1995/09/27 15:02:40 quinn * Modified function heads & prototypes. * * Revision 1.37 1995/08/21 09:10:15 quinn @@ -130,7 +178,7 @@ * We'll use a general octetstring here, since string operations are * clumsy on long strings. */ -int MDF z_SUTRS(ODR o, Odr_oct **p, int opt) +int z_SUTRS(ODR o, Odr_oct **p, int opt) { return odr_implicit(o, odr_octetstring, p, ODR_UNIVERSAL, ODR_GENERALSTRING, opt); @@ -141,7 +189,7 @@ int z_ReferenceId(ODR o, Z_ReferenceId **p, int opt) return odr_implicit(o, odr_octetstring, (Odr_oct**) p, ODR_CONTEXT, 2, opt); } -int MDF z_DatabaseName(ODR o, Z_DatabaseName **p, int opt) +int z_DatabaseName(ODR o, Z_DatabaseName **p, int opt) { return odr_implicit(o, odr_visiblestring, (char **) p, ODR_CONTEXT, 105, opt); @@ -153,7 +201,7 @@ int z_ResultSetId(ODR o, char **p, int opt) opt); } -int MDF z_ElementSetName(ODR o, char **p, int opt) +int z_ElementSetName(ODR o, char **p, int opt) { return odr_implicit(o, odr_visiblestring, p, ODR_CONTEXT, 103, opt); } @@ -164,7 +212,7 @@ int z_UserInformationField(ODR o, Z_External **p, int opt) 11, opt); } -int MDF z_InternationalString(ODR o, char **p, int opt) +int z_InternationalString(ODR o, char **p, int opt) { return odr_generalstring(o, p, opt); } @@ -179,7 +227,7 @@ int z_InfoCategory(ODR o, Z_InfoCategory **p, int opt) odr_sequence_end(o); } -int MDF z_OtherInformationUnit(ODR o, Z_OtherInformationUnit **p, int opt) +int z_OtherInformationUnit(ODR o, Z_OtherInformationUnit **p, int opt) { static Odr_arm arm[] = { @@ -197,11 +245,11 @@ int MDF z_OtherInformationUnit(ODR o, Z_OtherInformationUnit **p, int opt) return opt && odr_ok(o); return odr_implicit(o, z_InfoCategory, &(*p)->category, ODR_CONTEXT, 1, 1) && - odr_choice(o, arm, &(*p)->which, &(*p)->information) && + odr_choice(o, arm, &(*p)->information, &(*p)->which) && odr_sequence_end(o); } -int MDF z_OtherInformation(ODR o, Z_OtherInformation **p, int opt) +int z_OtherInformation(ODR o, Z_OtherInformation **p, int opt) { if (o->direction == ODR_DECODE) *p = odr_malloc(o, sizeof(**p)); @@ -215,7 +263,7 @@ int MDF z_OtherInformation(ODR o, Z_OtherInformation **p, int opt) return opt && odr_ok(o); } -int MDF z_StringOrNumeric(ODR o, Z_StringOrNumeric **p, int opt) +int z_StringOrNumeric(ODR o, Z_StringOrNumeric **p, int opt) { static Odr_arm arm[] = { @@ -239,12 +287,12 @@ int MDF z_StringOrNumeric(ODR o, Z_StringOrNumeric **p, int opt) /* * check tagging!! */ -int MDF z_Unit(ODR o, Z_Unit **p, int opt) +int z_Unit(ODR o, Z_Unit **p, int opt) { if (!odr_sequence_begin(o, p, sizeof(**p))) return opt && odr_ok(o); return - odr_implicit(o, odr_visiblestring, &(*p)->unitSystem, ODR_CONTEXT, + odr_explicit(o, z_InternationalString, &(*p)->unitSystem, ODR_CONTEXT, 1, 1) && odr_explicit(o, z_StringOrNumeric, &(*p)->unitType, ODR_CONTEXT, 2, 1) && @@ -253,7 +301,7 @@ int MDF z_Unit(ODR o, Z_Unit **p, int opt) odr_sequence_end(o); } -int MDF z_IntUnit(ODR o, Z_IntUnit **p, int opt) +int z_IntUnit(ODR o, Z_IntUnit **p, int opt) { if (!odr_sequence_begin(o, p, sizeof(**p))) return opt && odr_ok(o); @@ -263,10 +311,23 @@ int MDF z_IntUnit(ODR o, Z_IntUnit **p, int opt) odr_sequence_end(o); } +int z_StringList(ODR o, Z_StringList **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_InternationalString, &(*p)->strings, + &(*p)->num_strings)) + return 1; + *p = 0; + return opt && odr_ok(o); +} + /* ---------------------- INITIALIZE SERVICE ------------------- */ #if 0 -int MDF z_NSRAuthentication(ODR o, Z_NSRAuthentication **p, int opt) +int z_NSRAuthentication(ODR o, Z_NSRAuthentication **p, int opt) { if (!odr_sequence_begin(o, p, sizeof(**p))) return opt && odr_ok(o); @@ -290,7 +351,7 @@ int z_IdPass(ODR o, Z_IdPass **p, int opt) odr_sequence_end(o); } -int MDF z_StrAuthentication(ODR o, char **p, int opt) +int z_StrAuthentication(ODR o, char **p, int opt) { return odr_visiblestring(o, p, opt); } @@ -530,7 +591,7 @@ int z_AttributeElement(ODR o, Z_AttributeElement **p, int opt) odr_sequence_end(o); } -int MDF z_Term(ODR o, Z_Term **p, int opt) +int z_Term(ODR o, Z_Term **p, int opt) { static Odr_arm arm[] = { @@ -587,7 +648,7 @@ int z_ProximityOperator(ODR o, Z_ProximityOperator **p, int opt) static Odr_arm arm[] = { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ProxCode_known, odr_integer}, - {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_ProxCode_private, odr_integer}, + {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_ProxCode_private, odr_integer}, {-1, -1, -1, -1, 0} }; @@ -658,7 +719,7 @@ int z_Complex(ODR o, Z_Complex **p, int opt) return z_RPNStructure(o, &(*p)->s1, 0) && z_RPNStructure(o, &(*p)->s2, 0) && - z_Operator(o, &(*p)->operator, 0) && + z_Operator(o, &(*p)->roperator, 0) && odr_sequence_end(o); } @@ -699,7 +760,7 @@ int z_Query(ODR o, Z_Query **p, int opt) { {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Query_type_1, z_RPNQuery}, {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_Query_type_2, odr_octetstring}, - {ODR_EXPLICIT, ODR_CONTEXT, 101, Z_Query_type_101, z_RPNQuery}, + {ODR_IMPLICIT, ODR_CONTEXT, 101, Z_Query_type_101, z_RPNQuery}, {-1, -1, -1, -1, 0} }; @@ -758,7 +819,7 @@ int z_DatabaseRecord(ODR o, Z_DatabaseRecord **p, int opt) #ifdef Z_95 -int MDF z_DefaultDiagFormat(ODR o, Z_DefaultDiagFormat **p, int opt) +int z_DefaultDiagFormat(ODR o, Z_DefaultDiagFormat **p, int opt) { static Odr_arm arm[] = { @@ -783,7 +844,7 @@ int MDF z_DefaultDiagFormat(ODR o, Z_DefaultDiagFormat **p, int opt) odr_sequence_end(o); } -int MDF z_DiagRec(ODR o, Z_DiagRec **p, int opt) +int z_DiagRec(ODR o, Z_DiagRec **p, int opt) { static Odr_arm arm[] = { @@ -836,7 +897,7 @@ int z_DiagRecs(ODR o, Z_DiagRecs **p, int opt) &(*p)->num_diagRecs)) return 1; *p = 0; - return 0; + return opt && odr_ok(o); } int z_NamePlusRecord(ODR o, Z_NamePlusRecord **p, int opt) @@ -942,7 +1003,7 @@ int z_AccessControlResponse(ODR o, Z_AccessControlResponse **p, int opt) /* ------------------------ SCAN SERVICE -------------------- */ -int MDF z_AttributeList(ODR o, Z_AttributeList **p, int opt) +int z_AttributeList(ODR o, Z_AttributeList **p, int opt) { if (o->direction == ODR_DECODE) *p = odr_malloc(o, sizeof(**p)); @@ -1010,6 +1071,77 @@ int z_AlternativeTerm(ODR o, Z_AlternativeTerm **p, int opt) return opt && !o->error; } +#if 1 + +int z_ByDatabase(ODR o, Z_ByDatabase **p, int opt) +{ + if (!odr_sequence_begin(o, p, sizeof(**p))) + return opt && odr_ok(o); + return + z_DatabaseName(o, &(*p)->db, 1) && + odr_implicit(o, odr_integer, &(*p)->num, ODR_CONTEXT, 1, 1) && + z_OtherInformation(o, &(*p)->otherDbInfo, 1) && + odr_sequence_end(o); +} + +int z_ByDatabaseList(ODR o, Z_ByDatabaseList **p, int opt) +{ + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); + if (odr_sequence_of(o, z_ByDatabase, &(*p)->elements, &(*p)->num_elements)) + return 1; + *p = 0; + return opt && odr_ok(o); +} + +int z_ScanOccurrences(ODR o, Z_ScanOccurrences **p, int opt) +{ + Odr_arm arm[] = + { + {ODR_EXPLICIT, ODR_CONTEXT, 2, Z_ScanOccurrences_global, odr_integer}, + {ODR_EXPLICIT, ODR_CONTEXT, 3, Z_ScanOccurrences_byDatabase, + z_ByDatabaseList}, + {-1, -1, -1, -1, 0} + }; + + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); + if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) + return 1; + *p = 0; + return opt && odr_ok(o); +} + +int z_OccurrenceByAttributesElem(ODR o, Z_OccurrenceByAttributesElem **p, + int opt) +{ + if (!odr_sequence_begin(o, p, sizeof(**p))) + return opt && odr_ok(o); + return + odr_explicit(o, z_AttributeList, &(*p)->attributes, ODR_CONTEXT, + 1, 1) && + z_ScanOccurrences(o, &(*p)->occurrences, 1) && + z_OtherInformation(o, &(*p)->otherOccurInfo, 1) && + odr_sequence_end(o); +} + +int z_OccurrenceByAttributes(ODR o, Z_OccurrenceByAttributes **p, int opt) +{ + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); + if (!odr_sequence_of(o, z_OccurrenceByAttributesElem, &(*p)->elements, + &(*p)->num_elements)) + return 1; + *p = 0; + return opt && odr_ok(o); +} + +#else + +/* + * Incomplete definition of occurencebyattributes. + */ + int z_OccurrenceByAttributes(ODR o, Z_OccurrenceByAttributes **p, int opt) { if (!odr_sequence_begin(o, p, sizeof(**p))) @@ -1020,6 +1152,8 @@ int z_OccurrenceByAttributes(ODR o, Z_OccurrenceByAttributes **p, int opt) odr_sequence_end(o); } +#endif + int z_TermInfo(ODR o, Z_TermInfo **p, int opt) { if (!odr_sequence_begin(o, p, sizeof(**p))) @@ -1028,6 +1162,8 @@ int z_TermInfo(ODR o, Z_TermInfo **p, int opt) (willow_scan ? odr_implicit(o, z_Term, &(*p)->term, ODR_CONTEXT, 1, 0) : z_Term(o, &(*p)->term, 0)) && + odr_implicit(o, z_InternationalString, &(*p)->displayTerm, ODR_CONTEXT, + 0, 1) && z_AttributeList(o, &(*p)->suggestedAttributes, 1) && odr_implicit(o, z_AlternativeTerm, &(*p)->alternativeTerm, ODR_CONTEXT, 4, 1) && @@ -1035,6 +1171,7 @@ int z_TermInfo(ODR o, Z_TermInfo **p, int opt) 2, 1) && odr_implicit(o, z_OccurrenceByAttributes, &(*p)->byAttributes, ODR_CONTEXT, 3, 1) && + z_OtherInformation(o, &(*p)->otherTermInfo, 1) && odr_sequence_end(o); } @@ -1129,6 +1266,7 @@ int z_ScanResponse(ODR o, Z_ScanResponse **p, int opt) odr_implicit(o, odr_integer, &(*p)->positionOfTerm, ODR_CONTEXT, 6, 1)&& odr_explicit(o, z_ListEntries, &(*p)->entries, ODR_CONTEXT, 7, 1) && odr_implicit(o, odr_oid, &(*p)->attributeSet, ODR_CONTEXT, 8, 1) && + z_OtherInformation(o, &(*p)->otherInfo, 1) && odr_sequence_end(o); } @@ -1198,7 +1336,7 @@ int z_ElementSpec(ODR o, Z_ElementSpec **p, int opt) return opt && odr_ok(o); } -int MDF z_Specification(ODR o, Z_Specification **p, int opt) +int z_Specification(ODR o, Z_Specification **p, int opt) { if (!odr_sequence_begin(o, p, sizeof(**p))) return opt && odr_ok(o); @@ -1351,7 +1489,7 @@ int z_DeleteResultSetRequest(ODR o, Z_DeleteResultSetRequest **p, int opt) z_ReferenceId(o, &(*p)->referenceId, 1) && odr_implicit(o, odr_integer, &(*p)->deleteFunction, ODR_CONTEXT, 32, 0) && - (odr_sequence_of(o, z_ListStatus, &(*p)->resultSetList, + (odr_sequence_of(o, z_ResultSetId, &(*p)->resultSetList, &(*p)->num_ids) || odr_ok(o)) && #ifdef Z_95 z_OtherInformation(o, &(*p)->otherInfo, 1) && @@ -1423,7 +1561,7 @@ int z_Close(ODR o, Z_Close **p, int opt) /* ------------------------ APDU ------------------------- */ -int MDF z_Permissions(ODR o, Z_Permissions **p, int opt) +int z_Permissions(ODR o, Z_Permissions **p, int opt) { if (!odr_sequence_begin(o, p, sizeof(**p))) return opt && odr_ok(o); @@ -1471,9 +1609,183 @@ int z_ExtendedServicesResponse(ODR o, Z_ExtendedServicesResponse **p, int opt) odr_sequence_end(o); } +/* ------------------------ SORT ------------------------- */ + +int z_SortAttributes(ODR o, Z_SortAttributes **p, int opt) +{ + if (!odr_sequence_begin(o, p, sizeof(**p))) + return opt && odr_ok(o); + return + odr_oid(o, &(*p)->id, 0) && + z_AttributeList(o, &(*p)->list, 0) && + odr_sequence_end(o); +} + +int z_SortKey(ODR o, Z_SortKey **p, int opt) +{ + static Odr_arm arm[] = + { + {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_SortKey_sortField, + z_InternationalString}, + {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortKey_elementSpec, z_Specification}, + {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortKey_sortAttributes, + z_SortAttributes}, + {-1, -1, -1, -1, 0} + }; + + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); + if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) + return 1; + *p = 0; + return opt && odr_ok(o); +} + +int z_SortDbSpecific(ODR o, Z_SortDbSpecific **p, int opt) +{ + if (!odr_sequence_begin(o, p, sizeof(**p))) + return opt && odr_ok(o); + return + z_DatabaseName(o, &(*p)->databaseName, 0) && + z_SortKey(o, &(*p)->dbSort, 0) && + odr_sequence_end(o); +} + +int z_SortDbSpecificList(ODR o, Z_SortDbSpecificList **p, int opt) +{ + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); + if (odr_sequence_of(o, z_SortDbSpecific, &(*p)->dbSpecific, + &(*p)->num_dbSpecific)) + return 1; + *p = 0; + return opt && odr_ok(o); +} + +int z_SortElement(ODR o, Z_SortElement **p, int opt) +{ + static Odr_arm arm[] = + { + {ODR_EXPLICIT, ODR_CONTEXT, 1, Z_SortElement_generic, z_SortKey}, + {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortElement_databaseSpecific, + z_SortDbSpecificList}, + {-1, -1, -1, -1, 0} + }; + + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); + if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) + return 1; + *p = 0; + return opt && odr_ok(o); +} + +int z_SortMissingValueAction(ODR o, Z_SortMissingValueAction **p, int opt) +{ + static Odr_arm arm[] = + { + {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_SortMissingValAct_abort, odr_null}, + {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_SortMissingValAct_null, odr_null}, + {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_SortMissingValAct_valData, + odr_octetstring}, + {-1, -1, -1, -1, 0} + }; + + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); + if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) + return 1; + *p = 0; + return opt && odr_ok(o); +} + +int z_SortKeySpec(ODR o, Z_SortKeySpec **p, int opt) +{ + if (!odr_sequence_begin(o, p, sizeof(**p))) + return opt && odr_ok(o); + return + z_SortElement(o, &(*p)->sortElement, 0) && + odr_implicit(o, odr_integer, &(*p)->sortRelation, ODR_CONTEXT, 1, 0) && + odr_implicit(o, odr_integer, &(*p)->caseSensitivity, ODR_CONTEXT, + 2, 0) && + odr_explicit(o, z_SortMissingValueAction, &(*p)->missingValueAction, + ODR_CONTEXT, 3, 1) && + odr_sequence_end(o); +} + +int z_SortResponse(ODR o, Z_SortResponse **p, int opt) +{ + if (!odr_sequence_begin(o, p, sizeof(**p))) + return opt && odr_ok(o); + return + z_ReferenceId(o, &(*p)->referenceId, 1) && + odr_implicit(o, odr_integer, &(*p)->sortStatus, ODR_CONTEXT, + 3, 0) && + odr_implicit(o, odr_integer, &(*p)->resultSetStatus, ODR_CONTEXT, + 4, 1) && + odr_implicit(o, z_DiagRecs, &(*p)->diagnostics, ODR_CONTEXT, 5, 1) && + z_OtherInformation(o, &(*p)->otherInfo, 1) && + odr_sequence_end(o); +} + +int z_SortKeySpecList(ODR o, Z_SortKeySpecList **p, int opt) +{ + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); + if (odr_sequence_of(o, z_SortKeySpec, &(*p)->specs, &(*p)->num_specs)) + return 1; + *p = 0; + return opt && odr_ok(o); +} + +int z_SortRequest(ODR o, Z_SortRequest **p, int opt) +{ + if (!odr_sequence_begin(o, p, sizeof(**p))) + return opt && odr_ok(o); + return + z_ReferenceId(o, &(*p)->referenceId, 1) && + odr_implicit(o, z_StringList, &(*p)->inputResultSetNames, + ODR_CONTEXT, 3, 0) && + odr_implicit(o, z_InternationalString, &(*p)->sortedResultSetName, + ODR_CONTEXT, 4, 0) && + odr_implicit(o, z_SortKeySpecList, &(*p)->sortSequence, ODR_CONTEXT, + 5, 0) && + z_OtherInformation(o, &(*p)->otherInfo, 1) && + odr_sequence_end(o); +} + +/* ---------------------- Resource Report ---------------- */ + +int z_ResourceReportRequest(ODR o, Z_ResourceReportRequest **p, int opt) +{ + if (!odr_sequence_begin(o, p, sizeof(**p))) + return opt && odr_ok(o); + return + z_ReferenceId(o, &(*p)->referenceId, 1) && + odr_implicit(o, z_ReferenceId, &(*p)->opId, ODR_CONTEXT, 210, 1) && + odr_implicit(o, odr_oid, &(*p)->prefResourceReportFormat, ODR_CONTEXT, + 49, 1) && + z_OtherInformation(o, &(*p)->otherInfo, 1) && + odr_sequence_end(o); +} + +int z_ResourceReportResponse(ODR o, Z_ResourceReportResponse **p, int opt) +{ + if (!odr_sequence_begin(o, p, sizeof(**p))) + return opt && odr_ok(o); + return + z_ReferenceId(o, &(*p)->referenceId, 1) && + odr_implicit(o, odr_integer, &(*p)->resourceReportStatus, + ODR_CONTEXT, 50, 0) && + odr_explicit(o, z_External, &(*p)->resourceReport, ODR_CONTEXT, + 51, 1) && + z_OtherInformation(o, &(*p)->otherInfo, 1) && + odr_sequence_end(o); +} + /* ------------------------ APDU ------------------------- */ -int MDF z_APDU(ODR o, Z_APDU **p, int opt) +int z_APDU(ODR o, Z_APDU **p, int opt) { static Odr_arm arm[] = { @@ -1490,14 +1802,24 @@ int MDF z_APDU(ODR o, Z_APDU **p, int opt) z_DeleteResultSetRequest}, {ODR_IMPLICIT, ODR_CONTEXT, 27, Z_APDU_deleteResultSetResponse, z_DeleteResultSetResponse}, + {ODR_IMPLICIT, ODR_CONTEXT, 28, Z_APDU_accessControlRequest, + z_AccessControlRequest}, + {ODR_IMPLICIT, ODR_CONTEXT, 29, Z_APDU_accessControlResponse, + z_AccessControlResponse}, {ODR_IMPLICIT, ODR_CONTEXT, 30, Z_APDU_resourceControlRequest, z_ResourceControlRequest}, {ODR_IMPLICIT, ODR_CONTEXT, 31, Z_APDU_resourceControlResponse, z_ResourceControlResponse}, {ODR_IMPLICIT, ODR_CONTEXT, 32, Z_APDU_triggerResourceControlRequest, z_TriggerResourceControlRequest}, + {ODR_IMPLICIT, ODR_CONTEXT, 33, Z_APDU_resourceReportRequest, + z_ResourceReportRequest}, + {ODR_IMPLICIT, ODR_CONTEXT, 34, Z_APDU_resourceReportResponse, + z_ResourceReportResponse}, {ODR_IMPLICIT, ODR_CONTEXT, 35, Z_APDU_scanRequest, z_ScanRequest}, {ODR_IMPLICIT, ODR_CONTEXT, 36, Z_APDU_scanResponse, z_ScanResponse}, + {ODR_IMPLICIT, ODR_CONTEXT, 43, Z_APDU_sortRequest, z_SortRequest}, + {ODR_IMPLICIT, ODR_CONTEXT, 44, Z_APDU_sortResponse, z_SortResponse}, {ODR_IMPLICIT, ODR_CONTEXT, 45, Z_APDU_segmentRequest, z_Segment}, {ODR_IMPLICIT, ODR_CONTEXT, 46, Z_APDU_extendedServicesRequest, z_ExtendedServicesRequest}, @@ -1510,6 +1832,7 @@ int MDF z_APDU(ODR o, Z_APDU **p, int opt) if (o->direction == ODR_DECODE) *p = odr_malloc(o, sizeof(**p)); + odr_setlenlen(o, 5); if (!odr_choice(o, arm, &(*p)->u, &(*p)->which)) { if (o->direction == ODR_DECODE)