1 /* $OpenLDAP: pkg/ldap/libraries/liblber/lber-int.h,v 1.68.2.3 2008/02/11 23:26:41 kurt Exp $ */ 2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>. 3 * 4 * Copyright 1998-2008 The OpenLDAP Foundation. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted only as authorized by the OpenLDAP 9 * Public License. 10 * 11 * A copy of this license is available in the file LICENSE in the 12 * top-level directory of the distribution or, alternatively, at 13 * <http://www.OpenLDAP.org/license.html>. 14 */ 15 /* Portions Copyright (c) 1990 Regents of the University of Michigan. 16 * All rights reserved. 17 * 18 * Redistribution and use in source and binary forms are permitted 19 * provided that this notice is preserved and that due credit is given 20 * to the University of Michigan at Ann Arbor. The name of the University 21 * may not be used to endorse or promote products derived from this 22 * software without specific prior written permission. This software 23 * is provided ``as is'' without express or implied warranty. 24 */ 25 26 #ifndef _LBER_INT_H 27 #define _LBER_INT_H 28 29 #include "lber.h" 30 #include "ldap_log.h" 31 #include "lber_pvt.h" 32 #include "ldap_queue.h" 33 34 LDAP_BEGIN_DECL 35 36 typedef void (*BER_LOG_FN)(FILE *file, 37 const char *subsys, int level, const char *fmt, ... ); 38 39 LBER_V (BER_ERRNO_FN) ber_int_errno_fn; 40 41 #ifdef LDAP_MEMORY_TRACE 42 # ifndef LDAP_MEMORY_DEBUG 43 # define LDAP_MEMORY_DEBUG 1 44 # endif 45 #endif 46 47 #ifdef LDAP_MEMORY_DEBUG 48 LBER_V (long) ber_int_meminuse; 49 #endif 50 #if defined(LDAP_MEMORY_DEBUG) && ((LDAP_MEMORY_DEBUG +0) & 2) 51 # define LDAP_MEMORY_DEBUG_ASSERT assert 52 #else 53 # define LDAP_MEMORY_DEBUG_ASSERT(expr) ((void) 0) 54 #endif 55 56 struct lber_options { 57 short lbo_valid; 58 unsigned short lbo_options; 59 int lbo_debug; 60 }; 61 62 LBER_F( int ) ber_pvt_log_output( 63 const char *subsystem, 64 int level, 65 const char *fmt, ... ); 66 67 #define LBER_UNINITIALIZED 0x0 68 #define LBER_INITIALIZED 0x1 69 #define LBER_VALID_BERELEMENT 0x2 70 #define LBER_VALID_SOCKBUF 0x3 71 72 LBER_V (struct lber_options) ber_int_options; 73 #define ber_int_debug ber_int_options.lbo_debug 74 75 struct berelement { 76 struct lber_options ber_opts; 77 #define ber_valid ber_opts.lbo_valid 78 #define ber_options ber_opts.lbo_options 79 #define ber_debug ber_opts.lbo_debug 80 81 /* Do not change the order of these 3 fields! see ber_get_next */ 82 ber_tag_t ber_tag; 83 ber_len_t ber_len; 84 ber_tag_t ber_usertag; 85 86 char *ber_buf; 87 char *ber_ptr; 88 char *ber_end; 89 90 struct seqorset *ber_sos; 91 char *ber_rwptr; 92 void *ber_memctx; 93 }; 94 #define LBER_VALID(ber) ((ber)->ber_valid==LBER_VALID_BERELEMENT) 95 96 #define ber_pvt_ber_remaining(ber) ((ber)->ber_end - (ber)->ber_ptr) 97 #define ber_pvt_ber_total(ber) ((ber)->ber_end - (ber)->ber_buf) 98 #define ber_pvt_ber_write(ber) ((ber)->ber_ptr - (ber)->ber_buf) 99 100 struct sockbuf { 101 struct lber_options sb_opts; 102 Sockbuf_IO_Desc *sb_iod; /* I/O functions */ 103 #define sb_valid sb_opts.lbo_valid 104 #define sb_options sb_opts.lbo_options 105 #define sb_debug sb_opts.lbo_debug 106 ber_socket_t sb_fd; 107 ber_len_t sb_max_incoming; 108 unsigned int sb_trans_needs_read:1; 109 unsigned int sb_trans_needs_write:1; 110 #ifdef LDAP_PF_LOCAL_SENDMSG 111 char sb_ungetlen; 112 char sb_ungetbuf[8]; 113 #endif 114 }; 115 116 #define SOCKBUF_VALID( sb ) ( (sb)->sb_valid == LBER_VALID_SOCKBUF ) 117 118 struct seqorset { 119 BerElement *sos_ber; 120 ber_len_t sos_clen; 121 ber_tag_t sos_tag; 122 char *sos_first; 123 char *sos_ptr; 124 struct seqorset *sos_next; 125 }; 126 127 128 /* 129 * decode.c, encode.c 130 */ 131 132 /* Simplest OID max-DER-component to implement in both decode and encode */ 133 #define LBER_OID_COMPONENT_MAX ((unsigned long)-1 - 128) 134 135 136 /* 137 * io.c 138 */ 139 LBER_F( int ) 140 ber_realloc LDAP_P(( 141 BerElement *ber, 142 ber_len_t len )); 143 144 LBER_F (char *) ber_start LDAP_P(( BerElement * )); 145 LBER_F (int) ber_len LDAP_P(( BerElement * )); 146 LBER_F (int) ber_ptrlen LDAP_P(( BerElement * )); 147 LBER_F (void) ber_rewind LDAP_P(( BerElement * )); 148 149 /* 150 * bprint.c 151 */ 152 #define ber_log_printf ber_pvt_log_printf 153 154 LBER_F( int ) 155 ber_log_bprint LDAP_P(( 156 int errlvl, 157 int loglvl, 158 const char *data, 159 ber_len_t len )); 160 161 LBER_F( int ) 162 ber_log_dump LDAP_P(( 163 int errlvl, 164 int loglvl, 165 BerElement *ber, 166 int inout )); 167 168 LBER_F( int ) 169 ber_log_sos_dump LDAP_P(( 170 int errlvl, 171 int loglvl, 172 Seqorset *sos )); 173 174 LBER_V (BER_LOG_FN) ber_int_log_proc; 175 LBER_V (FILE *) ber_pvt_err_file; 176 177 /* memory.c */ 178 /* simple macros to realloc for now */ 179 LBER_V (BerMemoryFunctions *) ber_int_memory_fns; 180 LBER_F (char *) ber_strndup( LDAP_CONST char *, ber_len_t ); 181 LBER_F (char *) ber_strndup_x( LDAP_CONST char *, ber_len_t, void *ctx ); 182 183 #define LBER_MALLOC(s) ber_memalloc((s)) 184 #define LBER_CALLOC(n,s) ber_memcalloc((n),(s)) 185 #define LBER_REALLOC(p,s) ber_memrealloc((p),(s)) 186 #define LBER_FREE(p) ber_memfree((p)) 187 #define LBER_VFREE(v) ber_memvfree((void**)(v)) 188 #define LBER_STRDUP(s) ber_strdup((s)) 189 #define LBER_STRNDUP(s,l) ber_strndup((s),(l)) 190 191 /* sockbuf.c */ 192 193 LBER_F( int ) 194 ber_int_sb_init LDAP_P(( Sockbuf *sb )); 195 196 LBER_F( int ) 197 ber_int_sb_close LDAP_P(( Sockbuf *sb )); 198 199 LBER_F( int ) 200 ber_int_sb_destroy LDAP_P(( Sockbuf *sb )); 201 202 LBER_F( ber_slen_t ) 203 ber_int_sb_read LDAP_P(( Sockbuf *sb, void *buf, ber_len_t len )); 204 205 LBER_F( ber_slen_t ) 206 ber_int_sb_write LDAP_P(( Sockbuf *sb, void *buf, ber_len_t len )); 207 208 LDAP_END_DECL 209 210 #endif /* _LBER_INT_H */ 211