#ifndef _LBERINT_H
#define _LBERINT_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <ctype.h>
#include <stdarg.h>
#include <stdlib.h>
#ifdef LDAP_SASLIO_HOOKS
#include <sasl/sasl.h>
#endif
#ifdef macintosh
# include "ldap-macos.h"
#else
#if !defined(BSDI)
# include <malloc.h>
#endif
# include <errno.h>
# include <sys/types.h>
#if defined(SUNOS4) || defined(SCOOS)
# include <sys/time.h>
#endif
#if defined( _WINDOWS )
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# include <time.h>
# if defined(_WINDLL) && !defined(_WIN32)
# define USE_DBG_WIN
# endif
# else
#if !defined(XP_OS2)
# include <sys/socket.h>
# include <netinet/in.h>
# include <unistd.h>
#endif
# endif
#endif
#include <memory.h>
#include <string.h>
#include "portable.h"
#ifdef _WINDOWS
#include <winsock.h>
#include <io.h>
#endif
#ifdef XP_OS2
#include <os2sock.h>
#include <io.h>
#endif
#if defined(_WINDLL) && !defined(_WIN32)
#define stderr NULL
#endif
#include "lber.h"
#ifdef _SOLARIS_SDK
#include <libintl.h>
#include "solaris-int.h"
#endif
#ifdef macintosh
#define NSLDAPI_LBER_SOCKET_IS_PTR
#endif
#define OLD_LBER_SEQUENCE 0x10
#define OLD_LBER_SET 0x11
#ifndef _IFP
#define _IFP
typedef int (LDAP_C LDAP_CALLBACK *IFP)();
#endif
typedef struct seqorset {
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)
#define SOS_STACK_SIZE 8
struct berelement {
char *ber_buf;
char *ber_ptr;
char *ber_end;
struct seqorset *ber_sos;
ber_tag_t ber_tag;
ber_len_t ber_len;
int ber_usertag;
char ber_options;
char *ber_rwptr;
BERTranslateProc ber_encode_translate_proc;
BERTranslateProc ber_decode_translate_proc;
int ber_flags;
#define LBER_FLAG_NO_FREE_BUFFER 1
int ber_sos_stack_posn;
Seqorset ber_sos_stack[SOS_STACK_SIZE];
};
#ifndef _SOLARIS_SDK
#define NULLBER ((BerElement *)NULL)
#endif
#ifdef LDAP_DEBUG
void ber_dump( BerElement *ber, int inout );
#endif
struct nslberi_io_fns {
LDAP_IOF_READ_CALLBACK *lbiof_read;
LDAP_IOF_WRITE_CALLBACK *lbiof_write;
};
struct sockbuf {
LBER_SOCKET sb_sd;
BerElement sb_ber;
int sb_naddr;
void *sb_useaddr;
void *sb_fromaddr;
void **sb_addrs;
int sb_options;
LBER_SOCKET sb_copyfd;
ber_uint_t sb_max_incoming;
struct nslberi_io_fns
sb_io_fns;
struct lber_x_ext_io_fns
sb_ext_io_fns;
#ifdef LDAP_SASLIO_HOOKS
sasl_conn_t *sb_sasl_ctx;
char *sb_sasl_ibuf;
char *sb_sasl_iptr;
int sb_sasl_bfsz;
int sb_sasl_ilen;
struct lber_x_ext_io_fns
sb_sasl_fns;
void *sb_sasl_prld;
#endif
};
#define NULLSOCKBUF ((Sockbuf *)NULL)
#ifndef NSLBERI_LBER_INT_FRIEND
#define READBUFSIZ 8192
#define NSLBERI_VALID_BERELEMENT_POINTER( ber ) \
( (ber) != NULLBER )
#define NSLBERI_VALID_SOCKBUF_POINTER( sb ) \
( (sb) != NULLSOCKBUF )
#if defined(_WIN32) && defined(_ALPHA)
#define LBER_HTONL( _l ) \
((((_l)&0xff)<<24) + (((_l)&0xff00)<<8) + \
(((_l)&0xff0000)>>8) + (((_l)&0xff000000)>>24))
#define LBER_NTOHL(_l) LBER_HTONL(_l)
#elif !defined(__alpha) || defined(VMS)
#define LBER_HTONL( l ) htonl( l )
#define LBER_NTOHL( l ) ntohl( l )
#else
#define LBER_HTONL( l ) (((long)htonl( (l) & 0x00000000FFFFFFFF )) << 32 \
| htonl( ( (l) & 0xFFFFFFFF00000000 ) >> 32 ))
#define LBER_NTOHL( l ) (((long)ntohl( (l) & 0x00000000FFFFFFFF )) << 32 \
| ntohl( ( (l) & 0xFFFFFFFF00000000 ) >> 32 ))
#endif
#ifdef LDAP_DEBUG
void lber_bprint( char *data, int len );
#endif
void ber_err_print( char *data );
void *nslberi_malloc( size_t size );
void *nslberi_calloc( size_t nelem, size_t elsize );
void *nslberi_realloc( void *ptr, size_t size );
void nslberi_free( void *ptr );
int nslberi_ber_realloc( BerElement *ber, ber_len_t len );
#ifdef sunos4
#define THEMEMCPY( d, s, n ) bcopy( s, d, n )
#else
#define THEMEMCPY( d, s, n ) memmove( d, s, n )
#endif
#ifdef SAFEMEMCPY
#undef SAFEMEMCPY
#define SAFEMEMCPY(d,s,n) if (1 == n) *((char*)d) = *((char*)s); else THEMEMCPY(d,s,n);
#endif
#define NSLBERI_MALLOC( size ) nslberi_malloc( size )
#define NSLBERI_CALLOC( nelem, elsize ) nslberi_calloc( nelem, elsize )
#define NSLBERI_REALLOC( ptr, size ) nslberi_realloc( ptr, size )
#define NSLBERI_FREE( ptr ) nslberi_free( ptr )
extern int lber_debug;
#endif
#ifdef __cplusplus
}
#endif
#endif