123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427 |
- (* $OpenLDAP: pkg/ldap/include/lber.h,v 1.83.2.11 2005/01/20 17:00:58 kurt Exp $ *)
- (* This work is part of OpenLDAP Software <http://www.openldap.org/>.
- *
- * Copyright 1998-2005 The OpenLDAP Foundation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted only as authorized by the OpenLDAP
- * Public License.
- *
- * A copy of this license is available in file LICENSE in the
- * top-level directory of the distribution or, alternatively, at
- * <http://www.OpenLDAP.org/license.html>.
- *)
- (* Portions Copyright (c) 1990 Regents of the University of Michigan.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of Michigan at Ann Arbor. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific prior written permission. This software
- * is provided ``as is'' without express or implied warranty.
- *)
- (* Overview of LBER tag construction
- *
- * Bits
- * ______
- * 8 7 | CLASS
- * 0 0 = UNIVERSAL
- * 0 1 = APPLICATION
- * 1 0 = CONTEXT-SPECIFIC
- * 1 1 = PRIVATE
- * _____
- * | 6 | DATA-TYPE
- * 0 = PRIMITIVE
- * 1 = CONSTRUCTED
- * ___________
- * | 5 ... 1 | TAG-NUMBER
- *)
- const
- (* BER classes and mask *)
- LBER_CLASS_UNIVERSAL = ber_tag_t($00);
- LBER_CLASS_APPLICATION = ber_tag_t($40);
- LBER_CLASS_CONTEXT = ber_tag_t($80);
- LBER_CLASS_PRIVATE = ber_tag_t($c0);
- LBER_CLASS_MASK = ber_tag_t($c0);
- (* BER encoding type and mask *)
- LBER_PRIMITIVE = ber_tag_t($00);
- LBER_CONSTRUCTED = ber_tag_t($20);
- LBER_ENCODING_MASK = ber_tag_t($20);
- LBER_BIG_TAG_MASK = ber_tag_t($1f);
- LBER_MORE_TAG_MASK = ber_tag_t($80);
- (*
- * Note that LBER_ERROR and LBER_DEFAULT are values that can never appear
- * as valid BER tags, and so it is safe to use them to report errors. In
- * fact, any tag for which the following is true is invalid:
- *)
- function LBER_INVALID(t: ber_tag_t): ber_tag_t;
- const
- LBER_ERROR = ber_tag_t(-1);
- LBER_DEFAULT = ber_tag_t(-1);
- (* general BER types we know about *)
- LBER_BOOLEAN = ber_tag_t($01);
- LBER_INTEGER = ber_tag_t($02);
- LBER_BITSTRING = ber_tag_t($03);
- LBER_OCTETSTRING = ber_tag_t($04);
- LBER_NULL = ber_tag_t($05);
- LBER_ENUMERATED = ber_tag_t($0a);
- LBER_SEQUENCE = ber_tag_t($30); (* constructed *)
- LBER_SET = ber_tag_t($31); (* constructed *)
- (* LBER BerElement options *)
- LBER_USE_DER = $01;
- (* get/set options for BerElement *)
- LBER_OPT_BER_OPTIONS = $01;
- LBER_OPT_BER_DEBUG = $02;
- LBER_OPT_BER_REMAINING_BYTES = $03;
- LBER_OPT_BER_TOTAL_BYTES = $04;
- LBER_OPT_BER_BYTES_TO_WRITE = $05;
- LBER_OPT_BER_MEMCTX = $06;
- LBER_OPT_DEBUG_LEVEL = LBER_OPT_BER_DEBUG;
- LBER_OPT_REMAINING_BYTES = LBER_OPT_BER_REMAINING_BYTES;
- LBER_OPT_TOTAL_BYTES = LBER_OPT_BER_TOTAL_BYTES;
- LBER_OPT_BYTES_TO_WRITE = LBER_OPT_BER_BYTES_TO_WRITE;
- LBER_OPT_LOG_PRINT_FN = $8001;
- LBER_OPT_MEMORY_FNS = $8002;
- LBER_OPT_ERROR_FN = $8003;
- LBER_OPT_LOG_PRINT_FILE = $8004;
- (* get/set Memory Debug options *)
- LBER_OPT_MEMORY_INUSE = $8005; (* for memory debugging *)
- LBER_OPT_LOG_PROC = $8006; (* for external logging function *)
- type
- BER_ERRNO_FN = function: pcint; cdecl;
- BER_LOG_PRINT_FN = procedure(const buf: pcchar); cdecl;
- BER_MEMALLOC_FN = function(size: ber_len_t): Pointer; cdecl;
- BER_MEMCALLOC_FN = function(n: ber_len_t; size: ber_len_t): Pointer; cdecl;
- BER_MEMREALLOC_FN = function(p: Pointer; size: ber_len_t): Pointer; cdecl;
- BER_MEMFREE_FN = function(p: Pointer): Pointer; cdecl;
- plber_memory_fns = ^lber_memory_fns;
- lber_memory_fns = record
- bmf_malloc : BER_MEMALLOC_FN;
- bmf_calloc : BER_MEMCALLOC_FN;
- bmf_realloc : BER_MEMREALLOC_FN;
- bmf_free : BER_MEMFREE_FN;
- end;
- PBerMemoryFunctions = ^BerMemoryFunctions;
- BerMemoryFunctions = lber_memory_fns;
- const
- (* LBER Sockbuf_IO options *)
- LBER_SB_OPT_GET_FD = 1;
- LBER_SB_OPT_SET_FD = 2;
- LBER_SB_OPT_HAS_IO = 3;
- LBER_SB_OPT_SET_NONBLOCK = 4;
- LBER_SB_OPT_GET_SSL = 7;
- LBER_SB_OPT_DATA_READY = 8;
- LBER_SB_OPT_SET_READAHEAD = 9;
- LBER_SB_OPT_DRAIN = 10;
- LBER_SB_OPT_NEEDS_READ = 11;
- LBER_SB_OPT_NEEDS_WRITE = 12;
- LBER_SB_OPT_GET_MAX_INCOMING = 13;
- LBER_SB_OPT_SET_MAX_INCOMING = 14;
- (* Largest option used by the library *)
- LBER_SB_OPT_OPT_MAX = 14;
- (* LBER IO operations stacking levels *)
- LBER_SBIOD_LEVEL_PROVIDER = 10;
- LBER_SBIOD_LEVEL_TRANSPORT = 20;
- LBER_SBIOD_LEVEL_APPLICATION = 30;
- (* get/set options for Sockbuf *)
- LBER_OPT_SOCKBUF_DESC = $1000;
- LBER_OPT_SOCKBUF_OPTIONS = $1001;
- LBER_OPT_SOCKBUF_DEBUG = $1002;
- LBER_OPT_SUCCESS = 0;
- LBER_OPT_ERROR = -1;
- (* on/off values *)
- const
- LBER_OPT_OFF = Pointer(0);
- var
- ber_pvt_opt_on: cchar; cvar; external;
- function LBER_OPT_ON: Pointer;
- (* Structure for LBER IO operarion descriptor *)
- type
- PBerElement = Pointer;
- PSockbuf = Pointer;
- PSeqorset = Pointer;
- PSockbuf_IO = ^Sockbuf_IO;
- PSockbuf_IO_Desc = ^Sockbuf_IO_Desc;
- Sockbuf_IO_Desc = record
- sbiod_level : cint;
- sbiod_sb : PSockbuf;
- sbiod_io : PSockbuf_IO;
- sbiod_pvt : Pointer;
- sbiod_next : PSockbuf_IO_Desc;
- end;
- (* Structure for LBER IO operation functions *)
- Sockbuf_IO = record
- sbi_setup : function(sbiod: PSockbuf_IO_Desc; arg: Pointer): cint; cdecl;
- sbi_remove : function(sbiod: PSockbuf_IO_Desc): cint; cdecl;
- sbi_ctrl : function(sbiod: PSockbuf_IO_Desc; opt: cint; arg: Pointer): cint; cdecl;
- sbi_read : function(sbiod: PSockbuf_IO_Desc; buf: Pointer; len: ber_len_t): ber_slen_t; cdecl;
- sbi_write : function(sbiod: PSockbuf_IO_Desc; buf: Pointer; len: ber_len_t): ber_slen_t; cdecl;
- sbi_close : function(sbiod: PSockbuf_IO_Desc): cint; cdecl;
- end;
- (* Helper macros for LBER IO functions *)
- function LBER_SBIOD_READ_NEXT(sbiod: PSockbuf_IO_Desc; buf: Pointer; len: ber_len_t): ber_slen_t;
- function LBER_SBIOD_WRITE_NEXT(sbiod: PSockbuf_IO_Desc; buf: Pointer; len: ber_len_t): ber_slen_t;
- function LBER_SBIOD_CTRL_NEXT(sbiod: PSockbuf_IO_Desc; opt: cint; arg: Pointer): cint;
- (* structure for returning a sequence of octet strings + length *)
- type
- PPPBerval = ^PPBerval;
- PPBerval = ^PBerval;
- PBerval = ^Berval;
- Berval = record
- bv_len : ber_len_t;
- bv_val : pcchar;
- end;
-
- PBerVarray = ^BerVarray;
- BerVarray = ^PBerval; (* To distinguish from a single bv *)
- (* this should be moved to lber-cint.h *)
- (*
- * in bprint.c:
- *)
- procedure ber_error_print(const data: pcchar); cdecl; external;
- procedure ber_bprint(const data: pcchar; len: ber_len_t); cdecl; external;
- procedure ber_dump(ber: PBerElement; inout : cint); cdecl; external;
- procedure ber_sos_dump(sos: PSeqorset); cdecl; external;
- (*
- * in decode.c:
- *)
- type
- BERDecodeCallback = function(ber: PBerElement; data: Pointer; mode: cint): cint; cdecl;
- function ber_get_tag(ber: PBerElement): ber_tag_t; cdecl; external;
- function ber_skip_tag(ber: PBerElement; var len: ber_len_t): ber_tag_t; cdecl; external;
- function ber_peek_tag(ber: PBerElement; var len: ber_len_t): ber_tag_t; cdecl; external;
- function ber_get_int(ber: PBerElement; var num: ber_int_t): ber_tag_t; cdecl; external;
- function ber_get_enum(ber: PBerElement; var num: ber_int_t): ber_tag_t; cdecl; external;
- function ber_get_stringb(ber: PBerElement; buf: pcchar; var len: ber_len_t): ber_tag_t; cdecl; external;
- function ber_get_stringbv(ber: PBerElement; bv: PBerval; alloc: cbool): ber_tag_t; cdecl; external;
- function ber_get_stringa(ber: PBerElement; var buf: pcchar): ber_tag_t; cdecl; external;
- function ber_get_stringal(ber: PBerElement; var bv: PBerval): ber_tag_t; cdecl; external;
- function ber_get_bitstringa(ber: PBerElement; var buf: pcchar; var len: ber_len_t): ber_tag_t; cdecl; external;
- function ber_get_null(ber: PBerElement): ber_tag_t; cdecl; external;
- function ber_get_Boolean(ber: PBerElement; var boolval: ber_int_t): ber_tag_t; cdecl; external;
- function ber_first_element(ber: PBerElement; var len: ber_len_t; var last: pcchar): ber_tag_t; cdecl; external;
- function ber_next_element(ber: PBerElement; var len: ber_len_t; const last: pcchar): ber_tag_t; cdecl; external;
- function ber_scanf(ber: PBerElement;const fmt: pcchar): ber_tag_t; cdecl; varargs; external;
- (*
- * in encode.c
- *)
- type
- BEREncodeCallback = function(ber: PBerElement; data: Pointer): cint;
- function ber_put_enum(ber: PBerElement; num: ber_int_t; tag: ber_tag_t): cint; cdecl; external;
- function ber_put_int(ber: PBerElement; num: ber_int_t; tag: ber_tag_t): cint; cdecl; external;
- function ber_put_ostring(ber: PBerElement; const str: pcchar; len: ber_len_t; tag: ber_tag_t): cint; cdecl; external;
- function ber_put_berval(ber: PBerElement; bv: PBerval; tag: ber_tag_t): cint; cdecl; external;
- function ber_put_string(ber: PBerElement; const str: pcchar; tag: ber_tag_t): cint; cdecl; external;
- function ber_put_bitstring(ber: PBerElement; const str: pcchar; bitlen: ber_len_t; tag: ber_tag_t): cint; cdecl; external;
- function ber_put_null(ber: PBerElement; tag: ber_tag_t): cint; cdecl; external;
- function ber_put_boolean(ber: PBerElement; boolval: ber_int_t; tag: ber_tag_t): cint; cdecl; external;
- function ber_start_seq(ber: PBerElement; tag: ber_tag_t): cint; cdecl; external;
- function ber_start_set(ber: PBerElement; tag: ber_tag_t): cint; cdecl; external;
- function ber_put_seq(ber: PBerElement): cint; cdecl; external;
- function ber_put_set(ber: PBerElement): cint; cdecl; external;
- function ber_printf(ber: PBerElement; const fmt: pcchar): cint; cdecl; varargs; external;
- (*
- * in io.c:
- *)
- function ber_read(ber: PBerElement; buf: pcchar; len: ber_len_t): ber_slen_t; cdecl; external;
- function ber_write(ber: PBerElement; const buf: pcchar; len: ber_len_t; nosos: cint): ber_slen_t; cdecl; external;
- procedure ber_free(ber: PBerElement; freebuf: cbool); cdecl; external;
- procedure ber_free_buf(ber: PBerElement); cdecl; external;
- function ber_flush(sb: PSockbuf; ber: PBerElement; freeit: cbool): cint; cdecl; external;
- function ber_alloc: PBerElement; cdecl; external; deprecated;
- function der_alloc: PBerElement; cdecl; external; deprecated;
- function ber_alloc_t(beroptions: cint): PBerElement; cdecl; external;
- function ber_dup(ber: PBerElement): PBerElement; cdecl; external;
- function ber_get_next(sb: PSockbuf; var len: ber_len_t; ber: PBerElement): ber_tag_t; cdecl; external;
- procedure ber_init2(ber: PBerElement; bv: PBerval; options: cint); cdecl; external;
- procedure ber_init_w_nullc(ber: PBerElement; options: cint); cdecl; external; deprecated;
- procedure ber_reset(ber: PBerElement; was_writing: cbool); cdecl; external;
- function ber_init(bv: PBerval): PBerElement; cdecl; external;
- function ber_flatten(ber: PBerElement; var bvPtr: PBerval): cint; cdecl; external;
- function ber_flatten2(ber: PBerElement; bv: PBerval; alloc: cbool): cint; cdecl; external;
- function ber_remaining(ber: PBerElement): cint; cdecl; external;
- (*
- * LBER ber accessor functions
- *)
- function ber_get_option(item: Pointer; option: cint; outvalue: Pointer): cint; cdecl; external;
- function ber_set_option(item: Pointer; option: cint; const invalue: Pointer): cint; cdecl; external;
- (*
- * LBER sockbuf.c
- *)
- function ber_sockbuf_alloc: PSockbuf; cdecl; external;
- procedure ber_sockbuf_free(sb: PSockbuf); cdecl; external;
- function ber_sockbuf_add_io(sb: PSockbuf; sbio: PSockbuf_IO; layer: cint; arg: Pointer): cint; cdecl; external;
- function ber_sockbuf_remove_io(sb: PSockbuf; sbio: PSockbuf_IO; layer: cint): cint; cdecl; external;
- function ber_sockbuf_ctrl(sb: PSockbuf; opt: cint; arg: Pointer): cint; cdecl; external;
- var
- ber_sockbuf_io_tcp : Sockbuf_IO; cvar; external;
- ber_sockbuf_io_readahead : Sockbuf_IO; cvar; external;
- ber_sockbuf_io_fd : Sockbuf_IO; cvar; external;
- ber_sockbuf_io_debug : Sockbuf_IO; cvar; external;
- {$IFDEF LDAP_CONNECTIONLESS}
- ber_sockbuf_io_udp : Sockbuf_IO; cvar; external;
- {$ENDIF}
- (*
- * LBER memory.c
- *)
- function ber_memalloc(s: ber_len_t): Pointer; cdecl; external;
- function ber_memrealloc(p: Pointer; s: ber_len_t): Pointer; cdecl; external;
- function ber_memcalloc(n: ber_len_t; s: ber_len_t): Pointer; cdecl; external;
- procedure ber_memfree(p: Pointer); cdecl; external;
- procedure ber_memvfree(vector: PPointer); cdecl; external;
- procedure ber_bvfree(bv: PBerval); cdecl; external;
- procedure ber_bvecfree(bv: PPBerval); cdecl; external;
- function ber_bvecadd(var bvec: PPBerval; bv: PBerval): cint; cdecl; external;
- function ber_dupbv(dst: PBerval; src: PBerval): PBerval; cdecl; external;
- function ber_bvdup(src: PBerval): PBerval; cdecl; external;
- function ber_str2bv(const str: pcchar; len: ber_len_t; duplicate: cbool; bv: PBerval): PBerval; cdecl; external;
- function ber_mem2bv(const str: pcchar; len: ber_len_t; duplicate: cbool; bv: PBerval): PBerval; cdecl; external;
- function ber_bvstr(const str: pcchar): PBerval;
- function ber_bvstrdup(const str: pcchar): PBerval;
- function ber_strdup(const str: pcchar): pcchar; cdecl; external;
- procedure ber_bvarray_free(p: BerVarray); cdecl; external;
- function ber_bvarray_add(p: PBerVarray; bv: PBerval): cint; cdecl; external;
- function ber_bvcmp(v1, v2: PBerval): cint;
- (*
- * error.c
- *)
- function ber_errno_addr: pcint; cdecl; external;
- function ber_errno: cint;
- const
- LBER_ERROR_NONE = $0;
- LBER_ERROR_PARAM = $1;
- LBER_ERROR_MEMORY = $2;
|