1 <!-- $Id: asn.xml,v 1.12 2001-10-26 20:13:44 adam Exp $ -->
2 <chapter id="asn"><title>The Z39.50 ASN.1 Module</title>
3 <sect1 id="asn.introduction"><title>Introduction</title>
5 The &asn; module provides you with a set of C struct definitions for the
6 various PDUs of the Z39.50 protocol, as well as for the complex types
7 appearing within the PDUs. For the primitive data types, the C
8 representation often takes the form of an ordinary C language type,
9 such as <literal>int</literal>. For ASN.1 constructs that have no direct
10 representation in C, such as general octet strings and bit strings,
11 the &odr; module (see section <link linkend="odr">The ODR Module</link>)
12 provides auxiliary definitions.
15 The &asn; module is located in sub directory <filename>z39.50</filename>.
16 There you'll find C files that implements encoders and decoders for the
17 Z39.50 types. You'll also find the protocol definitions:
18 <filename>z3950v3.asn</filename>, <filename>esupdate.asn</filename>,
22 <sect1 id="asn.preparing"><title>Preparing PDUs</title>
25 A structure representing a complex ASN.1 type doesn't in itself contain the
26 members of that type. Instead, the structure contains
27 <emphasis>pointers</emphasis> to the members of the type.
28 This is necessary, in part, to allow a mechanism for specifying which
29 of the optional structure (SEQUENCE) members are present, and which
30 are not. It follows that you will need to somehow provide space for
31 the individual members of the structure, and set the pointers to
35 The conversion routines don't care how you allocate and maintain your
36 C structures - they just follow the pointers that you provide.
37 Depending on the complexity of your application, and your personal
38 taste, there are at least three different approaches that you may take
39 when you allocate the structures.
43 You can use static or automatic local variables in the function that
44 prepares the PDU. This is a simple approach, and it provides the most
45 efficient form of memory management. While it works well for flat
46 PDUs like the InitReqest, it will generally not be sufficient for say,
47 the generation of an arbitrarily complex RPN query structure.
50 You can individually create the structure and its members using the
51 <function>malloc(2)</function> function. If you want to ensure that
52 the data is freed when it is no longer needed, you will have to
53 define a function that individually releases each member of a
54 structure before freeing the structure itself.
57 You can use the <function>odr_malloc()</function> function (see section
58 <link linkend="odr-use">Using ODR</link> for details). When you use
59 <function>odr_malloc()</function>, you can release all of the
60 allocated data in a single operation, independent of any pointers and
61 relations between the data. <function>odr_malloc()</function> is based on a
62 "nibble-memory"
63 scheme, in which large portions of memory are allocated, and then
64 gradually handed out with each call to <function>odr_malloc()</function>.
65 The next time you call <function>odr_reset()</function>, all of the
66 memory allocated since the last call is recycled for future use (actually,
67 it is placed on a free-list).
70 You can combine all of the methods described here. This will often be
71 the most practical approach. For instance, you might use
72 <function>odr_malloc()</function> to allocate an entire structure and
73 some of its elements, while you leave other elements pointing to global
74 or per-session default variables.
78 The &asn; module provides an important aid in creating new PDUs. For
79 each of the PDU types (say, <function>Z_InitRequest</function>), a
80 function is provided that allocates and initializes an instance of
81 that PDU type for you. In the case of the InitRequest, the function is
82 simply named <function>zget_InitRequest()</function>, and it sets up
83 reasonable default value for all of the mandatory members. The optional
84 members are generally initialized to null pointers. This last aspect
85 is very important: it ensures that if the PDU definitions are
86 extended after you finish your implementation (to accommodate
87 new versions of the protocol, say), you won't get into trouble with
88 uninitialized pointers in your structures. The functions use
89 <function>odr_malloc()</function> to
90 allocate the PDUs and its members, so you can free everything again with a
91 single call to <function>odr_reset()</function>. We strongly recommend
92 that you use the <literal>zget_*</literal>
93 functions whenever you are preparing a PDU (in a C++ API, the
94 <literal>zget_</literal>
95 functions would probably be promoted to constructors for the
99 The prototype for the individual PDU types generally look like this:
102 Z_<type> *zget_<type>(ODR o);
110 Z_InitRequest *zget_InitRequest(ODR o);
114 The &odr; handle should generally be your encoding stream, but it
118 As well as the individual PDU functions, a function
119 <function>zget_APDU()</function> is provided, which allocates
120 a top-level Z-APDU of the type requested:
124 Z_APDU *zget_APDU(ODR o, int which);
128 The <varname>which</varname> parameter is (of course) the discriminator
129 belonging to the <varname>Z_APDU</varname> <literal>CHOICE</literal> type.
130 All of the interface described here is provided by the &asn; module, and
131 you access it through the <filename>proto.h</filename> header file.
135 <sect1 id="asn.oid"><title id="oid">Object Identifiers</title>
137 When you refer to object identifiers in your application, you need to
138 be aware that SR and Z39.50 use two different set of OIDs to refer to
139 the same objects. To handle this easily, &yaz; provides a utility module
140 to &asn; which provides an internal representation of the OIDs used in
141 both protocols. Each oid is described by a structure:
145 typedef struct oident
147 enum oid_proto proto;
148 enum oid_class class;
149 enum oid_value value;
150 int oidsuffix[OID_SIZE];
156 The <literal>proto</literal> field can be set to either
157 <literal>PROTO_SR</literal> or <literal>PROTO_Z3950</literal>.
158 The <literal>class</literal> might be, say,
159 <literal>CLASS_RECSYN</literal>, and the <literal>value</literal> might be
160 <literal>VAL_USMARC</literal> for the USMARC record format. Functions
164 int *oid_ent_to_oid(struct oident *ent, int *dst);
165 struct oident *oid_getentbyoid(int *o);
169 are provided to map between object identifiers and database entries.
170 If you store a member of the <literal>oid_proto</literal> type in
171 your association state information, it's a simple matter, at runtime,
172 to generate the correct OID when you need it. For decoding, you can
173 simply ignore the proto field, or if you're strict, you can verify
174 that your peer is using the OID family from the correct protocol.
175 The <literal>desc</literal> field is a short, human-readable name
176 for the PDU, useful mainly for diagnostic output.
181 The old function <function>oid_getoidbyent</function> still exists but
182 is not thread safe. Use <function>oid_ent_to_oid</function> instead
183 and pass an array of size <literal>OID_SIZE</literal>.
189 Plans are underway to merge the two protocols into a single
190 definition, with one set of object identifiers. When this happens, the
191 oid module will no longer be required to support protocol
192 independence, but it should still be useful as a simple OID database.
197 <sect1 id="asn.external"><title>EXTERNAL Data</title>
200 In order to achieve extensibility and adaptability to different
201 application domains, the new version of the protocol defines many
202 structures outside of the main ASN.1 specification, referencing them
203 through ASN.1 EXTERNAL constructs. To simplify the construction and
204 access to the externally referenced data, the &asn; module defines a
205 specialized version of the EXTERNAL construct, called
206 <literal>Z_External</literal>.It is defined thus:
210 typedef struct Z_External
212 Odr_oid *direct_reference;
213 int *indirect_reference;
218 Z_External_single = 0,
220 Z_External_arbitrary,
224 Z_External_explainRecord,
225 Z_External_resourceReport1,
226 Z_External_resourceReport2
234 Odr_any *single_ASN1_type;
235 Odr_oct *octet_aligned;
236 Odr_bitmask *arbitrary;
240 Z_ExplainRecord *explainRecord;
241 Z_ResourceReport1 *resourceReport1;
242 Z_ResourceReport2 *resourceReport2;
251 When decoding, the &asn; module will attempt to determine which
252 syntax describes the data by looking at the reference fields
253 (currently only the direct-reference). For ASN.1 structured data, you
254 need only consult the <literal>which</literal> field to determine the
255 type of data. You can the access the data directly through the union.
256 When constructing data for encoding, you set the union pointer to point
257 to the data, and set the <literal>which</literal> field accordingly.
258 Remember also to set the direct (or indirect) reference to the correct
259 OID for the data type.
260 For non-ASN.1 data such as MARC records, use the
261 <literal>octet_aligned</literal> arm of the union.
265 Some servers return ASN.1 structured data values (eg. database
266 records) as BER-encoded records placed in the
267 <literal>octet-aligned</literal> branch of the EXTERNAL CHOICE.
268 The ASN-module will <emphasis>not</emphasis> automatically decode
269 these records. To help you decode the records in the application, the
274 Z_ext_typeent *z_ext_gettypebyref(oid_value ref);
278 Can be used to retrieve information about the known, external data
279 types. The function return a pointer to a static area, or NULL, if no
280 match for the given direct reference is found. The
281 <literal>Z_ext_typeent</literal>
286 typedef struct Z_ext_typeent
288 oid_value dref; /* the direct-reference OID value. */
289 int what; /* discriminator value for the external CHOICE */
290 Odr_fun fun; /* decoder function */
295 The <literal>what</literal> member contains the
296 <literal>Z_External</literal> union discriminator value for the
297 given type: For the SUTRS record syntax, the value would be
298 <literal>Z_External_sutrs</literal>.
299 The <literal>fun</literal> member contains a pointer to the
300 function which encodes/decodes the given type. Again, for the SUTRS
301 record syntax, the value of <literal>fun</literal> would be
302 <literal>z_SUTRS</literal> (a function pointer).
306 If you receive an EXTERNAL which contains an octet-string value that
307 you suspect of being an ASN.1-structured data value, you can use
308 <literal>z_ext_gettypebyref</literal> to look for the provided
310 If the return value is different from NULL, you can use the provided
311 function to decode the BER string (see section <link linkend="odr-use">
316 If you want to <emphasis>send</emphasis> EXTERNALs containing
317 ASN.1-structured values in the occtet-aligned branch of the CHOICE, this
318 is possible too. However, on the encoding phase, it requires a somewhat
319 involved juggling around of the various buffers involved.
322 If you need to add new, externally defined data types, you must update
323 the struct above, in the source file <filename>prt-ext.h</filename>, as
324 well as the encoder/decoder in the file <filename>prt-ext.c</filename>.
325 When changing the latter, remember to update both the
326 <literal>arm</literal> arrary and the list
327 <literal>type_table</literal>, which drives the CHOICE biasing that
328 is necessary to tell the different, structured types apart
334 Eventually, the EXTERNAL processing will most likely
335 automatically insert the correct OIDs or indirect-refs. First,
336 however, we need to determine how application-context management
337 (specifically the presentation-context-list) should fit into the
343 <sect1 id="asn.pdu"><title>PDU Contents Table</title>
346 We include, for reference, a listing of the fields of each top-level
347 PDU, as well as their default settings.
350 <table frame="top"><title>Default settings for PDU Initialize Request</title>
352 <colspec colwidth="7*" colname="field"></colspec>
353 <colspec colwidth="5*" colname="type"></colspec>
354 <colspec colwidth="7*" colname="value"></colspec>
359 <entry>Default Value</entry>
364 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
367 protocolVersion</entry><entry>Odr_bitmask</entry><entry>Empty bitmask
370 options</entry><entry>Odr_bitmask</entry><entry>Empty bitmask
373 preferredMessageSize</entry><entry>int</entry><entry>30*1024
376 maximumRecordSize</entry><entry>int</entry><entry>30*1024
379 idAuthentication</entry><entry>Z_IdAuthentication</entry><entry>NULL
382 implementationId</entry><entry>char*</entry><entry>"81"
385 implementationName</entry><entry>char*</entry><entry>"YAZ"
388 implementationVersion</entry><entry>char*</entry><entry>YAZ_VERSION
391 userInformationField</entry><entry>Z_UserInformation</entry><entry>NULL
394 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
400 <table frame="top"><title>Default settings for PDU Initialize
403 <colspec colwidth="7*" colname="field"></colspec>
404 <colspec colwidth="5*" colname="type"></colspec>
405 <colspec colwidth="7*" colname="value"></colspec>
410 <entry>Default Value</entry>
415 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
418 protocolVersion</entry><entry>Odr_bitmask</entry><entry>Empty bitmask
421 options</entry><entry>Odr_bitmask</entry><entry>Empty bitmask
424 preferredMessageSize</entry><entry>int</entry><entry>30*1024
427 maximumRecordSize</entry><entry>int</entry><entry>30*1024
430 result</entry><entry>bool_t</entry><entry>TRUE
433 implementationId</entry><entry>char*</entry><entry>"id)"
436 implementationName</entry><entry>char*</entry><entry>"YAZ"
439 implementationVersion</entry><entry>char*</entry><entry>YAZ_VERSION
442 userInformationField</entry><entry>Z_UserInformation</entry><entry>NULL
445 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
451 <table frame="top"><title>Default settings for PDU Search Request</title>
453 <colspec colwidth="7*" colname="field"></colspec>
454 <colspec colwidth="5*" colname="type"></colspec>
455 <colspec colwidth="7*" colname="value"></colspec>
460 <entry>Default Value</entry>
465 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
468 smallSetUpperBound</entry><entry>int</entry><entry>0
471 largeSetLowerBound</entry><entry>int</entry><entry>1
474 mediumSetPresentNumber</entry><entry>int</entry><entry>0
477 replaceIndicator</entry><entry>bool_t</entry><entry>TRUE
480 resultSetName</entry><entry>char *</entry><entry>"default"
483 num_databaseNames</entry><entry>int</entry><entry>0
486 databaseNames</entry><entry>char **</entry><entry>NULL
489 smallSetElementSetNames</entry><entry>Z_ElementSetNames
493 mediumSetElementSetNames</entry><entry>Z_ElementSetNames
497 preferredRecordSyntax</entry><entry>Odr_oid</entry><entry>NULL
500 query</entry><entry>Z_Query</entry><entry>NULL
503 additionalSearchInfo</entry><entry>Z_OtherInformation
507 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
513 <table frame="top"><title>Default settings for PDU Search Response</title>
515 <colspec colwidth="7*" colname="field"></colspec>
516 <colspec colwidth="5*" colname="type"></colspec>
517 <colspec colwidth="7*" colname="value"></colspec>
522 <entry>Default Value</entry>
528 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
531 resultCount</entry><entry>int</entry><entry>0
534 numberOfRecordsReturned</entry><entry>int</entry><entry>0
537 nextResultSetPosition</entry><entry>int</entry><entry>0
540 searchStatus</entry><entry>bool_t</entry><entry>TRUE
543 resultSetStatus</entry><entry>int</entry><entry>NULL
546 presentStatus</entry><entry>int</entry><entry>NULL
549 records</entry><entry>Z_Records</entry><entry>NULL
552 additionalSearchInfo</entry>
553 <entry>Z_OtherInformation</entry><entry>NULL
556 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
562 <table frame="top"><title>Default settings for PDU Present Request</title>
564 <colspec colwidth="7*" colname="field"></colspec>
565 <colspec colwidth="5*" colname="type"></colspec>
566 <colspec colwidth="7*" colname="value"></colspec>
571 <entry>Default Value</entry>
576 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
579 resultSetId</entry><entry>char*</entry><entry>"default"
582 resultSetStartPoint</entry><entry>int</entry><entry>1
585 numberOfRecordsRequested</entry><entry>int</entry><entry>10
588 num_ranges</entry><entry>int</entry><entry>0
591 additionalRanges</entry><entry>Z_Range</entry><entry>NULL
594 recordComposition</entry><entry>Z_RecordComposition</entry><entry>NULL
597 preferredRecordSyntax</entry><entry>Odr_oid</entry><entry>NULL
600 maxSegmentCount</entry><entry>int</entry><entry>NULL
603 maxRecordSize</entry><entry>int</entry><entry>NULL
606 maxSegmentSize</entry><entry>int</entry><entry>NULL
609 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
615 <table frame="top"><title>Default settings for PDU Present Response</title>
617 <colspec colwidth="7*" colname="field"></colspec>
618 <colspec colwidth="5*" colname="type"></colspec>
619 <colspec colwidth="7*" colname="value"></colspec>
624 <entry>Default Value</entry>
629 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
632 numberOfRecordsReturned</entry><entry>int</entry><entry>0
635 nextResultSetPosition</entry><entry>int</entry><entry>0
638 presentStatus</entry><entry>int</entry><entry>Z_PRES_SUCCESS
641 records</entry><entry>Z_Records</entry><entry>NULL
644 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
650 <table frame="top"><title>Default settings for Delete Result Set Request
653 <colspec colwidth="7*" colname="field"></colspec>
654 <colspec colwidth="5*" colname="type"></colspec>
655 <colspec colwidth="7*" colname="value"></colspec>
660 <entry>Default Value</entry>
664 <row><entry>referenceId
665 </entry><entry>Z_ReferenceId</entry><entry>NULL
668 deleteFunction</entry><entry>int</entry><entry>Z_DeleteRequest_list
671 num_ids</entry><entry>int</entry><entry>0
674 resultSetList</entry><entry>char**</entry><entry>NULL
677 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
683 <table frame="top"><title>Default settings for Delete Result Set Response
686 <colspec colwidth="7*" colname="field"></colspec>
687 <colspec colwidth="5*" colname="type"></colspec>
688 <colspec colwidth="7*" colname="value"></colspec>
693 <entry>Default Value</entry>
698 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
701 deleteOperationStatus</entry><entry>int</entry>
702 <entry>Z_DeleteStatus_success</entry></row>
704 num_statuses</entry><entry>int</entry><entry>0
707 deleteListStatuses</entry><entry>Z_ListStatus**</entry><entry>NULL
710 numberNotDeleted</entry><entry>int</entry><entry>NULL
713 num_bulkStatuses</entry><entry>int</entry><entry>0
716 bulkStatuses</entry><entry>Z_ListStatus</entry><entry>NUL
719 deleteMessage</entry><entry>char*</entry><entry>NULL
722 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
728 <table frame="top"><title>Default settings for Scan Request
731 <colspec colwidth="7*" colname="field"></colspec>
732 <colspec colwidth="5*" colname="type"></colspec>
733 <colspec colwidth="7*" colname="value"></colspec>
738 <entry>Default Value</entry>
743 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
746 num_databaseNames</entry><entry>int</entry><entry>0
749 databaseNames</entry><entry>char**</entry><entry>NULL
752 attributeSet</entry><entry>Odr_oid</entry><entry>NULL
755 termListAndStartPoint</entry><entry>Z_AttributesPlus...
756 </entry><entry>NULL</entry></row>
758 stepSize</entry><entry>int</entry><entry>NULL
761 numberOfTermsRequested</entry><entry>int</entry><entry>20
764 preferredPositionInResponse</entry><entry>int</entry><entry>NULL
767 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
773 <table frame="top"><title>Default settings for Scan Response
776 <colspec colwidth="7*" colname="field"></colspec>
777 <colspec colwidth="5*" colname="type"></colspec>
778 <colspec colwidth="7*" colname="value"></colspec>
783 <entry>Default Value</entry>
789 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
792 stepSize</entry><entry>int</entry><entry>NULL
795 scanStatus</entry><entry>int</entry><entry>Z_Scan_success
798 numberOfEntriesReturned</entry><entry>int</entry><entry>0
801 positionOfTerm</entry><entry>int</entry><entry>NULL
804 entries</entry><entry>Z_ListEntris</entry><entry>NULL
807 attributeSet</entry><entry>Odr_oid</entry><entry>NULL
810 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
816 <table frame="top"><title>Default settings for Trigger Resource
817 Control Request </title>
819 <colspec colwidth="7*" colname="field"></colspec>
820 <colspec colwidth="5*" colname="type"></colspec>
821 <colspec colwidth="7*" colname="value"></colspec>
826 <entry>Default Value</entry>
832 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
835 requestedAction</entry><entry>int</entry><entry>
836 Z_TriggerResourceCtrl_resou..
839 prefResourceReportFormat</entry><entry>Odr_oid</entry><entry>NULL
842 resultSetWanted</entry><entry>bool_t</entry><entry>NULL
845 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
852 <table frame="top"><title>Default settings for Resource
853 Control Request</title>
855 <colspec colwidth="7*" colname="field"></colspec>
856 <colspec colwidth="5*" colname="type"></colspec>
857 <colspec colwidth="7*" colname="value"></colspec>
862 <entry>Default Value</entry>
868 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
871 suspendedFlag</entry><entry>bool_t</entry><entry>NULL
874 resourceReport</entry><entry>Z_External</entry><entry>NULL
877 partialResultsAvailable</entry><entry>int</entry><entry>NULL
880 responseRequired</entry><entry>bool_t</entry><entry>FALSE
883 triggeredRequestFlag</entry><entry>bool_t</entry><entry>NULL
886 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
892 <table frame="top"><title>Default settings for Resource
893 Control Response</title>
895 <colspec colwidth="7*" colname="field"></colspec>
896 <colspec colwidth="5*" colname="type"></colspec>
897 <colspec colwidth="7*" colname="value"></colspec>
902 <entry>Default Value</entry>
908 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
911 continueFlag</entry><entry>bool_t</entry><entry>TRUE
914 resultSetWanted</entry><entry>bool_t</entry><entry>NULL
917 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
923 <table frame="top"><title>Default settings for Access
924 Control Request</title>
926 <colspec colwidth="7*" colname="field"></colspec>
927 <colspec colwidth="5*" colname="type"></colspec>
928 <colspec colwidth="7*" colname="value"></colspec>
933 <entry>Default Value</entry>
939 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
942 which</entry><entry>enum</entry><entry>Z_AccessRequest_simpleForm;
945 u</entry><entry>union</entry><entry>NULL
948 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
954 <table frame="top"><title>Default settings for Access
955 Control Response</title>
957 <colspec colwidth="7*" colname="field"></colspec>
958 <colspec colwidth="5*" colname="type"></colspec>
959 <colspec colwidth="7*" colname="value"></colspec>
964 <entry>Default Value</entry>
970 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
973 which</entry><entry>enum</entry><entry>Z_AccessResponse_simpleForm
976 u</entry><entry>union</entry><entry>NULL
979 diagnostic</entry><entry>Z_DiagRec</entry><entry>NULL
982 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
988 <table frame="top"><title>Default settings for Segment</title>
990 <colspec colwidth="7*" colname="field"></colspec>
991 <colspec colwidth="5*" colname="type"></colspec>
992 <colspec colwidth="7*" colname="value"></colspec>
997 <entry>Default Value</entry>
1003 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
1006 numberOfRecordsReturned</entry><entry>int</entry><entry>value=0
1009 num_segmentRecords</entry><entry>int</entry><entry>0
1012 segmentRecords</entry><entry>Z_NamePlusRecord</entry><entry>NULL
1014 <row><entry>otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
1020 <table frame="top"><title>Default settings for Close</title>
1022 <colspec colwidth="7*" colname="field"></colspec>
1023 <colspec colwidth="5*" colname="type"></colspec>
1024 <colspec colwidth="7*" colname="value"></colspec>
1027 <entry>Field</entry>
1029 <entry>Default Value</entry>
1035 referenceId</entry><entry>Z_ReferenceId</entry><entry>NULL
1038 closeReason</entry><entry>int</entry><entry>Z_Close_finished
1041 diagnosticInformation</entry><entry>char*</entry><entry>NULL
1044 resourceReportFormat</entry><entry>Odr_oid</entry><entry>NULL
1047 resourceFormat</entry><entry>Z_External</entry><entry>NULL
1050 otherInfo</entry><entry>Z_OtherInformation</entry><entry>NULL
1060 <!-- Keep this comment at the end of the file
1065 sgml-minimize-attributes:nil
1066 sgml-always-quote-attributes:t
1069 sgml-parent-document: "yaz.xml"
1070 sgml-local-catalogs: nil
1071 sgml-namecase-general:t