view src/filter.h @ 193:021d145e34e9 noffle

[svn] * src/fetch.c: Only leave articles in the requested list if the error fetching them was fatal. Otherwise article requests will accumulate indefinitely (e.g retrieving through NNTPcache when it can't find the body of an article, now or event. Yes, this happened to me; I had nearly 2000 requests backed up and never being cleared). * src/group.c: The weekend's change introduced code that causes a bus error on Sparc ( *(time_t *)p = xxx ). Replace with a safe memcpy, and also use memcpy when reading the Entry and time items to remove warnings on Sparc compilation.
author bears
date Mon, 22 Oct 2001 14:41:43 +0100
parents 8897b7e3b108
children a4e9a20e50e5
line wrap: on
line source

/*
  filter.h

  Article filtering.

  $Id: filter.h 189 2000-08-09 21:19:17Z bears $
*/

#ifndef	FILTER_H
#define	FILTER_H

#include <sys/types.h>
#include <regex.h>
#include "fetchlist.h"
#include "over.h"

/* The possible actions in a filter. */
typedef enum {
    FILTER_FULL,
    FILTER_XOVER,
    FILTER_THREAD,
    FILTER_DISCARD
} FilterAction;

/* Representation of a rule. */
typedef enum {
    RULE_NEWSGROUP,					/* Wildmat data */
    RULE_SUBJECT,					/* Regex data */
    RULE_FROM,
    RULE_MSGID,
    RULE_BYTES_LT, RULE_BYTES_EQ, RULE_BYTES_GT,	/* Number data */
    RULE_LINES_LT, RULE_LINES_EQ, RULE_LINES_GT,
    RULE_NOREFS_LT, RULE_NOREFS_EQ, RULE_NOREFS_GT,
    RULE_XPOSTS_LT, RULE_XPOSTS_EQ, RULE_XPOSTS_GT
} FilterRuleType;

typedef union {
    regex_t regex;
    unsigned long amount;
    char *grp;
} FilterRuleData;

typedef struct {
    FilterRuleType type;
    FilterRuleData data;
} FilterRule;

/* A single filter is a collection of rules with an action. */
typedef struct {
    int nRules;
    int maxRules;
    FilterRule *rules;
    FilterAction action;
} Filter;

/* Add a filter to the list of filters. */
void
Flt_addFilter( const Filter *f );

/*
 * Run the rules over the supplied overview. If a specific rule fires,
 * returns its action. If no rule fires, return the default read mode.
 */
FilterAction
Flt_checkFilters( const char *thisGrp, const char *newsgroups,
		  const Over *ov, FetchMode mode );

/*
 * Build and access a filter
 */
Filter *
new_Filter( void );

void
del_Filter( Filter *f );

FilterAction
Flt_action( const Filter *f );

int
Flt_nRules( const Filter *f );

Bool
Flt_getNewsgroups( void );

FilterRule
Flt_rule( const Filter *f, int ruleNo );

void
Flt_setAction( Filter *f, FilterAction action );

void
Flt_addRule( Filter *f, FilterRule rule );

#endif	/* FILTER_H */