00001 // Preferences.hh - source file for the mailfilter program 00002 // Copyright (c) 2000 - 2002 Andreas Bauer <baueran@in.tum.de> 00003 // 00004 // This program is free software; you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation; either version 2 of the License, or 00007 // (at your option) any later version. 00008 // 00009 // This program is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with this program; if not, write to the Free Software 00016 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 00017 // USA. 00018 00019 #ifndef PREFERENCES_HH 00020 #define PREFERENCES_HH 00021 00022 #include <string> 00023 #include <vector> 00024 #include <list> 00025 extern "C" { 00026 #include <sys/types.h> 00027 #include <regex.h> 00028 } 00029 #include "RegExp.hh" 00030 #include "mailfilter.hh" 00031 00032 // Filter modes 00033 #define CASE_DEFAULT 0 00034 #define CASE_SENSITIVE 1 00035 #define CASE_INSENSITIVE 2 00036 00037 // Verbose levels 00038 #define MIN_VERBOSE 0 00039 #define MAX_VERBOSE 6 00040 00041 using namespace std; 00042 00043 namespace pref { 00044 00045 struct serverInfo { 00046 string name; 00047 string user; 00048 string pass; 00049 int protocol; 00050 int port; 00051 }; 00052 00053 00054 struct filterInfo { 00055 string filter; // Filter as ordinary string object 00056 int case_sensitive; // Values can be { CASE_SENSITIVE | CASE_INSENSITIVE | CASE_DEFAULT } 00057 00058 // Negative filters 00059 bool negative; // true if filter is of type 'DENY<>myaddress@something.com', otherwise false 00060 bool matched; // Is set to true during run-time if a negative filter has matched a line, otherwise leave this value with false 00061 00062 regex_t cFilter; // Compiled filter 00063 }; 00064 00065 00066 struct friendInfo { 00067 string filter; 00068 regex_t cFilter; 00069 }; 00070 00071 00072 class Preferences { 00073 private: 00074 // Variables 00075 vector<serverInfo> servers; 00076 vector<filterInfo> filters; 00077 vector<friendInfo> friends; 00078 serverInfo popServer; 00079 string logfile; 00080 string file; 00081 int maxsize; 00082 int maxsizeFriends; 00083 bool icase; 00084 bool normal; 00085 int regType; 00086 int regNewline; 00087 int verboseLevel; 00088 int timeOut; 00089 bool test; 00090 bool showHeaders; 00091 bool delDuplicates; 00092 bool compiled; 00093 int maxLineLength; 00094 re::RegExp regExp; 00095 00096 // Private function(s) 00097 int cmpNoCase(const string&, const string&); 00098 00099 public: 00100 Preferences(const string&); 00101 ~Preferences(); 00102 00103 const vector<serverInfo>& getServers(void); 00104 int getMaxsize(void); 00105 int getMaxsizeFriends(void); 00106 bool getIcase(void); 00107 bool isNormal(void); 00108 int getVerboseLevel(void); 00109 void setVerboseLevel(int); 00110 const string& getLogfile(void); 00111 void setLogfile(const string&); 00112 vector<filterInfo>* getFilters(void); 00113 vector<friendInfo>* getFriends(void); 00114 int getRegType(void); 00115 int getRegNewline(void); 00116 bool getTestMode(void); 00117 bool getDelDubs(void); 00118 bool getShowHeaders(void); 00119 int getMaxLineLength(void); 00120 void showErrorDeprecated(const string&); 00121 void showErrorParameter(const string&, const string&, const string&); 00122 void showErrorParameter(const string&, const string&, int); 00123 int getTimeOut(void); 00124 void setTimeOut(int); 00125 void keyword(const string, const string, const string); 00126 void keyword(const string, const string, int); 00127 int precompileExpressions(void); 00128 void setCompiled(bool); 00129 bool getCompiled(void); 00130 }; 00131 00132 // Exceptions 00133 class MalformedPrefsFile { }; 00134 class IOException { }; 00135 class RegExException { }; 00136 } 00137 00138 #endif