]> git.sur5r.net Git - openldap/blob - libraries/liblber/lber-int.h
cbe28423eb40f3aaf128683c8c821a35090c75f3
[openldap] / libraries / liblber / lber-int.h
1 /*
2  * Copyright 1998 The OpenLDAP Foundation, All Rights Reserved.
3  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
4  */
5 /* Portions
6  * Copyright (c) 1990 Regents of the University of Michigan.
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms are permitted
10  * provided that this notice is preserved and that due credit is given
11  * to the University of Michigan at Ann Arbor. The name of the University
12  * may not be used to endorse or promote products derived from this
13  * software without specific prior written permission. This software
14  * is provided ``as is'' without express or implied warranty.
15  */
16
17 #ifndef _LBER_INT_H
18 #define _LBER_INT_H
19
20 #include "lber.h"
21 #include "ldap_log.h"
22 #include "lber_pvt.h"
23
24 LDAP_BEGIN_DECL
25
26 struct lber_options {
27         short lbo_valid;
28 #define LBER_UNINITIALIZED              0x0
29 #define LBER_INITIALIZED                0x1
30 #define LBER_VALID_BERELEMENT   0x2
31 #define LBER_VALID_SOCKBUF              0x3
32
33         unsigned short lbo_options;
34         int lbo_debug;
35 };
36
37 extern struct lber_options ber_int_options;
38 #define ber_int_debug ber_int_options.lbo_debug
39
40 struct berelement {
41         struct          lber_options ber_opts;
42 #define ber_valid               ber_opts.lbo_valid
43 #define ber_options             ber_opts.lbo_options
44 #define ber_debug               ber_opts.lbo_debug
45
46         int                     ber_usertag;
47
48         unsigned long   ber_tag;
49         unsigned long   ber_len;
50
51         char            *ber_buf;
52         char            *ber_ptr;
53         char            *ber_end;
54
55         struct seqorset *ber_sos;
56         char            *ber_rwptr;
57         BERTranslateProc ber_encode_translate_proc;
58         BERTranslateProc ber_decode_translate_proc;
59 };
60 #define BER_VALID(ber)  ((ber)->ber_valid==LBER_VALID_BERELEMENT)
61 #define NULLBER ((BerElement *) 0)
62
63 #define ber_pvt_ber_bytes(ber)          ((ber)->ber_ptr - (ber)->ber_buf)
64 #define ber_pvt_ber_remaining(ber)      ((ber)->ber_end - (ber)->ber_ptr)
65
66 struct sockbuf;
67
68 struct sockbuf_io {
69         int     (*sbi_setup)( struct sockbuf * sb, void *arg );
70         int     (*sbi_remove)( struct sockbuf *sb );
71         
72         long    (*sbi_read)( struct sockbuf *sb, void *buf, long len );
73         long    (*sbi_write)( struct sockbuf *sb, void *buf, long len );
74         int     (*sbi_close)( struct sockbuf *sb );
75 };
76
77 struct sockbuf_sec {
78         int     (*sbs_setup)( struct sockbuf * sb, void *arg );
79         int     (*sbs_remove)( struct sockbuf *sb );
80    
81         long    (*sbs_protect)( struct sockbuf *sb, char *in, long *ilen,
82                                 char *out, long olen );
83         long    (*sbs_release)( struct sockbuf *sb, char *in, long ilen,
84                                char *out0, long olen0, char *out1, long olen1 );
85 };
86
87 struct sockbuf_buf {
88         long    buf_size;
89         long    buf_ptr;
90         long    buf_end;
91         char    *buf_base;
92 };
93
94 typedef struct sockbuf_io Sockbuf_IO;
95 typedef struct sockbuf_sec Sockbuf_Sec;
96 typedef struct sockbuf_buf Sockbuf_Buf;
97
98 extern Sockbuf_IO ber_pvt_sb_io_tcp;
99 extern Sockbuf_IO ber_pvt_sb_io_udp;
100
101
102 struct sockbuf {
103         struct lber_options sb_opts;
104 #define sb_valid                sb_opts.lbo_valid
105 #define sb_options              sb_opts.lbo_options
106 #define sb_debug                sb_opts.lbo_debug
107
108         int             sb_non_block:1; 
109         int             sb_read_ahead:1;
110    
111         int             sb_buf_ready:1;
112         int             sb_trans_ready:1;
113         int             sb_sec_ready:1;
114       
115         int             sb_fd;
116    
117         void            *sb_iodata;     /* transport-layer data pointer */
118         Sockbuf_IO      *sb_io;         /* I/O functions */
119    
120 #ifdef LDAP_SASL
121         void            *sb_sdata;      /* security-layer data pointer */
122         Sockbuf_Sec     *sb_sec;
123 #endif  
124         
125 #ifndef MACOS
126         int             sb_sd;
127 #else /* MACOS */
128         void            *sb_sd;
129 #endif /* MACOS */
130 #ifdef DEADWOOD
131         long            sb_max_incoming;
132 #endif
133         Sockbuf_Buf     sb_buf;
134 #ifdef LDAP_SASL   
135         Sockbuf_Buf     sb_sec_buf_in;
136         Sockbuf_Buf     sb_sec_buf_out;
137         long            sb_sec_prev_len;
138 #endif   
139 };
140 #define SOCKBUF_VALID(ber)      ((sb)->sb_valid==LBER_VALID_SOCKBUF)
141
142 /* these should be internal ie: ber_int_* */
143 #define ber_pvt_sb_get_desc( sb ) ((sb)->sb_sd)
144 #define ber_pvt_sb_set_desc( sb, val ) ((sb)->sb_sd =(val))
145
146 #define ber_pvt_sb_in_use( sb ) ((sb)->sb_sd!=-1)
147
148 #ifdef USE_SASL
149 #define ber_pvt_sb_data_ready( sb ) \
150 (((sb)->sb_buf_ready) || ((sb)->sb_trans_ready) || ((sb)->sb_sec_ready))
151 #else
152 #define ber_pvt_sb_data_ready( sb ) \
153 (((sb)->sb_buf_ready) || ((sb)->sb_trans_ready))
154 #endif
155
156 #define READBUFSIZ      8192
157
158 struct seqorset {
159         BerElement      *sos_ber;
160         unsigned long   sos_clen;
161         unsigned long   sos_tag;
162         char            *sos_first;
163         char            *sos_ptr;
164         struct seqorset *sos_next;
165 };
166 #define NULLSEQORSET    ((Seqorset *) 0)
167
168 /*
169  * bprint.c
170  */
171 #define ber_log_printf ber_pvt_log_printf
172
173 LDAP_F( int )
174 ber_log_bprint LDAP_P((
175         int errlvl,
176         int loglvl,
177         const char *data,
178         int len ));
179
180 LDAP_F( int )
181 ber_log_dump LDAP_P((
182         int errlvl,
183         int loglvl,
184         const BerElement *ber,
185         int inout ));
186
187 LDAP_F( int )
188 ber_log_sos_dump LDAP_P((
189         int errlvl,
190         int loglvl,
191         const Seqorset *sos ));
192
193
194 /* memory.c */
195         /* simple macros to realloc for now */
196 extern BerMemoryFunctions*              ber_int_memory_fns;
197
198 #define LBER_INT_MALLOC(s)              ber_memalloc((s))
199 #define LBER_INT_CALLOC(n,s)    ber_memcalloc((n),(s))
200 #define LBER_INT_REALLOC(p,s)   ber_memrealloc((p),(s))
201 #define LBER_INT_FREE(p)                ber_memfree((p))
202 #define LBER_INT_VFREE(v)               ber_memvfree((void**)(v))
203 #define LBER_INT_STRDUP(s)              ber_strdup((s))
204
205 #define LBER_MALLOC(s)          ber_memalloc((s))
206 #define LBER_CALLOC(n,s)        ber_memcalloc((n),(s))
207 #define LBER_REALLOC(p,s)       ber_memrealloc((p),(s))
208 #define LBER_FREE(p)            ber_memfree((p))        
209 #define LBER_VFREE(v)           ber_memvfree((void**)(v))
210 #define LBER_STRDUP(s)          ber_strdup((s))
211
212 /* sockbuf.c */
213
214 /* these should be ber_int*() functions */
215
216 LDAP_F( int )
217 ber_pvt_sb_init LDAP_P(( Sockbuf *sb ));
218
219 LDAP_F( int )
220 ber_pvt_sb_destroy LDAP_P(( Sockbuf *sb ));
221
222 #ifdef USE_SASL
223 LDAP_F( int )
224 ber_pvt_sb_set_sec LDAP_P(( Sockbuf *sb, Sockbuf_Sec *sec, void *arg ));
225
226 LDAP_F( int )
227 ber_pvt_sb_clear_sec LDAP_P(( Sockbuf *sb ));
228 #endif
229
230 LDAP_F( int )
231 ber_pvt_sb_set_io LDAP_P(( Sockbuf *sb, Sockbuf_IO *layer, void *arg ));
232
233 LDAP_F( int )
234 ber_pvt_sb_clear_io LDAP_P(( Sockbuf *sb ));
235
236 LDAP_F( int )
237 ber_pvt_sb_close LDAP_P((Sockbuf *sb ));
238
239 LDAP_F( int )
240 ber_pvt_sb_set_nonblock LDAP_P(( Sockbuf *sb, int nb ));
241
242 LDAP_F( int )
243 ber_pvt_sb_set_readahead LDAP_P(( Sockbuf *sb, int rh ));
244
245 LDAP_F( long )
246 ber_pvt_sb_read LDAP_P(( Sockbuf *sb, void *buf, long len ));
247
248 LDAP_F( long )
249 ber_pvt_sb_write LDAP_P(( Sockbuf *sb, void *buf, long len ));
250
251 LDAP_F( int )
252 ber_pvt_sb_udp_set_dst LDAP_P((Sockbuf *sb, void *addr ));
253
254 LDAP_F( void * )
255 ber_pvt_sb_udp_get_src LDAP_P((Sockbuf *sb ));
256
257
258 #endif /* _LBER_INT_H */