]> git.sur5r.net Git - openldap/blob - include/lber.h
Fixed the LDAP_F macro.
[openldap] / include / lber.h
1 /* $OpenLDAP$ */
2 /*
3  * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms are permitted only
7  * as authorized by the OpenLDAP Public License.  A copy of this
8  * license is available at http://www.OpenLDAP.org/license.html or
9  * in file LICENSE in the top-level directory of the distribution.
10  */
11 /* Portions
12  * Copyright (c) 1990 Regents of the University of Michigan.
13  * All rights reserved.
14  *
15  * Redistribution and use in source and binary forms are permitted
16  * provided that this notice is preserved and that due credit is given
17  * to the University of Michigan at Ann Arbor. The name of the University
18  * may not be used to endorse or promote products derived from this
19  * software without specific prior written permission. This software
20  * is provided ``as is'' without express or implied warranty.
21  */
22
23 #ifndef _LBER_H
24 #define _LBER_H
25
26 #include <ldap_cdefs.h>
27 #include <lber_types.h>
28
29 LDAP_BEGIN_DECL
30
31 /* booleans, enumerations, and integers */
32 typedef LBER_INT_T ber_int_t;
33
34 /* signed and unsigned versions */
35 typedef signed LBER_INT_T ber_sint_t;
36 typedef unsigned LBER_INT_T ber_uint_t;
37
38 /* tags */
39 typedef unsigned LBER_TAG_T ber_tag_t;
40
41 /* "socket" descriptors */
42 typedef LBER_SOCKET_T ber_socket_t;
43
44 /* lengths */
45 typedef unsigned LBER_LEN_T ber_len_t;
46
47 /* signed lengths */
48 typedef signed LBER_LEN_T ber_slen_t;
49
50
51 /* Overview of LBER tag construction
52  *
53  *      Bits
54  *      ______
55  *      8 7 | CLASS
56  *      0 0 = UNIVERSAL
57  *      0 1 = APPLICATION
58  *      1 0 = CONTEXT-SPECIFIC
59  *      1 1 = PRIVATE
60  *              _____
61  *              | 6 | DATA-TYPE
62  *                0 = PRIMITIVE
63  *                1 = CONSTRUCTED
64  *                      ___________
65  *                      | 5 ... 1 | TAG-NUMBER
66  */
67
68 /* BER classes and mask */
69 #define LBER_CLASS_UNIVERSAL    (ber_tag_t) 0x00U
70 #define LBER_CLASS_APPLICATION  (ber_tag_t) 0x40U
71 #define LBER_CLASS_CONTEXT      (ber_tag_t) 0x80U
72 #define LBER_CLASS_PRIVATE      (ber_tag_t) 0xc0U
73 #define LBER_CLASS_MASK         (ber_tag_t) 0xc0U
74
75 /* BER encoding type and mask */
76 #define LBER_PRIMITIVE          (ber_tag_t) 0x00U
77 #define LBER_CONSTRUCTED        (ber_tag_t) 0x20U
78 #define LBER_ENCODING_MASK      (ber_tag_t) 0x20U
79
80 #define LBER_BIG_TAG_MASK       (ber_tag_t) 0x1fU
81 #define LBER_MORE_TAG_MASK      (ber_tag_t) 0x80U
82
83 /*
84  * Note that LBER_ERROR and LBER_DEFAULT are values that can never appear
85  * as valid BER tags, and so it is safe to use them to report errors.  In
86  * fact, any tag for which the following is true is invalid:
87  */
88 #define LBER_INVALID(t)     (((t) & 0x080) && (((t) & (ber_tag_t) ~ 0x0FF))
89 #define LBER_ERROR                      ((ber_tag_t) ~ 0x0)
90 #define LBER_DEFAULT            ((ber_tag_t) ~ 0x0)
91
92 /* general BER types we know about */
93 #define LBER_BOOLEAN            (ber_tag_t) 0x01UL
94 #define LBER_INTEGER            (ber_tag_t) 0x02UL
95 #define LBER_BITSTRING          (ber_tag_t) 0x03UL
96 #define LBER_OCTETSTRING        (ber_tag_t) 0x04UL
97 #define LBER_NULL                       (ber_tag_t) 0x05UL
98 #define LBER_ENUMERATED         (ber_tag_t) 0x0aUL
99 #define LBER_SEQUENCE           (ber_tag_t) 0x30UL      /* constructed */
100 #define LBER_SET                        (ber_tag_t) 0x31UL      /* constructed */
101
102 #define OLD_LBER_SEQUENCE       (ber_tag_t) 0x10UL      /* w/o constructed bit - broken */
103 #define OLD_LBER_SET            (ber_tag_t) 0x11UL      /* w/o constructed bit - broken */
104
105 typedef int (*BERTranslateProc) LDAP_P((
106         char **bufp,
107         ber_len_t *buflenp,
108         int free_input ));
109
110 /* LBER BerElement options */
111 #define LBER_USE_DER            0x01
112 #define LBER_USE_INDEFINITE_LEN 0x02
113 #define LBER_TRANSLATE_STRINGS  0x04
114
115 /* get/set options for BerElement */
116 #define LBER_OPT_BER_OPTIONS    0x01
117 #define LBER_OPT_BER_DEBUG              0x02
118
119 #define LBER_OPT_DEBUG_LEVEL    LBER_OPT_BER_DEBUG
120
121 #define LBER_OPT_LOG_PRINT_FN   0x8001
122 #define LBER_OPT_MEMORY_FNS             0x8002
123
124 typedef void (*BER_LOG_PRINT_FN) LDAP_P(( char *buf ));
125
126 typedef void* (*BER_MEMALLOC_FN)        LDAP_P(( ber_len_t size ));
127 typedef void* (*BER_MEMCALLOC_FN)       LDAP_P(( ber_len_t n, ber_len_t size ));
128 typedef void* (*BER_MEMREALLOC_FN)      LDAP_P(( void *p, ber_len_t size ));
129 typedef void  (*BER_MEMFREE_FN)         LDAP_P(( void *p ));
130
131 typedef struct lber_memory_fns {
132         BER_MEMALLOC_FN bmf_malloc;
133         BER_MEMCALLOC_FN bmf_calloc;
134         BER_MEMREALLOC_FN bmf_realloc;
135         BER_MEMFREE_FN bmf_free;
136 } BerMemoryFunctions;
137
138 /* LBER Sockbuf options */ 
139 #define LBER_TO_FILE           0x01     /* to a file referenced by sb_fd   */
140 #define LBER_TO_FILE_ONLY      0x02     /* only write to file, not network */
141 #define LBER_MAX_INCOMING_SIZE 0x04     /* impose limit on incoming stuff  */
142 #define LBER_NO_READ_AHEAD     0x08     /* read only as much as requested  */
143
144 /* get/set options for Sockbuf */
145 #define LBER_OPT_SOCKBUF_DESC           0x1000
146 #define LBER_OPT_SOCKBUF_OPTIONS        0x1001
147 #define LBER_OPT_SOCKBUF_DEBUG          0x1002
148
149 /* on/off values */
150 #define LBER_OPT_ON             ((void *) 1)
151 #define LBER_OPT_OFF    ((void *) 0)
152
153 #define LBER_OPT_SUCCESS        0
154 #define LBER_OPT_ERROR          (-1)
155
156 typedef struct berelement BerElement;
157 typedef struct sockbuf Sockbuf;
158 typedef struct seqorset Seqorset;
159
160 /* structure for returning a sequence of octet strings + length */
161 typedef struct berval {
162         ber_len_t       bv_len;
163         char            *bv_val;
164 } BerValue;
165
166 #ifdef __MINGW32__
167 #   undef LDAP_F_PRE
168 #   ifdef LIBLBER_DECL
169 #       define LDAP_F_PRE       extern __declspec(LIBLBER_DECL)
170 #   else
171 #       define LDAP_F_PRE       extern
172 #   endif
173 #endif
174
175 /*
176  * in bprint.c:
177  */
178 LDAP_F( void )
179 ber_print_error LDAP_P((
180         LDAP_CONST char *data ));
181
182 LDAP_F( void )
183 ber_bprint LDAP_P((
184         LDAP_CONST char *data, ber_len_t len ));
185
186 LDAP_F( void )
187 ber_dump LDAP_P((
188         BerElement *ber, int inout ));
189
190 LDAP_F( void )
191 ber_sos_dump LDAP_P((
192         Seqorset *sos ));
193
194
195 /*
196  * in decode.c:
197  */
198 typedef int (*BERDecodeCallback) LDAP_P((
199         BerElement *ber,
200         void *data,
201         int mode ));
202
203 LDAP_F( ber_tag_t )
204 ber_get_tag LDAP_P((
205         BerElement *ber ));
206
207 LDAP_F( ber_tag_t )
208 ber_skip_tag LDAP_P((
209         BerElement *ber,
210         ber_len_t *len ));
211
212 LDAP_F( ber_tag_t )
213 ber_peek_tag LDAP_P((
214         BerElement *ber,
215         ber_len_t *len ));
216
217 LDAP_F( ber_tag_t )
218 ber_get_int LDAP_P((
219         BerElement *ber,
220         ber_int_t *num ));
221
222 LDAP_F( ber_tag_t )
223 ber_get_stringb LDAP_P((
224         BerElement *ber,
225         char *buf,
226         ber_len_t *len ));
227
228 LDAP_F( ber_tag_t )
229 ber_get_stringa LDAP_P((
230         BerElement *ber,
231         char **buf ));
232
233 LDAP_F( ber_tag_t )
234 ber_get_stringal LDAP_P((
235         BerElement *ber,
236         struct berval **bv ));
237
238 LDAP_F( ber_tag_t )
239 ber_get_bitstringa LDAP_P((
240         BerElement *ber,
241         char **buf,
242         ber_len_t *len ));
243
244 LDAP_F( ber_tag_t )
245 ber_get_null LDAP_P((
246         BerElement *ber ));
247
248 LDAP_F( ber_tag_t )
249 ber_get_boolean LDAP_P((
250         BerElement *ber,
251         ber_int_t *boolval ));
252
253 LDAP_F( ber_tag_t )
254 ber_first_element LDAP_P((
255         BerElement *ber,
256         ber_len_t *len,
257         char **last ));
258
259 LDAP_F( ber_tag_t )
260 ber_next_element LDAP_P((
261         BerElement *ber,
262         ber_len_t *len,
263         char *last ));
264
265 LDAP_F( ber_tag_t )
266 ber_scanf LDAP_P((                                                                
267         BerElement *ber,
268         LDAP_CONST char *fmt,
269         ... ));
270
271 LDAP_F( void )
272 ber_set_string_translators LDAP_P((
273         BerElement *ber,
274         BERTranslateProc encode_proc,
275         BERTranslateProc decode_proc ));
276
277 /*
278  * in encode.c
279  */
280 typedef int (*BEREncodeCallback) LDAP_P((
281         BerElement *ber,
282         void *data ));
283
284 LDAP_F( int )
285 ber_put_enum LDAP_P((
286         BerElement *ber,
287         ber_int_t num,
288         ber_tag_t tag ));
289
290 LDAP_F( int )
291 ber_put_int LDAP_P((
292         BerElement *ber,
293         ber_int_t num,
294         ber_tag_t tag ));
295
296 LDAP_F( int )
297 ber_put_ostring LDAP_P((
298         BerElement *ber,
299         LDAP_CONST char *str,
300         ber_len_t len,
301         ber_tag_t tag ));
302
303 LDAP_F( int )
304 ber_put_berval LDAP_P((
305         BerElement *ber,
306         LDAP_CONST struct berval *bv,
307         ber_tag_t tag ));
308
309 LDAP_F( int )
310 ber_put_string LDAP_P((
311         BerElement *ber,
312         LDAP_CONST char *str,
313         ber_tag_t tag ));
314
315 LDAP_F( int )
316 ber_put_bitstring LDAP_P((
317         BerElement *ber,
318         LDAP_CONST char *str,
319         ber_len_t bitlen,
320         ber_tag_t tag ));
321
322 LDAP_F( int )
323 ber_put_null LDAP_P((
324         BerElement *ber,
325         ber_tag_t tag ));
326
327 LDAP_F( int )
328 ber_put_boolean LDAP_P((
329         BerElement *ber,
330         ber_int_t boolval,
331         ber_tag_t tag ));
332
333 LDAP_F( int )
334 ber_start_seq LDAP_P((
335         BerElement *ber,
336         ber_tag_t tag ));
337
338 LDAP_F( int )
339 ber_start_set LDAP_P((
340         BerElement *ber,
341         ber_tag_t tag ));
342
343 LDAP_F( int )
344 ber_put_seq LDAP_P((
345         BerElement *ber ));
346
347 LDAP_F( int )
348 ber_put_set LDAP_P((
349         BerElement *ber ));
350
351 LDAP_F( int )
352 ber_printf LDAP_P((
353         BerElement *ber,
354         LDAP_CONST char *fmt,
355         ... ));
356
357
358 /*
359  * in io.c:
360  */
361
362 LDAP_F( ber_slen_t )
363 ber_read LDAP_P((
364         BerElement *ber,
365         char *buf,
366         ber_len_t len ));
367
368 LDAP_F( ber_slen_t )
369 ber_write LDAP_P((
370         BerElement *ber,
371         LDAP_CONST char *buf,
372         ber_len_t len,
373         int nosos ));
374
375 LDAP_F( void )
376 ber_free LDAP_P((
377         BerElement *ber,
378         int freebuf ));
379
380 LDAP_F( int )
381 ber_flush LDAP_P((
382         Sockbuf *sb,
383         BerElement *ber,
384         int freeit ));
385
386 LDAP_F( BerElement * )
387 ber_alloc LDAP_P(( void )); /* DEPRECATED */
388
389 LDAP_F( BerElement * )
390 der_alloc LDAP_P(( void )); /* DEPRECATED */
391
392 LDAP_F( BerElement * )
393 ber_alloc_t LDAP_P((
394         int beroptions ));
395
396 LDAP_F( BerElement * )
397 ber_dup LDAP_P((
398         BerElement *ber ));
399
400 LDAP_F( ber_tag_t )
401 ber_get_next LDAP_P((
402         Sockbuf *sb,
403         ber_len_t *len,
404         BerElement *ber ));
405
406 LDAP_F( void )
407 ber_init_w_nullc LDAP_P((
408         BerElement *ber,
409         int options ));
410
411 LDAP_F( void )
412 ber_reset LDAP_P((
413         BerElement *ber,
414         int was_writing ));
415
416 LDAP_F( BerElement * )
417 ber_init LDAP_P((
418         struct berval *bv ));
419
420 LDAP_F( int )
421 ber_flatten LDAP_P((
422         BerElement *ber,
423         struct berval **bvPtr ));
424
425 /*
426  * LBER ber accessor functions
427  */
428
429 LDAP_F( int )
430 ber_get_option LDAP_P((
431         void *item,
432         int option,
433         void *outvalue));
434
435 LDAP_F( int )
436 ber_set_option LDAP_P((
437         void *item,
438         int option,
439         LDAP_CONST void *invalue));
440
441 /*
442  * LBER sockbuf.c
443  */
444
445 LDAP_F( Sockbuf * )
446 ber_sockbuf_alloc( void );
447
448 LDAP_F( Sockbuf *  )
449 ber_sockbuf_alloc_fd(
450         ber_socket_t fd );
451
452 LDAP_F( void )
453 ber_sockbuf_free(
454         Sockbuf *sb );
455
456 /*
457  * LBER memory.c
458  */
459 LDAP_F( void * )
460 ber_memalloc LDAP_P((
461         ber_len_t s ));
462
463 LDAP_F( void * )
464 ber_memrealloc LDAP_P((
465         void* p,
466         ber_len_t s ));
467
468 LDAP_F( void * )
469 ber_memcalloc LDAP_P((
470         ber_len_t n,
471         ber_len_t s ));
472
473 LDAP_F( void )
474 ber_memfree LDAP_P((
475         void* p ));
476
477 LDAP_F( void )
478 ber_memvfree LDAP_P((
479         void** vector ));
480
481 LDAP_F( void )
482 ber_bvfree LDAP_P((
483         struct berval *bv ));
484
485 LDAP_F( void )
486 ber_bvecfree LDAP_P((
487         struct berval **bv ));
488
489 LDAP_F( struct berval * )
490 ber_bvdup LDAP_P((
491         LDAP_CONST struct berval *bv ));
492
493 LDAP_F( char * )
494 ber_strdup LDAP_P((
495         LDAP_CONST char * ));
496
497 LDAP_END_DECL
498
499 #endif /* _LBER_H */