]> git.sur5r.net Git - openldap/blobdiff - libraries/liblber/lber-int.h
adjust project settings
[openldap] / libraries / liblber / lber-int.h
index 37db2a986b04661c864ad31d14559eb2f4c09518..c9b9b29d532c315f81009e3057e1e0a15bcb67c8 100644 (file)
 
 LDAP_BEGIN_DECL
 
-#define LBER_ITEM_BERELEMENT 1
-#define LBER_ITEM_SOCKBUF 2
-
 extern int lber_int_debug;
 #define lber_log_printf lber_pvt_log_printf
 
+struct lber_options {
+       short           lbo_item_type;
+#define LBER_ITEM_BERELEMENT 1
+#define LBER_ITEM_SOCKBUF 2
+       short           lbo_options;
+       int                     lbo_debug;
+};
+
 struct berelement {
-       short           ber_item_type;  /* always LBER_ITEM_BERELEMENT */
-       short           ber_options;
-       int                     ber_debug;
+       struct          lber_options ber_opts;
+#define ber_item_type  ber_opts.lbo_item_type
+#define ber_options            ber_opts.lbo_options
+#define ber_debug              ber_opts.lbo_debug
 
        int                     ber_usertag;
 
@@ -50,28 +56,89 @@ struct berelement {
 };
 #define NULLBER        ((BerElement *) 0)
 
-struct sockbuf {
-       short           sb_item_type;   /* always LBER_ITEM_SOCKBUF */
-       short           sb_options;     /* to support copying ber elements */
-       int                     sb_debug;
+struct sockbuf;
+
+struct sockbuf_io {
+       int     (*sbi_setup)( struct sockbuf * sb, void *arg );
+       int     (*sbi_remove)( struct sockbuf *sb );
+       
+       long    (*sbi_read)( struct sockbuf *sb, void *buf, long len );
+       long    (*sbi_write)( struct sockbuf *sb, void *buf, long len );
+       int     (*sbi_close)( struct sockbuf *sb );
+};
+
+struct sockbuf_sec {
+       int     (*sbs_setup)( struct sockbuf * sb, void *arg );
+       int     (*sbs_remove)( struct sockbuf *sb );
+   
+       long    (*sbs_protect)( struct sockbuf *sb, char *in, long *ilen,
+                               char *out, long olen );
+       long    (*sbs_release)( struct sockbuf *sb, char *in, long ilen,
+                              char *out0, long olen0, char *out1, long olen1 );
+};
 
-       int                     sb_fd;
+struct sockbuf_buf {
+       long    buf_size;
+       long    buf_ptr;
+       long    buf_end;
+       char    *buf_base;
+};
+
+typedef struct sockbuf_io Sockbuf_IO;
+typedef struct sockbuf_sec Sockbuf_Sec;
+typedef struct sockbuf_buf Sockbuf_Buf;
+
+#define        lber_pvt_sb_get_desc( sb ) ((sb)->sb_sd)
+#define lber_pvt_sb_set_desc( sb, val ) ((sb)->sb_sd =(val))
+#define lber_pvt_sb_in_use( sb ) ((sb)->sb_sd!=-1)
+
+#ifdef USE_SASL
+#define lber_pvt_sb_data_ready( sb ) \
+(((sb)->sb_buf_ready) || ((sb)->sb_trans_ready) || ((sb)->sb_sec_ready))
+#else
+#define lber_pvt_sb_data_ready( sb ) \
+(((sb)->sb_buf_ready) || ((sb)->sb_trans_ready))
+#endif
+
+struct sockbuf {
+       struct lber_options sb_opts;
+#define        sb_item_type    sb_opts.lbo_item_type
+#define        sb_options              sb_opts.lbo_options
+#define        sb_debug                sb_opts.lbo_debug
+
+       int             sb_non_block:1; 
+       int             sb_read_ahead:1;
+   
+       int             sb_buf_ready:1;
+       int             sb_trans_ready:1;
+       int             sb_sec_ready:1;
+      
+       int             sb_fd;
+   
+       void            *sb_iodata;     /* transport-layer data pointer */
+       Sockbuf_IO      *sb_io;         /* I/O functions */
+   
+#ifdef LDAP_SASL
+       void            *sb_sdata;      /* security-layer data pointer */
+       Sockbuf_Sec     *sb_sec;
+#endif 
+       
 #ifndef MACOS
        int             sb_sd;
 #else /* MACOS */
        void            *sb_sd;
 #endif /* MACOS */
-
+#ifdef DEADWOOD
        long            sb_max_incoming;
-
-       BerElement      sb_ber;
-
-       int                     sb_naddr;       /* > 0 implies using CLDAP (UDP) */
-       void            *sb_useaddr;    /* pointer to sockaddr to use next */
-       void            *sb_fromaddr;   /* pointer to message source sockaddr */
-       void            **sb_addrs;     /* actually an array of pointers to
-                                               sockaddrs */
+#endif
+       Sockbuf_Buf     sb_buf;
+#ifdef LDAP_SASL   
+       Sockbuf_Buf     sb_sec_buf_in;
+       Sockbuf_Buf     sb_sec_buf_out;
+       long            sb_sec_prev_len;
+#endif   
 };
+
 #define READBUFSIZ     8192
 
 struct seqorset {
@@ -104,4 +171,33 @@ LDAP_F int lber_log_sos_dump LDAP_P((
        int loglvl,
        Seqorset *sos ));
 
+/* io.c */
+LDAP_F Sockbuf *lber_pvt_sb_alloc      LDAP_P(( void ));
+LDAP_F Sockbuf *lber_pvt_sb_alloc_fd   LDAP_P(( int ));
+LDAP_F Sockbuf *lber_pvt_sb_alloc_fd   LDAP_P(( int ));
+LDAP_F void    lber_pvt_sb_free        LDAP_P(( Sockbuf * ));
+LDAP_F int     lber_pvt_sb_get_option  LDAP_P(( Sockbuf *, int, void * ));
+LDAP_F int     lber_pvt_sb_set_option  LDAP_P(( Sockbuf *, int, void * ));
+
+/* sockbuf.c */
+
+LDAP_F int lber_pvt_sb_init LDAP_P(( Sockbuf *sb ));
+LDAP_F int lber_pvt_sb_destroy LDAP_P(( Sockbuf *sb ));
+#ifdef USE_SASL
+LDAP_F  int lber_pvt_sb_set_sec LDAP_P(( Sockbuf *sb, Sockbuf_Sec *sec, void *arg ));
+LDAP_F  int lber_pvt_sb_clear_sec LDAP_P(( Sockbuf *sb ));
+#endif
+LDAP_F int lber_pvt_sb_set_io LDAP_P(( Sockbuf *sb, Sockbuf_IO *layer, void *arg ));
+LDAP_F int lber_pvt_sb_clear_io LDAP_P(( Sockbuf *sb ));
+LDAP_F int lber_pvt_sb_close LDAP_P((Sockbuf *sb ));
+LDAP_F  int lber_pvt_sb_set_nonblock LDAP_P(( Sockbuf *sb, int nb ));
+LDAP_F  int lber_pvt_sb_set_readahead LDAP_P(( Sockbuf *sb, int rh ));
+LDAP_F  long lber_pvt_sb_read LDAP_P(( Sockbuf *sb, void *buf, long len ));
+LDAP_F  long lber_pvt_sb_write LDAP_P(( Sockbuf *sb, void *buf, long len ));
+LDAP_F int lber_pvt_sb_udp_set_dst LDAP_P((Sockbuf *sb, void *addr ));
+LDAP_F void *lber_pvt_sb_udp_get_src LDAP_P((Sockbuf *sb ));
+
+extern Sockbuf_IO lber_pvt_sb_io_tcp;
+extern Sockbuf_IO lber_pvt_sb_io_udp;
+
 #endif /* _LBER_INT_H */