00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef __writer_h__
00033 #define __writer_h__
00034
00035 #include "hashcontainer.h"
00036 #include <netdb.h>
00037
00069 struct _RDD_WRITER;
00070 struct _RDD_WRITE_OPS;
00071
00075 typedef enum _rdd_write_mode_t {
00076 RDD_NO_OVERWRITE = 0,
00077 RDD_OVERWRITE = 1,
00078 RDD_OVERWRITE_ASK = 2
00079 } rdd_write_mode_t;
00080
00081 typedef int (*rdd_wr_write_fun)(struct _RDD_WRITER *w,
00082 const unsigned char *buf, unsigned nbyte);
00083
00084 typedef int (*rdd_wr_close_fun)(struct _RDD_WRITER *w);
00085
00086 typedef int (*rdd_wr_compare_address_fun)(struct _RDD_WRITER *w, struct addrinfo *address, int *result);
00087
00092 typedef struct _RDD_WRITE_OPS {
00093 rdd_wr_write_fun write;
00094 rdd_wr_close_fun close;
00095 rdd_wr_compare_address_fun compare_address;
00096 } RDD_WRITE_OPS;
00097
00101 typedef struct _RDD_WRITER {
00102 void *state;
00103 RDD_WRITE_OPS *ops;
00104 } RDD_WRITER;
00105
00119 int rdd_new_writer(RDD_WRITER **w, RDD_WRITE_OPS *ops, unsigned statesize);
00120
00121
00122
00123
00133 int rdd_open_zlib_writer(RDD_WRITER **w, RDD_WRITER *parent);
00134
00140 int rdd_open_fd_writer(RDD_WRITER **w, int fd);
00141
00153 int rdd_open_file_writer(RDD_WRITER **w, const char *path);
00154
00166 int rdd_open_tcp_writer(RDD_WRITER **w, const char *host, unsigned port);
00167
00179 int rdd_open_safe_writer(RDD_WRITER **w, const char *path,
00180 rdd_write_mode_t overwrite);
00181
00200 int rdd_open_part_writer(RDD_WRITER **w,
00201 const char *basepath, rdd_count_t maxlen, rdd_count_t splitlen,
00202 rdd_write_mode_t overwrite);
00203
00216 int rdd_open_ewf_writer(RDD_WRITER **w, const char *path,
00217 rdd_count_t splitlen, int compression_type, rdd_write_mode_t overwrite, RDD_HASH_CONTAINER * hashcontainer);
00218
00219
00220
00221
00222
00238 int rdd_writer_write(RDD_WRITER *w, const unsigned char *buf, unsigned nbyte);
00239
00249 int rdd_writer_close(RDD_WRITER *w);
00250
00257 int rdd_compare_address(RDD_WRITER *w, struct addrinfo *address, int *result);
00258
00265 int rdd_get_address(const char *host, unsigned int port, struct addrinfo ** addr);
00266
00267 #endif