|
|
1.1 root 1: .TH LIBPSAP 3 "15 APR 1986"
2: .\" $header: /f/iso/psap/rcs/libpsap.3,v 4.4 88/05/31 15:19:26 mrose exp $
3: .\"
4: .\"
5: .\" $log: libpsap.3,v $
6: .\" revision 4.4 88/05/31 15:19:26 mrose
7: .\" 3n -> 3
8: .\"
9: .\" revision 4.3 88/05/30 18:30:52 mrose
10: .\" update
11: .\"
12: .\" revision 4.2 88/01/29 14:55:14 mrose
13: .\" touch-up
14: .\"
15: .\" revision 4.1 87/12/28 13:35:24 mrose
16: .\" twg
17: .\"
18: .\" revision 4.0 87/10/12 16:19:59 mrose
19: .\" release 3.0
20: .\"
21: .SH NAME
22: libpsap \- asn.1 presentation services library
23: .SH SYNOPSIS
24: .B "#include <isode/psap.h>"
25: .sp
26: \fIcc\fR\0...\0\fB\-lpsap\fR
27: .SH DESCRIPTION
28: the \fIlibpsap\fR library contains a set of routines which implement
29: presentation syntax abstractions.
30: two primary objects are manipulated:
31: presentation \fIelements\fR and presentation \fIstreams\fR.
32: .SH "PRESENTATION STREAMS"
33: a stream is an object, similar to a \fBfile*\fR object in \fIstdio\fR\0(3),
34: which is used to read and write elements.
35: a stream is created by calling \fBps_alloc\fR with the address of an
36: integer\-valued routine that will initialize certain stream\-dependent
37: variables (presently, the read and write routines).
38: two standard initialization routines are available:
39: \fBstd_open\fR,
40: which is used for presentation streams connected to \fIstdio\fR objects;
41: and,
42: \fBstr_open\fR,
43: which is used for presentation streams connected to \fIstring\fR objects.
44: after \fBps_alloc\fR successfully returns,
45: final initialization is performed,
46: usually by calling either
47: \fBstd_setup\fR with the \fIstdio\fR object to be bound;
48: or,
49: \fBstr_setup\fR with the string object to be bound.
50: after the setup routine successfully returns,
51: the presentation stream is ready for reading or writing.
52: .PP
53: currently streams which have been initialized by these routines are
54: uni-directional.
55: This might change in a future distribution.
56: Streams which have been initialized by \fBstd_open\fR and \fBstr_open\fR
57: will automatically allocate additional resources when necessary,
58: to the limits allowed by the operating system
59: (e.g., repeated calls to a stream connected to a \fIstring\fR object will
60: result in additional memory being allocated from UNIX).
61: .PP
62: Low\-level I/O is done from/to the stream by the macros \fBps_read\fR and
63: \fBps_write\fR.
64: These both call an internal routine which switches to the object\-specific
65: read or write routine as appropriate.
66: This internal routine, \fBps_io\fR, implements the consistent presentation
67: stream abstraction.
68: .PP
69: Finally,
70: when a stream has been exhausted,
71: it can be closed and de\-allocated with \fBps_free\fR.
72: .PP
73: The user may implement additional stream objects.
74: Examine the source to the \fBstd_\fR and \fBstr_\fR routines
75: to understand the internal protocol and uniform interface.
76: .SH TRANSLATION
77: The routine \fBps2pe\fR can be used to read the next presentation element
78: from a stream.
79: This routine returns a pointer to the element or \fBNULLPE\fR on error.
80: Similarly, \fBpe2ps\fR can be used to write a presentation element at the end
81: of the stream.
82: This returns returns \fBOK\fR if all went well, \fBNOTOK\fR otherwise.
83: On errors with either routine,
84: the \fBps_errno\fR field of the stream can be consulted to see what happened.
85: .PP
86: When writing to a presentation stream,
87: the variable \fBps_len_strategy\fR controls how long CONStructor types are
88: represented.
89: If this variable is equal to \fBPS_LEN_SPAG\fR (the default),
90: then the indefinite form is used whenever the length field of the element can
91: not be represented in one octet.
92: If \fBPS_LEN_INDF\fR,
93: then the indefinite form is used regardless of the length of the element.
94: Otherwise,
95: if \fBPS_LEN_LONG\fR,
96: then the indefinite form is never used.
97: .PP
98: For debugging purposes,
99: instead of treating a presentation stream as a binary object,
100: the routines \fBpl2pe\fR and \fBpe2pl\fR can be used.
101: These translate between presentation \fIlists\fR and presentation elements.
102: A list is an ASCII text representation,
103: with a simple LISP\-like syntax which contains semantic information
104: identical to its presentation stream counterpart.
105: .SH "PRESENTATION ELEMENTS"
106: Once a presentation stream has been initialized and elements are being read,
107: there are several routines that can be used to translate between the
108: machine\-independent representation of the element and machine\-specific
109: objects such as integers, strings, and the like.
110: It is extremely important that programs use these routines to perform the
111: translation between objects.
112: They have been carefully coded to present a simple, uniform interface between
113: machine\-specifics and the machine\-independent presentation protocol.
114: .PP
115: A new element can be created with \fBpe_alloc\fR,
116: and de\-allocated with \fBpe_free\fR
117: (see the warning in the \fBBUGS\fR section below).
118: Two elements can be compared with \fBpe_cmp\fR,
119: and an element can be copied with \fBpe_cpy\fR.
120: .PP
121: A \fIboolean\fR is an integer taking on the values \fB0\fR or \fB1\fR.
122: The routine \fBprim2bool\fR takes an element and returns the boolean value
123: encoded therein.
124: Similarly, \fBbool2prim\fR takes a boolean and returns an element which
125: encodes that value.
126: .PP
127: An \fIinteger\fR is a signed\-quantity, whose precision is specific to a
128: particular host.
129: The routine \fBprim2int\fR takes an element and returns the integer value
130: encoded therein (if the value is \fBNOTOK\fR, check the \fBpe_errno\fR field
131: of the element to see if there was an error).
132: The routine \fBint2prim\fR performs the inverse operation.
133: .PP
134: An \fIoctetstring\fR is a pair of values,
135: a character pointer and an integer length.
136: The pointer addresses the first octet in the string
137: (which need not be null\-terminated),
138: the length indicates how many octets are in the string.
139: The routine \fBprim2oct\fR takes an element and allocates a new string
140: containing the value encoded therein.
141: The routine \fBoct2prim\fR performs the inverse operation,
142: copying the original string (and not de\-allocating it).
143: .PP
144: A \fIbitvector\fR is an arbitrarily long string of bits with three operations:
145: \fBbit_on\fR which turns the indicated bit on,
146: \fBbit_off\fR which turns the indicated bit off,
147: and,
148: \fBbit_test\fR which returns a boolean value telling if the indicated bit was
149: on.
150: The routine \fBprim2bit\fR takes an element and builds such an abstraction
151: containing the value encoded therein.
152: The routine \fBbit2prim\fR performs the inverse operation.
153: .PP
154: A \fItimestring\fR represents a date/time in many forms.
155: Consult \fB<isode/psap.h>\fR for the elements in this structure.
156: The routines \fBprim2utc\fR and \fButc2prim\fR are used to translate between
157: a machine\-specific internal form and the machine\-independent form.
158: .PP
159: Two list disciplines are implemented:
160: \fIsets\fR, in which each member is distinguished by a unique identifier;
161: and,
162: \fIsequences\fR, in which each element is distinguished by its offset from
163: the head of the list.
164: On both types of lists,
165: the macro \fBfirst_member\fR returns the first member in the list,
166: while \fBnext_member\fR returns the next member.
167: .PP
168: The routines \fBprim2set\fR and \fBset2prim\fR are used to translate between
169: presentation elements and the set list;
170: \fBset_add\fR may be called to add a new member to the set;
171: \fBset_del\fR may be called to remove the identified member from the set;
172: and,
173: \fBset_find\fR may be called to locate the identified member.
174: .PP
175: The routines \fBprim2seq\fR and \fBseq2prim\fR are used to translate between
176: presentation elements and the sequence list;
177: \fBseq_add\fR may be called to add a new element to the sequence;
178: \fBseq_del\fR may be called to remove the identified element from the sequence;
179: and,
180: \fBseq_find\fR may be called to locate the identified element.
181: .PP
182: With both lists,
183: a convenient way of stepping through all the members is:
184: .sp
185: .in +.5i
186: .nf
187: .B "for (p = first_member (pe); p; p = next_member (pe, p))"
188: .B "\0\0\0\0switch (\fIdiscriminator\fR) {"
189: .B "\0\0\0\0\0\0\0\0...."
190: .B "\0\0\0\0}"
191: .fi
192: .in -.5i
193: .sp
194: where \fIdiscriminator\fR is:
195: .sp
196: .in +.5i
197: .B "PE_ID (p \-> pe_class, p \-> pe_id)"
198: .in -.5i
199: .sp
200: for sets,
201: and:
202: .sp
203: .in +.5i
204: .B "p \-> pe_offset"
205: .in -.5i
206: .sp
207: for sequences.
208: .SH FILES
209: None
210: .SH "SEE ALSO"
211: pepy(1),
212: .br
213: \fIThe ISO Development Environment: User's Manual\fR,
214: .br
215: ISO 8825:
216: \fIInformation Processing \-\- Open Systems
217: Interconnection \-\- Specification of basic encoding rules for Abstract Syntax
218: Notation One (ASN.1)\fR,
219: .br
220: CCITT Recommendation X.409:
221: \fIMessage Handling Systems:
222: Presentation Transfer Syntax and Notation\fR
223: .SH DIAGNOSTICS
224: Most routines either return the manifest constant \fBNULL\fR (0) or
225: \fBNOTOK\fR (\-1) on error.
226: In addition,
227: routines called with a pointer to a presentation stream also update the
228: \fBps_errno\fR field of the stream on error.
229: The routine \fBps_error\fR returns a null\-termianted diagnostic string when
230: given the value of this field.
231: Similarly,
232: routines called with a pointer to a presentation element also update the
233: \fBpe_errno\fR field of the stream on error.
234: The routine \fBpe_error\fR returns a null\-termianted diagnostic string when
235: given the value of this field.
236: .SH AUTHOR
237: Marshall T. Rose
238: .SH BUGS
239: A \*(lqvirtual\*(rq presentation element option should be available to avoid
240: reading everything in\-core during parsing.
241: .PP
242: When using \fBpe_free\fR on an element,
243: care must be taken to remove any references to that element in other
244: structures.
245: For example,
246: if you have a sequence containing a sequence,
247: and you free the child sequence,
248: be sure to zero\-out the parent's pointer to the child,
249: otherwise subsequent calls using the parent will go romping through
250: hyperspace.
251:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.