]> git.sur5r.net Git - openldap/blob - libraries/liblber/lber-int.h
adjust project settings
[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 lber_int_debug;
27 #define lber_log_printf lber_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 lber_pvt_sb_get_desc( sb ) ((sb)->sb_sd)
92 #define lber_pvt_sb_set_desc( sb, val ) ((sb)->sb_sd =(val))
93 #define lber_pvt_sb_in_use( sb ) ((sb)->sb_sd!=-1)
94
95 #ifdef USE_SASL
96 #define lber_pvt_sb_data_ready( sb ) \
97 (((sb)->sb_buf_ready) || ((sb)->sb_trans_ready) || ((sb)->sb_sec_ready))
98 #else
99 #define lber_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 lber_log_bprint LDAP_P((
158         int errlvl,
159         int loglvl,
160         char *data,
161         int len ));
162
163 LDAP_F int lber_log_dump LDAP_P((
164         int errlvl,
165         int loglvl,
166         BerElement *ber,
167         int inout ));
168
169 LDAP_F int lber_log_sos_dump LDAP_P((
170         int errlvl,
171         int loglvl,
172         Seqorset *sos ));
173
174 /* io.c */
175 LDAP_F  Sockbuf *lber_pvt_sb_alloc      LDAP_P(( void ));
176 LDAP_F  Sockbuf *lber_pvt_sb_alloc_fd   LDAP_P(( int ));
177 LDAP_F  Sockbuf *lber_pvt_sb_alloc_fd   LDAP_P(( int ));
178 LDAP_F  void    lber_pvt_sb_free        LDAP_P(( Sockbuf * ));
179 LDAP_F  int     lber_pvt_sb_get_option  LDAP_P(( Sockbuf *, int, void * ));
180 LDAP_F  int     lber_pvt_sb_set_option  LDAP_P(( Sockbuf *, int, void * ));
181
182 /* sockbuf.c */
183
184 LDAP_F  int lber_pvt_sb_init LDAP_P(( Sockbuf *sb ));
185 LDAP_F  int lber_pvt_sb_destroy LDAP_P(( Sockbuf *sb ));
186 #ifdef USE_SASL
187 LDAP_F  int lber_pvt_sb_set_sec LDAP_P(( Sockbuf *sb, Sockbuf_Sec *sec, void *arg ));
188 LDAP_F  int lber_pvt_sb_clear_sec LDAP_P(( Sockbuf *sb ));
189 #endif
190 LDAP_F  int lber_pvt_sb_set_io LDAP_P(( Sockbuf *sb, Sockbuf_IO *layer, void *arg ));
191 LDAP_F  int lber_pvt_sb_clear_io LDAP_P(( Sockbuf *sb ));
192 LDAP_F  int lber_pvt_sb_close LDAP_P((Sockbuf *sb ));
193 LDAP_F  int lber_pvt_sb_set_nonblock LDAP_P(( Sockbuf *sb, int nb ));
194 LDAP_F  int lber_pvt_sb_set_readahead LDAP_P(( Sockbuf *sb, int rh ));
195 LDAP_F  long lber_pvt_sb_read LDAP_P(( Sockbuf *sb, void *buf, long len ));
196 LDAP_F  long lber_pvt_sb_write LDAP_P(( Sockbuf *sb, void *buf, long len ));
197 LDAP_F  int lber_pvt_sb_udp_set_dst LDAP_P((Sockbuf *sb, void *addr ));
198 LDAP_F  void *lber_pvt_sb_udp_get_src LDAP_P((Sockbuf *sb ));
199
200 extern Sockbuf_IO lber_pvt_sb_io_tcp;
201 extern Sockbuf_IO lber_pvt_sb_io_udp;
202
203 #endif /* _LBER_INT_H */