X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblber%2Flber-int.h;h=7686cd57d90344b056aedda0547823f04e30c8e5;hb=62da0b6738e9329e2715699b7ac9556575ba83f1;hp=eef5e18b393cbdbb4694cdf1f378039c91121e15;hpb=702109706b76fea49bde29d6351b2aaa4ee0e7fa;p=openldap diff --git a/libraries/liblber/lber-int.h b/libraries/liblber/lber-int.h index eef5e18b39..7686cd57d9 100644 --- a/libraries/liblber/lber-int.h +++ b/libraries/liblber/lber-int.h @@ -1,5 +1,18 @@ -/* - * Copyright (c) 1990 Regents of the University of Michigan. +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2004 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. * All rights reserved. * * Redistribution and use in source and binary forms are permitted @@ -14,59 +27,184 @@ #define _LBER_INT_H #include "lber.h" +#include "ldap_log.h" +#include "lber_pvt.h" +#include "ldap_queue.h" LDAP_BEGIN_DECL -typedef struct berelement { +typedef void (*BER_LOG_FN)(FILE *file, + const char *subsys, int level, const char *fmt, ... ); + +LBER_V (BER_ERRNO_FN) ber_int_errno_fn; + +struct lber_options { + short lbo_valid; + unsigned short lbo_options; + int lbo_debug; + long lbo_meminuse; +}; + +#ifdef NEW_LOGGING +/* +# ifdef LDAP_DEBUG +# ifdef LDAP_LOG +# undef LDAP_LOG +# endif +# define LDAP_LOG(a) ber_pvt_log_output a + */ +# define BER_DUMP(a) ber_output_dump a +/* +# else +# define LDAP_LOG(a) +# define BER_DUMP(a) +# endif + */ +#endif + +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_valid ber_opts.lbo_valid +#define ber_options ber_opts.lbo_options +#define ber_debug ber_opts.lbo_debug + + /* 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; char *ber_end; + struct seqorset *ber_sos; - unsigned long ber_tag; - unsigned long ber_len; - int ber_usertag; - char ber_options; -#define LBER_USE_DER 0x01 -#define LBER_USE_INDEFINITE_LEN 0x02 -#define LBER_TRANSLATE_STRINGS 0x04 char *ber_rwptr; - BERTranslateProc ber_encode_translate_proc; - BERTranslateProc ber_decode_translate_proc; -} BerElement; -#define NULLBER ((BerElement *) 0) - -typedef struct sockbuf { -#ifndef MACOS - int sb_sd; -#else /* MACOS */ - void *sb_sd; -#endif /* MACOS */ - BerElement sb_ber; - - int sb_naddr; /* > 0 implies using CLDAP (UDP) */ - void *sb_useaddr; /* pointer to sockaddr to use next */ - void *sb_fromaddr; /* pointer to message source sockaddr */ - void **sb_addrs; /* actually an array of pointers to - sockaddrs */ - - int sb_options; /* to support copying ber elements */ -#define LBER_TO_FILE 0x01 /* to a file referenced by sb_fd */ -#define LBER_TO_FILE_ONLY 0x02 /* only write to file, not network */ -#define LBER_MAX_INCOMING_SIZE 0x04 /* impose limit on incoming stuff */ -#define LBER_NO_READ_AHEAD 0x08 /* read only as much as requested */ - int sb_fd; - long sb_max_incoming; -} Sockbuf; -#define READBUFSIZ 8192 - -typedef struct seqorset { + void *ber_memctx; +}; +#define LBER_VALID(ber) ((ber)->ber_valid==LBER_VALID_BERELEMENT) + +#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; + 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 + 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 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; -} Seqorset; -#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 + */ +#define ber_log_printf ber_pvt_log_printf + +#ifdef NEW_LOGGING +LBER_F( int ) +ber_output_dump LDAP_P(( + const char *subsys, + int level, + BerElement *ber, + int inout )); +#endif + +LBER_F( int ) +ber_log_bprint LDAP_P(( + int errlvl, + int loglvl, + const char *data, + ber_len_t len )); + +LBER_F( int ) +ber_log_dump LDAP_P(( + int errlvl, + int loglvl, + BerElement *ber, + int inout )); + +LBER_F( int ) +ber_log_sos_dump LDAP_P(( + int errlvl, + int loglvl, + Seqorset *sos )); + +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 */ + +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 */