X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblber%2Flber-int.h;h=16cabd995cbb0d8893e07abf50105eacdb63d510;hb=d34fffcaf9edc00262209fbe6e04bb15805dbd37;hp=c9b9b29d532c315f81009e3057e1e0a15bcb67c8;hpb=553b601161bc4aeccbac5a931a795531e3e6e9a3;p=openldap diff --git a/libraries/liblber/lber-int.h b/libraries/liblber/lber-int.h index c9b9b29d53..16cabd995c 100644 --- a/libraries/liblber/lber-int.h +++ b/libraries/liblber/lber-int.h @@ -1,9 +1,18 @@ -/* - * Copyright 1998 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software . + * + * 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 the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ -/* Portions - * Copyright (c) 1990 Regents of the University of Michigan. +/* Portions Copyright (c) 1990 Regents of the University of Michigan. * All rights reserved. * * Redistribution and use in source and binary forms are permitted @@ -20,30 +29,54 @@ #include "lber.h" #include "ldap_log.h" #include "lber_pvt.h" +#include "ldap_queue.h" LDAP_BEGIN_DECL -extern int lber_int_debug; -#define lber_log_printf lber_pvt_log_printf +typedef void (*BER_LOG_FN)(FILE *file, + const char *subsys, int level, const char *fmt, ... ); + +LBER_V (BER_ERRNO_FN) ber_int_errno_fn; + +#ifdef LDAP_MEMORY_TRACE +# ifndef LDAP_MEMORY_DEBUG +# define LDAP_MEMORY_DEBUG 1 +# endif +#endif + +#ifdef LDAP_MEMORY_DEBUG +LBER_V (long) ber_int_meminuse; +#endif struct lber_options { - short lbo_item_type; -#define LBER_ITEM_BERELEMENT 1 -#define LBER_ITEM_SOCKBUF 2 - short lbo_options; + short lbo_valid; + unsigned short lbo_options; int lbo_debug; }; +LBER_F( int ) ber_pvt_log_output( + const char *subsystem, + int level, + const char *fmt, ... ); + +#define LBER_UNINITIALIZED 0x0 +#define LBER_INITIALIZED 0x1 +#define LBER_VALID_BERELEMENT 0x2 +#define LBER_VALID_SOCKBUF 0x3 + +LBER_V (struct lber_options) ber_int_options; +#define ber_int_debug ber_int_options.lbo_debug + struct berelement { struct lber_options ber_opts; -#define ber_item_type ber_opts.lbo_item_type +#define ber_valid ber_opts.lbo_valid #define ber_options ber_opts.lbo_options #define ber_debug ber_opts.lbo_debug - int ber_usertag; - - unsigned long ber_tag; - unsigned long ber_len; + /* Do not change the order of these 3 fields! see ber_get_next */ + ber_tag_t ber_tag; + ber_len_t ber_len; + ber_tag_t ber_usertag; char *ber_buf; char *ber_ptr; @@ -51,153 +84,110 @@ struct berelement { struct seqorset *ber_sos; char *ber_rwptr; - BERTranslateProc ber_encode_translate_proc; - BERTranslateProc ber_decode_translate_proc; -}; -#define NULLBER ((BerElement *) 0) - -struct sockbuf; - -struct sockbuf_io { - int (*sbi_setup)( struct sockbuf * sb, void *arg ); - int (*sbi_remove)( struct sockbuf *sb ); - - long (*sbi_read)( struct sockbuf *sb, void *buf, long len ); - long (*sbi_write)( struct sockbuf *sb, void *buf, long len ); - int (*sbi_close)( struct sockbuf *sb ); -}; - -struct sockbuf_sec { - int (*sbs_setup)( struct sockbuf * sb, void *arg ); - int (*sbs_remove)( struct sockbuf *sb ); - - long (*sbs_protect)( struct sockbuf *sb, char *in, long *ilen, - char *out, long olen ); - long (*sbs_release)( struct sockbuf *sb, char *in, long ilen, - char *out0, long olen0, char *out1, long olen1 ); -}; - -struct sockbuf_buf { - long buf_size; - long buf_ptr; - long buf_end; - char *buf_base; + void *ber_memctx; }; +#define LBER_VALID(ber) ((ber)->ber_valid==LBER_VALID_BERELEMENT) -typedef struct sockbuf_io Sockbuf_IO; -typedef struct sockbuf_sec Sockbuf_Sec; -typedef struct sockbuf_buf Sockbuf_Buf; - -#define lber_pvt_sb_get_desc( sb ) ((sb)->sb_sd) -#define lber_pvt_sb_set_desc( sb, val ) ((sb)->sb_sd =(val)) -#define lber_pvt_sb_in_use( sb ) ((sb)->sb_sd!=-1) - -#ifdef USE_SASL -#define lber_pvt_sb_data_ready( sb ) \ -(((sb)->sb_buf_ready) || ((sb)->sb_trans_ready) || ((sb)->sb_sec_ready)) -#else -#define lber_pvt_sb_data_ready( sb ) \ -(((sb)->sb_buf_ready) || ((sb)->sb_trans_ready)) -#endif +#define ber_pvt_ber_remaining(ber) ((ber)->ber_end - (ber)->ber_ptr) +#define ber_pvt_ber_total(ber) ((ber)->ber_end - (ber)->ber_buf) +#define ber_pvt_ber_write(ber) ((ber)->ber_ptr - (ber)->ber_buf) struct sockbuf { struct lber_options sb_opts; -#define sb_item_type sb_opts.lbo_item_type + Sockbuf_IO_Desc *sb_iod; /* I/O functions */ +#define sb_valid sb_opts.lbo_valid #define sb_options sb_opts.lbo_options #define sb_debug sb_opts.lbo_debug - - int sb_non_block:1; - int sb_read_ahead:1; - - int sb_buf_ready:1; - int sb_trans_ready:1; - int sb_sec_ready:1; - - int sb_fd; - - void *sb_iodata; /* transport-layer data pointer */ - Sockbuf_IO *sb_io; /* I/O functions */ - -#ifdef LDAP_SASL - void *sb_sdata; /* security-layer data pointer */ - Sockbuf_Sec *sb_sec; -#endif - -#ifndef MACOS - int sb_sd; -#else /* MACOS */ - void *sb_sd; -#endif /* MACOS */ -#ifdef DEADWOOD - long sb_max_incoming; -#endif - Sockbuf_Buf sb_buf; -#ifdef LDAP_SASL - Sockbuf_Buf sb_sec_buf_in; - Sockbuf_Buf sb_sec_buf_out; - long sb_sec_prev_len; -#endif + ber_socket_t sb_fd; + unsigned int sb_trans_needs_read:1; + unsigned int sb_trans_needs_write:1; + ber_len_t sb_max_incoming; }; -#define READBUFSIZ 8192 +#define SOCKBUF_VALID( sb ) ( (sb)->sb_valid == LBER_VALID_SOCKBUF ) struct seqorset { BerElement *sos_ber; - unsigned long sos_clen; - unsigned long sos_tag; + ber_len_t sos_clen; + ber_tag_t sos_tag; char *sos_first; char *sos_ptr; struct seqorset *sos_next; }; -#define NULLSEQORSET ((Seqorset *) 0) + + +/* + * io.c + */ +LBER_F( int ) +ber_realloc LDAP_P(( + BerElement *ber, + ber_len_t len )); + +LBER_F (char *) ber_start LDAP_P(( BerElement * )); +LBER_F (int) ber_len LDAP_P(( BerElement * )); +LBER_F (int) ber_ptrlen LDAP_P(( BerElement * )); +LBER_F (void) ber_rewind LDAP_P(( BerElement * )); /* * bprint.c */ -LDAP_F int lber_log_bprint LDAP_P(( +#define ber_log_printf ber_pvt_log_printf + +LBER_F( int ) +ber_log_bprint LDAP_P(( int errlvl, int loglvl, - char *data, - int len )); + const char *data, + ber_len_t len )); -LDAP_F int lber_log_dump LDAP_P(( +LBER_F( int ) +ber_log_dump LDAP_P(( int errlvl, int loglvl, BerElement *ber, int inout )); -LDAP_F int lber_log_sos_dump LDAP_P(( +LBER_F( int ) +ber_log_sos_dump LDAP_P(( int errlvl, int loglvl, Seqorset *sos )); -/* io.c */ -LDAP_F Sockbuf *lber_pvt_sb_alloc LDAP_P(( void )); -LDAP_F Sockbuf *lber_pvt_sb_alloc_fd LDAP_P(( int )); -LDAP_F Sockbuf *lber_pvt_sb_alloc_fd LDAP_P(( int )); -LDAP_F void lber_pvt_sb_free LDAP_P(( Sockbuf * )); -LDAP_F int lber_pvt_sb_get_option LDAP_P(( Sockbuf *, int, void * )); -LDAP_F int lber_pvt_sb_set_option LDAP_P(( Sockbuf *, int, void * )); +LBER_V (BER_LOG_FN) ber_int_log_proc; +LBER_V (FILE *) ber_pvt_err_file; + +/* memory.c */ + /* simple macros to realloc for now */ +LBER_V (BerMemoryFunctions *) ber_int_memory_fns; +LBER_F (char *) ber_strndup( LDAP_CONST char *, ber_len_t ); +LBER_F (char *) ber_strndup_x( LDAP_CONST char *, ber_len_t, void *ctx ); + +#define LBER_MALLOC(s) ber_memalloc((s)) +#define LBER_CALLOC(n,s) ber_memcalloc((n),(s)) +#define LBER_REALLOC(p,s) ber_memrealloc((p),(s)) +#define LBER_FREE(p) ber_memfree((p)) +#define LBER_VFREE(v) ber_memvfree((void**)(v)) +#define LBER_STRDUP(s) ber_strdup((s)) +#define LBER_STRNDUP(s,l) ber_strndup((s),(l)) /* sockbuf.c */ -LDAP_F int lber_pvt_sb_init LDAP_P(( Sockbuf *sb )); -LDAP_F int lber_pvt_sb_destroy LDAP_P(( Sockbuf *sb )); -#ifdef USE_SASL -LDAP_F int lber_pvt_sb_set_sec LDAP_P(( Sockbuf *sb, Sockbuf_Sec *sec, void *arg )); -LDAP_F int lber_pvt_sb_clear_sec LDAP_P(( Sockbuf *sb )); -#endif -LDAP_F int lber_pvt_sb_set_io LDAP_P(( Sockbuf *sb, Sockbuf_IO *layer, void *arg )); -LDAP_F int lber_pvt_sb_clear_io LDAP_P(( Sockbuf *sb )); -LDAP_F int lber_pvt_sb_close LDAP_P((Sockbuf *sb )); -LDAP_F int lber_pvt_sb_set_nonblock LDAP_P(( Sockbuf *sb, int nb )); -LDAP_F int lber_pvt_sb_set_readahead LDAP_P(( Sockbuf *sb, int rh )); -LDAP_F long lber_pvt_sb_read LDAP_P(( Sockbuf *sb, void *buf, long len )); -LDAP_F long lber_pvt_sb_write LDAP_P(( Sockbuf *sb, void *buf, long len )); -LDAP_F int lber_pvt_sb_udp_set_dst LDAP_P((Sockbuf *sb, void *addr )); -LDAP_F void *lber_pvt_sb_udp_get_src LDAP_P((Sockbuf *sb )); - -extern Sockbuf_IO lber_pvt_sb_io_tcp; -extern Sockbuf_IO lber_pvt_sb_io_udp; +LBER_F( int ) +ber_int_sb_init LDAP_P(( Sockbuf *sb )); + +LBER_F( int ) +ber_int_sb_close LDAP_P(( Sockbuf *sb )); + +LBER_F( int ) +ber_int_sb_destroy LDAP_P(( Sockbuf *sb )); + +LBER_F( ber_slen_t ) +ber_int_sb_read LDAP_P(( Sockbuf *sb, void *buf, ber_len_t len )); + +LBER_F( ber_slen_t ) +ber_int_sb_write LDAP_P(( Sockbuf *sb, void *buf, ber_len_t len )); + +LDAP_END_DECL #endif /* _LBER_INT_H */