]> git.sur5r.net Git - openldap/blob - libraries/liblber/lber-int.h
Declare lber_pvt_sb_* functions from io.c in lber-int.h
[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 #define LBER_ITEM_BERELEMENT 1
27 #define LBER_ITEM_SOCKBUF 2
28
29 extern int lber_int_debug;
30 #define lber_log_printf lber_pvt_log_printf
31
32 struct berelement {
33         short           ber_item_type;  /* always LBER_ITEM_BERELEMENT */
34         short           ber_options;
35         int                     ber_debug;
36
37         int                     ber_usertag;
38
39         unsigned long   ber_tag;
40         unsigned long   ber_len;
41
42         char            *ber_buf;
43         char            *ber_ptr;
44         char            *ber_end;
45
46         struct seqorset *ber_sos;
47         char            *ber_rwptr;
48         BERTranslateProc ber_encode_translate_proc;
49         BERTranslateProc ber_decode_translate_proc;
50 };
51 #define NULLBER ((BerElement *) 0)
52
53 struct sockbuf;
54
55 struct sockbuf_io {
56         int     (*sbi_setup)( struct sockbuf * sb, void *arg );
57         int     (*sbi_remove)( struct sockbuf *sb );
58         
59         long    (*sbi_read)( struct sockbuf *sb, void *buf, long len );
60         long    (*sbi_write)( struct sockbuf *sb, void *buf, long len );
61         int     (*sbi_close)( struct sockbuf *sb );
62 };
63
64 struct sockbuf_sec
65 {
66         int     (*sbs_setup)( struct sockbuf * sb, void *arg );
67         int     (*sbs_remove)( struct sockbuf *sb );
68    
69         long    (*sbs_protect)( struct sockbuf *sb, char *in, long *ilen,
70                                 char *out, long olen );
71         long    (*sbs_release)( struct sockbuf *sb, char *in, long ilen,
72                                char *out0, long olen0, char *out1, long olen1 );
73 };
74
75 struct sockbuf_buf
76 {
77         long    buf_size;
78         long    buf_ptr;
79         long    buf_end;
80         char    *buf_base;
81 };
82
83 typedef struct sockbuf_io Sockbuf_IO;
84 typedef struct sockbuf_sec Sockbuf_Sec;
85 typedef struct sockbuf_buf Sockbuf_Buf;
86
87 #define lber_pvt_sb_get_desc( sb ) ((sb)->sb_sd)
88 #define lber_pvt_sb_set_desc( sb, val ) ((sb)->sb_sd =(val))
89 #define lber_pvt_sb_in_use( sb ) ((sb)->sb_sd!=-1)
90
91 #ifdef USE_SASL
92 #define lber_pvt_sb_data_ready( sb ) \
93 (((sb)->sb_buf_ready) || ((sb)->sb_trans_ready) || ((sb)->sb_sec_ready))
94 #else
95 #define lber_pvt_sb_data_ready( sb ) \
96 (((sb)->sb_buf_ready) || ((sb)->sb_trans_ready))
97 #endif
98
99 struct sockbuf {
100         short           sb_item_type;   /* always LBER_ITEM_SOCKBUF */
101         short           sb_options;     /* to support copying ber elements */
102
103         int             sb_debug:1;
104         int             sb_non_block:1; 
105         int             sb_read_ahead:1;
106    
107         int             sb_buf_ready:1;
108         int             sb_trans_ready:1;
109         int             sb_sec_ready:1;
110       
111         int             sb_fd;
112    
113         void            *sb_iodata;     /* transport-layer data pointer */
114         Sockbuf_IO      *sb_io;         /* I/O functions */
115    
116 #ifdef LDAP_SASL
117         void            *sb_sdata;      /* security-layer data pointer */
118         Sockbuf_Sec     *sb_sec;
119 #endif  
120         
121 #ifndef MACOS
122         int             sb_sd;
123 #else /* MACOS */
124         void            *sb_sd;
125 #endif /* MACOS */
126 #ifdef DEADWOOD
127         long            sb_max_incoming;
128 #endif
129         Sockbuf_Buf     sb_buf;
130 #ifdef LDAP_SASL   
131         Sockbuf_Buf     sb_sec_buf_in;
132         Sockbuf_Buf     sb_sec_buf_out;
133         long            sb_sec_prev_len;
134 #endif   
135 };
136
137 #define READBUFSIZ      8192
138
139 struct seqorset {
140         BerElement      *sos_ber;
141         unsigned long   sos_clen;
142         unsigned long   sos_tag;
143         char            *sos_first;
144         char            *sos_ptr;
145         struct seqorset *sos_next;
146 };
147 #define NULLSEQORSET    ((Seqorset *) 0)
148
149 /*
150  * bprint.c
151  */
152 LDAP_F int lber_log_bprint LDAP_P((
153         int errlvl,
154         int loglvl,
155         char *data,
156         int len ));
157
158 LDAP_F int lber_log_dump LDAP_P((
159         int errlvl,
160         int loglvl,
161         BerElement *ber,
162         int inout ));
163
164 LDAP_F int lber_log_sos_dump LDAP_P((
165         int errlvl,
166         int loglvl,
167         Seqorset *sos ));
168
169 /* io.c */
170 LDAP_F  Sockbuf *lber_pvt_sb_alloc      LDAP_P(( void ));
171 LDAP_F  Sockbuf *lber_pvt_sb_alloc_fd   LDAP_P(( int ));
172 LDAP_F  Sockbuf *lber_pvt_sb_alloc_fd   LDAP_P(( int ));
173 LDAP_F  void    lber_pvt_sb_free        LDAP_P(( Sockbuf * ));
174 LDAP_F  int     lber_pvt_sb_get_option  LDAP_P(( Sockbuf *, int, void * ));
175 LDAP_F  int     lber_pvt_sb_set_option  LDAP_P(( Sockbuf *, int, void * ));
176
177 /* sockbuf.c */
178
179 LDAP_F  int lber_pvt_sb_init LDAP_P(( Sockbuf *sb ));
180 LDAP_F  int lber_pvt_sb_destroy LDAP_P(( Sockbuf *sb ));
181 #ifdef USE_SASL
182 LDAP_F  int lber_pvt_sb_set_sec LDAP_P(( Sockbuf *sb, Sockbuf_Sec *sec, void *arg ));
183 LDAP_F  int lber_pvt_sb_clear_sec LDAP_P(( Sockbuf *sb ));
184 #endif
185 LDAP_F  int lber_pvt_sb_set_io LDAP_P(( Sockbuf *sb, Sockbuf_IO *layer, void *arg ));
186 LDAP_F  int lber_pvt_sb_clear_io LDAP_P(( Sockbuf *sb ));
187 LDAP_F  int lber_pvt_sb_close LDAP_P((Sockbuf *sb ));
188 LDAP_F  int lber_pvt_sb_set_nonblock LDAP_P(( Sockbuf *sb, int nb ));
189 LDAP_F  int lber_pvt_sb_set_readahead LDAP_P(( Sockbuf *sb, int rh ));
190 LDAP_F  long lber_pvt_sb_read LDAP_P(( Sockbuf *sb, void *buf, long len ));
191 LDAP_F  long lber_pvt_sb_write LDAP_P(( Sockbuf *sb, void *buf, long len ));
192 LDAP_F  int lber_pvt_sb_udp_set_dst LDAP_P((Sockbuf *sb, void *addr ));
193 LDAP_F  void *lber_pvt_sb_udp_get_src LDAP_P((Sockbuf *sb ));
194
195 extern Sockbuf_IO lber_pvt_sb_io_tcp;
196 extern Sockbuf_IO lber_pvt_sb_io_udp;
197
198 #endif /* _LBER_INT_H */