/* $Id: interface.h 5933 2002-12-07 09:47:17Z rra $ ** ** Storage Manager interface header */ #ifndef __INTERFACE_H__ #define __INTERFACE_H__ #include "config.h" #include "storage.h" #include typedef struct { bool selfexpire; bool expensivestat; } SMATTRIBUTE; typedef struct { const char *name; unsigned char type; bool (*init)(SMATTRIBUTE *attr); TOKEN (*store)(const ARTHANDLE article, const STORAGECLASS storageclass); ARTHANDLE *(*retrieve)(const TOKEN token, const RETRTYPE amount); ARTHANDLE *(*next)(const ARTHANDLE *article, const RETRTYPE amount); void (*freearticle)(ARTHANDLE *article); bool (*cancel)(TOKEN token); bool (*ctl)(PROBETYPE type, TOKEN *token, void *value); bool (*flushcacheddata)(FLUSHTYPE type); void (*printfiles)(FILE *, TOKEN, char **xref, int ngroups); void (*shutdown)(void); } STORAGE_METHOD; typedef struct __S_SUB__ { int type; /* Index into storage_methods of the one to use */ size_t minsize; /* Minimum size to send to this method */ size_t maxsize; /* Maximum size to send to this method */ time_t minexpire; /* Minimum expire offset to send method */ time_t maxexpire; /* Maximum expire offset to send method */ int numpatterns; /* Number of patterns in patterns */ int class; /* Number of the storage class for this subscription */ char *pattern; /* Wildmat pattern to check against the groups to determine if the article should go to this method */ char *options; /* additional options specific to the method */ bool exactmatch; /* all newsgroups to which article belongs should match the patterns */ struct __S_SUB__ *next; } STORAGE_SUB; extern bool SMopenmode; extern bool SMpreopen; char *SMFindBody(char *article, int len); STORAGE_SUB *SMGetConfig(STORAGETYPE type, STORAGE_SUB *sub); STORAGE_SUB *SMgetsub(const ARTHANDLE article); void SMseterror(int errorno, char *error); #endif /* __INTERFACE_H__ */