📄 lber.h
字号:
/* * 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. */#ifndef _LBER_H#define _LBER_H#ifdef __cplusplusextern "C" {#endif#if !defined( NEEDPROTOS ) && defined(__STDC__)#define NEEDPROTOS 1#endif/* BER classes and mask */#define LBER_CLASS_UNIVERSAL 0x00#define LBER_CLASS_APPLICATION 0x40#define LBER_CLASS_CONTEXT 0x80#define LBER_CLASS_PRIVATE 0xc0#define LBER_CLASS_MASK 0xc0/* BER encoding type and mask */#define LBER_PRIMITIVE 0x00#define LBER_CONSTRUCTED 0x20#define LBER_ENCODING_MASK 0x20#define LBER_BIG_TAG_MASK 0x1f#define LBER_MORE_TAG_MASK 0x80/* * 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: * (( tag & 0x00000080 ) != 0 ) && (( tag & 0xFFFFFF00 ) != 0 ) */#define LBER_ERROR 0xffffffffL#define LBER_DEFAULT 0xffffffffL/* general BER types we know about */#define LBER_BOOLEAN 0x01L#define LBER_INTEGER 0x02L#define LBER_BITSTRING 0x03L#define LBER_OCTETSTRING 0x04L#define LBER_NULL 0x05L#define LBER_ENUMERATED 0x0aL#define LBER_SEQUENCE 0x30L /* constructed */#define LBER_SET 0x31L /* constructed */#define OLD_LBER_SEQUENCE 0x10L /* w/o constructed bit - broken */#define OLD_LBER_SET 0x11L /* w/o constructed bit - broken */#ifdef NEEDPROTOStypedef int (*BERTranslateProc)( char **bufp, unsigned long *buflenp, int free_input );#else /* NEEDPROTOS */typedef int (*BERTranslateProc)();#endif /* NEEDPROTOS */typedef struct berelement { 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 8192typedef struct seqorset { BerElement *sos_ber; unsigned long sos_clen; unsigned long sos_tag; char *sos_first; char *sos_ptr; struct seqorset *sos_next;} Seqorset;#define NULLSEQORSET ((Seqorset *) 0)/* structure for returning a sequence of octet strings + length */struct berval { unsigned long bv_len; char *bv_val;};#ifndef NEEDPROTOSextern BerElement *ber_alloc();extern BerElement *der_alloc();extern BerElement *ber_alloc_t();extern BerElement *ber_dup();extern int lber_debug;extern void ber_bvfree();extern void ber_bvecfree();extern struct berval *ber_bvdup();extern void ber_dump();extern void ber_sos_dump();extern void lber_bprint();extern void ber_reset();extern void ber_init();#else /* NEEDPROTOS */#if defined(WINSOCK)#include "proto-lb.h"#else#include "proto-lber.h"#endif#endif /* NEEDPROTOS */#if !defined(__alpha) || defined(VMS)#define LBER_HTONL( l ) htonl( l )#define LBER_NTOHL( l ) ntohl( l )#else /* __alpha *//* * htonl and ntohl on the DEC Alpha under OSF 1 seem to only swap the * lower-order 32-bits of a (64-bit) long, so we define correct versions * here. */#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 /* __alpha *//* * SAFEMEMCPY is an overlap-safe copy from s to d of n bytes */#ifdef MACOS#define SAFEMEMCPY( d, s, n ) BlockMoveData( (Ptr)s, (Ptr)d, n )#else /* MACOS */#ifdef sunos4#define SAFEMEMCPY( d, s, n ) bcopy( s, d, n )#else /* sunos4 */#define SAFEMEMCPY( d, s, n ) memmove( d, s, n )#endif /* sunos4 */#endif /* MACOS */#ifdef __cplusplus}#endif#endif /* _LBER_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -