#ifndef _OV_H_ #define _OV_H_ #include "storage.h" #include "inn/history.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define OV_READ 1 #define OV_WRITE 2 typedef enum {OVSPACE, OVSORT, OVCUTOFFLOW, OVGROUPBASEDEXPIRE, OVSTATICSEARCH, OVSTATALL, OVCACHEKEEP, OVCACHEFREE} OVCTLTYPE; #define OV_NOSPACE 100 typedef enum {OVNEWSGROUP, OVARRIVED, OVNOSORT} OVSORTTYPE; typedef enum {OVADDCOMPLETED, OVADDFAILED, OVADDGROUPNOMATCH} OVADDRESULT; typedef struct _OVGE { bool delayrm; /* append tokens to filename if true */ bool usepost; /* posting date is used to determine expiry time if true */ bool quiet; /* statistics will be suppressed if true */ bool keep; /* keep article so long as any of crossposted newsgroups is not expired if true */ bool earliest; /* purge article any of crossposted newsgroups is expired if true */ bool ignoreselfexpire; /* purge article even if storing method has self expiry */ char *filename; /* used to append tokens to this file if delayrm is true */ time_t now; /* used as current time */ float timewarp; /* used to bias expiry time */ } OVGE; extern bool OVstatall; bool OVopen(int mode); bool OVgroupstats(char *group, int *lo, int *hi, int *count, int *flag); bool OVgroupadd(char *group, ARTNUM lo, ARTNUM hi, char *flag); bool OVgroupdel(char *group); OVADDRESULT OVadd(TOKEN token, char *data, int len, time_t arrived, time_t expires); bool OVcancel(TOKEN token); void *OVopensearch(char *group, int low, int high); bool OVsearch(void *handle, ARTNUM *artnum, char **data, int *len, TOKEN *token, time_t *arrived); void OVclosesearch(void *handle); bool OVgetartinfo(char *group, ARTNUM artnum, TOKEN *token); bool OVexpiregroup(char *group, int *lo, struct history *h); bool OVctl(OVCTLTYPE type, void *val); void OVclose(void); /* Overview data manipulation functions. */ const struct cvector *overview_fields(void); struct vector *overview_extra_fields(void); struct buffer *overview_build(ARTNUM number, const char *article, size_t length, const struct vector *extra, struct buffer *); bool overview_check(const char *data, size_t length, ARTNUM article); int overview_index(const char *field, const struct vector *extra); struct cvector *overview_split(const char *line, size_t length, ARTNUM *number, struct cvector *vector); char *overview_getheader(const struct cvector *vector, int element, const struct vector *extra); /* offsets into vectors for standard overview headers */ enum { OVERVIEW_SUBJECT, OVERVIEW_FROM, OVERVIEW_DATE, OVERVIEW_MESSAGE_ID, OVERVIEW_REFERENCES, OVERVIEW_BYTES, OVERVIEW_LINES, OVERVIEW_MAX }; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _OV_H_ */