X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=asn%2Fproto.c;h=f2b4118f0ac4c36bdee8e39d21006e1c1be40631;hb=9d17b5cfa8555d4762f162785edede1e0314cc07;hp=c309e7bedb25f5460073103143d33c6ef03d4d12;hpb=657fb99115b87a5244e9a33bbe4ca3d9d18849c4;p=yaz-moved-to-github.git diff --git a/asn/proto.c b/asn/proto.c index c309e7b..f2b4118 100644 --- a/asn/proto.c +++ b/asn/proto.c @@ -4,7 +4,22 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: proto.c,v $ - * Revision 1.38 1995-09-27 15:02:40 quinn + * 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 +145,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 +156,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 +168,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 +179,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 +194,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[] = { @@ -201,7 +216,7 @@ int MDF z_OtherInformationUnit(ODR o, Z_OtherInformationUnit **p, int opt) 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 +230,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,7 +254,7 @@ 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); @@ -253,7 +268,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 +278,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 +318,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 +558,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[] = { @@ -658,7 +686,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); } @@ -758,7 +786,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 +811,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[] = { @@ -942,7 +970,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)); @@ -1129,6 +1157,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 +1227,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); @@ -1423,7 +1452,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 +1500,154 @@ 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); +} + /* ------------------------ 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,6 +1664,10 @@ 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, @@ -1498,6 +1676,8 @@ int MDF z_APDU(ODR o, Z_APDU **p, int opt) z_TriggerResourceControlRequest}, {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},