]> git.sur5r.net Git - openldap/blob - libraries/liblber/lber-int.h
Vienna Bulk Commit
[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 extern int ber_int_debug;
27 #define ber_log_printf ber_pvt_log_printf
28
29 struct lber_options {
30         short           lbo_item_type;
31 #define LBER_ITEM_BERELEMENT 1
32 #define LBER_ITEM_SOCKBUF 2
33         short           lbo_options;
34         int                     lbo_debug;
35 };
36
37 struct berelement {
38         struct          lber_options ber_opts;
39 #define ber_item_type   ber_opts.lbo_item_type
40 #define ber_options             ber_opts.lbo_options
41 #define ber_debug               ber_opts.lbo_debug
42
43         int                     ber_usertag;
44
45         unsigned long   ber_tag;
46         unsigned long   ber_len;
47
48         char            *ber_buf;
49         char            *ber_ptr;
50         char            *ber_end;
51
52         struct seqorset *ber_sos;
53         char            *ber_rwptr;
54         BERTranslateProc ber_encode_translate_proc;
55         BERTranslateProc ber_decode_translate_proc;
56 };
57 #define NULLBER ((BerElement *) 0)
58
59 struct sockbuf;
60
61 struct sockbuf_io {
62         int     (*sbi_setup)( struct sockbuf * sb, void *arg );
63         int     (*sbi_remove)( struct sockbuf *sb );
64         
65         long    (*sbi_read)( struct sockbuf *sb, void *buf, long len );
66         long    (*sbi_write)( struct sockbuf *sb, void *buf, long len );
67         int     (*sbi_close)( struct sockbuf *sb );
68 };
69
70 struct sockbuf_sec {
71         int     (*sbs_setup)( struct sockbuf * sb, void *arg );
72         int     (*sbs_remove)( struct sockbuf *sb );
73    
74         long    (*sbs_protect)( struct sockbuf *sb, char *in, long *ilen,
75                                 char *out, long olen );
76         long    (*sbs_release)( struct sockbuf *sb, char *in, long ilen,
77                                char *out0, long olen0, char *out1, long olen1 );
78 };
79
80 struct sockbuf_buf {
81         long    buf_size;
82         long    buf_ptr;
83         long    buf_end;
84         char    *buf_base;
85 };
86
87 typedef struct sockbuf_io Sockbuf_IO;
88 typedef struct sockbuf_sec Sockbuf_Sec;
89 typedef struct sockbuf_buf Sockbuf_Buf;
90
91 #define ber_pvt_sb_get_desc( sb ) ((sb)->sb_sd)
92 #define ber_pvt_sb_set_desc( sb, val ) ((sb)->sb_sd =(val))
93 #define ber_pvt_sb_in_use( sb ) ((sb)->sb_sd!=-1)
94
95 #ifdef USE_SASL
96 #define ber_pvt_sb_data_ready( sb ) \
97 (((sb)->sb_buf_ready) || ((sb)->sb_trans_ready) || ((sb)->sb_sec_ready))
98 #else
99 #define ber_pvt_sb_data_ready( sb ) \
100 (((sb)->sb_buf_ready) || ((sb)->sb_trans_ready))
101 #endif
102
103 struct sockbuf {
104         struct lber_options sb_opts;
105 #define sb_item_type    sb_opts.lbo_item_type
106 #define sb_options              sb_opts.lbo_options
107 #define sb_debug                sb_opts.lbo_debug
108
109         int             sb_non_block:1; 
110         int             sb_read_ahead:1;
111    
112         int             sb_buf_ready:1;
113         int             sb_trans_ready:1;
114         int             sb_sec_ready:1;
115       
116         int             sb_fd;
117    
118         void            *sb_iodata;     /* transport-layer data pointer */
119         Sockbuf_IO      *sb_io;         /* I/O functions */
120    
121 #ifdef LDAP_SASL
122         void            *sb_sdata;      /* security-layer data pointer */
123         Sockbuf_Sec     *sb_sec;
124 #endif  
125         
126 #ifndef MACOS
127         int             sb_sd;
128 #else /* MACOS */
129         void            *sb_sd;
130 #endif /* MACOS */
131 #ifdef DEADWOOD
132         long            sb_max_incoming;
133 #endif
134         Sockbuf_Buf     sb_buf;
135 #ifdef LDAP_SASL   
136         Sockbuf_Buf     sb_sec_buf_in;
137         Sockbuf_Buf     sb_sec_buf_out;
138         long            sb_sec_prev_len;
139 #endif   
140 };
141
142 #define READBUFSIZ      8192
143
144 struct seqorset {
145         BerElement      *sos_ber;
146         unsigned long   sos_clen;
147         unsigned long   sos_tag;
148         char            *sos_first;
149         char            *sos_ptr;
150         struct seqorset *sos_next;
151 };
152 #define NULLSEQORSET    ((Seqorset *) 0)
153
154 /*
155  * bprint.c
156  */
157 LDAP_F( int )
158 ber_log_bprint LDAP_P((
159         int errlvl,
160         int loglvl,
161         const char *data,
162         int len ));
163
164 LDAP_F( int )
165 ber_log_dump LDAP_P((
166         int errlvl,
167         int loglvl,
168         const BerElement *ber,
169         int inout ));
170
171 LDAP_F( int )
172 ber_log_sos_dump LDAP_P((
173         int errlvl,
174         int loglvl,
175         const Seqorset *sos ));
176
177 /* sockbuf.c */
178
179 LDAP_F( int )
180 ber_pvt_sb_init LDAP_P(( Sockbuf *sb ));
181
182 LDAP_F( int )
183 ber_pvt_sb_destroy LDAP_P(( Sockbuf *sb ));
184 #ifdef USE_SASL
185
186 LDAP_F( int )
187 ber_pvt_sb_set_sec LDAP_P(( Sockbuf *sb, Sockbuf_Sec *sec, void *arg ));
188
189 LDAP_F( int )
190 ber_pvt_sb_clear_sec LDAP_P(( Sockbuf *sb ));
191 #endif
192
193 LDAP_F( int )
194 ber_pvt_sb_set_io LDAP_P(( Sockbuf *sb, Sockbuf_IO *layer, void *arg ));
195
196 LDAP_F( int )
197 ber_pvt_sb_clear_io LDAP_P(( Sockbuf *sb ));
198
199 LDAP_F( int )
200 ber_pvt_sb_close LDAP_P((Sockbuf *sb ));
201
202 LDAP_F( int )
203 ber_pvt_sb_set_nonblock LDAP_P(( Sockbuf *sb, int nb ));
204
205 LDAP_F( int )
206 ber_pvt_sb_set_readahead LDAP_P(( Sockbuf *sb, int rh ));
207
208 LDAP_F( long )
209 ber_pvt_sb_read LDAP_P(( Sockbuf *sb, void *buf, long len ));
210
211 LDAP_F( long )
212 ber_pvt_sb_write LDAP_P(( Sockbuf *sb, void *buf, long len ));
213
214 LDAP_F( int )
215 ber_pvt_sb_udp_set_dst LDAP_P((Sockbuf *sb, void *addr ));
216
217 LDAP_F( void * )
218 ber_pvt_sb_udp_get_src LDAP_P((Sockbuf *sb ));
219
220 extern Sockbuf_IO ber_pvt_sb_io_tcp;
221 extern Sockbuf_IO ber_pvt_sb_io_udp;
222
223 #endif /* _LBER_INT_H */