]> git.sur5r.net Git - openldap/blob - libraries/liblber/lber-int.h
cb68944ede89e8283ea2ef2031cf5f8286137952
[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 /* these have to match lber types settings */
27 #define LBER_INT_HTON(i)        AC_HTONL(i)
28 #define LBER_INT_NTOH(i)        AC_NTOHL(i)
29 #define LBER_LEN_HTON(l)        AC_HTONL(l)
30 #define LBER_LEN_NTOH(l)        AC_NTOHL(l)
31 #define LBER_TAG_HTON(t)        AC_HTONL(t)
32 #define LBER_TAG_NTOH(t)        AC_NTOHL(t)
33
34
35 struct lber_options {
36         short lbo_valid;
37 #define LBER_UNINITIALIZED              0x0
38 #define LBER_INITIALIZED                0x1
39 #define LBER_VALID_BERELEMENT   0x2
40 #define LBER_VALID_SOCKBUF              0x3
41
42         unsigned short lbo_options;
43         int lbo_debug;
44 };
45
46 extern struct lber_options ber_int_options;
47 #define ber_int_debug ber_int_options.lbo_debug
48
49 struct berelement {
50         struct          lber_options ber_opts;
51 #define ber_valid               ber_opts.lbo_valid
52 #define ber_options             ber_opts.lbo_options
53 #define ber_debug               ber_opts.lbo_debug
54
55         ber_tag_t       ber_usertag;
56
57         ber_tag_t       ber_tag;
58         ber_len_t       ber_len;
59
60         char            *ber_buf;
61         char            *ber_ptr;
62         char            *ber_end;
63
64         struct seqorset *ber_sos;
65         char            *ber_rwptr;
66         BERTranslateProc ber_encode_translate_proc;
67         BERTranslateProc ber_decode_translate_proc;
68 };
69 #define BER_VALID(ber)  ((ber)->ber_valid==LBER_VALID_BERELEMENT)
70
71
72 #define ber_pvt_ber_bytes(ber)          ((ber)->ber_ptr - (ber)->ber_buf)
73 #define ber_pvt_ber_remaining(ber)      ((ber)->ber_end - (ber)->ber_ptr)
74
75 struct sockbuf;
76
77 struct sockbuf_io {
78         int     (*sbi_setup)( struct sockbuf * sb, void *arg );
79         int     (*sbi_remove)( struct sockbuf *sb );
80         
81         ber_slen_t      (*sbi_read)( struct sockbuf *sb, void *buf, ber_len_t len );
82         ber_slen_t      (*sbi_write)( struct sockbuf *sb, void *buf, ber_len_t len );
83         int     (*sbi_close)( struct sockbuf *sb );
84 };
85
86 struct sockbuf_sec {
87         int     (*sbs_setup)( struct sockbuf * sb, void *arg );
88         int     (*sbs_remove)( struct sockbuf *sb );
89    
90         long    (*sbs_protect)( struct sockbuf *sb, char *in, long *ilen,
91                                 char *out, long olen );
92         long    (*sbs_release)( struct sockbuf *sb, char *in, long ilen,
93                                char *out0, long olen0, char *out1, long olen1 );
94 };
95
96 struct sockbuf_buf {
97         ber_len_t       buf_size;
98         ber_len_t       buf_ptr;
99         ber_len_t       buf_end;
100         char    *buf_base;
101 };
102
103 typedef struct sockbuf_io Sockbuf_IO;
104 typedef struct sockbuf_sec Sockbuf_Sec;
105 typedef struct sockbuf_buf Sockbuf_Buf;
106
107 extern Sockbuf_IO ber_pvt_sb_io_tcp;
108 extern Sockbuf_IO ber_pvt_sb_io_udp;
109
110
111 struct sockbuf {
112         struct lber_options sb_opts;
113 #define sb_valid                sb_opts.lbo_valid
114 #define sb_options              sb_opts.lbo_options
115 #define sb_debug                sb_opts.lbo_debug
116
117         int             sb_non_block:1; 
118         int             sb_read_ahead:1;
119    
120         int             sb_buf_ready:1;
121         int             sb_trans_ready:1;
122         int             sb_sec_ready:1;
123       
124         int             sb_fd;
125    
126         void            *sb_iodata;     /* transport-layer data pointer */
127         Sockbuf_IO      *sb_io;         /* I/O functions */
128    
129 #ifdef LDAP_SASL
130         void            *sb_sdata;      /* security-layer data pointer */
131         Sockbuf_Sec     *sb_sec;
132 #endif  
133
134         ber_socket_t    sb_sd;
135
136 #ifdef DEADWOOD
137         long            sb_max_incoming;
138 #endif
139         Sockbuf_Buf     sb_buf;
140 #ifdef LDAP_SASL   
141         Sockbuf_Buf     sb_sec_buf_in;
142         Sockbuf_Buf     sb_sec_buf_out;
143         ber_len_t       sb_sec_prev_len;
144 #endif   
145 };
146 #define SOCKBUF_VALID(ber)      ((sb)->sb_valid==LBER_VALID_SOCKBUF)
147
148 /* these should be internal ie: ber_int_* */
149 #define ber_pvt_sb_get_desc( sb ) ((sb)->sb_sd)
150 #define ber_pvt_sb_set_desc( sb, val ) ((sb)->sb_sd =(val))
151
152 #define ber_pvt_sb_in_use( sb ) ((sb)->sb_sd != AC_SOCKET_INVALID)
153
154 #ifdef USE_SASL
155 #define ber_pvt_sb_data_ready( sb ) \
156 (((sb)->sb_buf_ready) || ((sb)->sb_trans_ready) || ((sb)->sb_sec_ready))
157 #else
158 #define ber_pvt_sb_data_ready( sb ) \
159 (((sb)->sb_buf_ready) || ((sb)->sb_trans_ready))
160 #endif
161
162 #define READBUFSIZ      8192
163
164 struct seqorset {
165         BerElement      *sos_ber;
166         ber_len_t       sos_clen;
167         ber_tag_t       sos_tag;
168         char            *sos_first;
169         char            *sos_ptr;
170         struct seqorset *sos_next;
171 };
172
173
174 /*
175  * bprint.c
176  */
177 #define ber_log_printf ber_pvt_log_printf
178
179 LDAP_F( int )
180 ber_log_bprint LDAP_P((
181         int errlvl,
182         int loglvl,
183         const char *data,
184         ber_len_t len ));
185
186 LDAP_F( int )
187 ber_log_dump LDAP_P((
188         int errlvl,
189         int loglvl,
190         const BerElement *ber,
191         int inout ));
192
193 LDAP_F( int )
194 ber_log_sos_dump LDAP_P((
195         int errlvl,
196         int loglvl,
197         const Seqorset *sos ));
198
199
200 /* memory.c */
201         /* simple macros to realloc for now */
202 extern BerMemoryFunctions*              ber_int_memory_fns;
203
204 #define LBER_INT_MALLOC(s)              ber_memalloc((s))
205 #define LBER_INT_CALLOC(n,s)    ber_memcalloc((n),(s))
206 #define LBER_INT_REALLOC(p,s)   ber_memrealloc((p),(s))
207 #define LBER_INT_FREE(p)                ber_memfree((p))
208 #define LBER_INT_VFREE(v)               ber_memvfree((void**)(v))
209 #define LBER_INT_STRDUP(s)              ber_strdup((s))
210
211 #define LBER_MALLOC(s)          ber_memalloc((s))
212 #define LBER_CALLOC(n,s)        ber_memcalloc((n),(s))
213 #define LBER_REALLOC(p,s)       ber_memrealloc((p),(s))
214 #define LBER_FREE(p)            ber_memfree((p))        
215 #define LBER_VFREE(v)           ber_memvfree((void**)(v))
216 #define LBER_STRDUP(s)          ber_strdup((s))
217
218 /* sockbuf.c */
219
220 /* these should be ber_int*() functions */
221
222 LDAP_F( int )
223 ber_pvt_sb_init LDAP_P(( Sockbuf *sb ));
224
225 LDAP_F( int )
226 ber_pvt_sb_destroy LDAP_P(( Sockbuf *sb ));
227
228 #ifdef USE_SASL
229 LDAP_F( int )
230 ber_pvt_sb_set_sec LDAP_P(( Sockbuf *sb, Sockbuf_Sec *sec, void *arg ));
231
232 LDAP_F( int )
233 ber_pvt_sb_clear_sec LDAP_P(( Sockbuf *sb ));
234 #endif
235
236 LDAP_F( int )
237 ber_pvt_sb_set_io LDAP_P(( Sockbuf *sb, Sockbuf_IO *layer, void *arg ));
238
239 LDAP_F( int )
240 ber_pvt_sb_clear_io LDAP_P(( Sockbuf *sb ));
241
242 LDAP_F( int )
243 ber_pvt_sb_close LDAP_P((Sockbuf *sb ));
244
245 LDAP_F( int )
246 ber_pvt_sb_set_nonblock LDAP_P(( Sockbuf *sb, int nb ));
247
248 LDAP_F( int )
249 ber_pvt_sb_set_readahead LDAP_P(( Sockbuf *sb, int rh ));
250
251 LDAP_F( ber_slen_t )
252 ber_pvt_sb_read LDAP_P(( Sockbuf *sb, void *buf, ber_len_t len ));
253
254 LDAP_F( ber_slen_t )
255 ber_pvt_sb_write LDAP_P(( Sockbuf *sb, void *buf, ber_len_t len ));
256
257 LDAP_F( int )
258 ber_pvt_sb_udp_set_dst LDAP_P((Sockbuf *sb, void *addr ));
259
260 LDAP_F( void * )
261 ber_pvt_sb_udp_get_src LDAP_P((Sockbuf *sb ));
262
263
264 #endif /* _LBER_INT_H */