00001
00002 #ifndef SPAMPARAMETERS_H
00003 #define SPAMPARAMETERS_H
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 #include <stdlib.h>
00030
00031 #include <vector>
00032
00033 #include "SpamException.h"
00034
00125 class SpamParameters
00126 {
00127 public:
00128 typedef enum { to_list = 0,
00129 from_address,
00130 from_kill,
00131 spam_words,
00132 kill_words,
00133 flags,
00134 my_domain,
00135 valid_users,
00136 SpamEnumMax } SpamEnum;
00137
00138 private:
00139 static std::vector<const char *> section[ (size_t)SpamEnumMax ];
00140 SpamEnum currentSection;
00141
00142 class enumTableElem {
00143 public:
00144 const char *name;
00145 const SpamEnum enumVal;
00146 enumTableElem(const char *n, const SpamEnum e) : name(n), enumVal(e) {}
00147 };
00148
00149 static const enumTableElem enumTable[];
00150
00151 static bool initialized;
00152
00153 typedef enum { BadState = 0,
00154 sectionDef,
00155 beginBracket,
00156 spamPhrase } paramState;
00157
00158 paramState currentState;
00159
00160 bool skipLine(const char *buf);
00161 void finiteStateMachine(const char *buf) throw( SpamException );
00162 SpamEnum SpamParameters::findEnum(const char *str );
00163 void enterPhrase(const char *buf);
00164
00165 public:
00166 SpamParameters(const char *paramFileName) throw( SpamException );
00167 SpamParameters();
00168 ~SpamParameters();
00169 std::vector<const char *> &getSection( SpamEnum sec ) throw( SpamException );
00170 bool hasFlag(const char *name);
00171 void print();
00172 };
00173
00174 #endif