Update of /cvsroot/mahogany/M/src/classes
In directory usw-pr-cvs1:/tmp/cvs-serv15623/src/classes
Modified Files:
MFilter.cpp
Log Message:
added more anti-spam filter tests
Index: MFilter.cpp
===================================================================
RCS file: /cvsroot/mahogany/M/src/classes/MFilter.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -b -u -2 -r1.19 -r1.20
--- MFilter.cpp 29 Apr 2002 15:52:35 -0000 1.19
+++ MFilter.cpp 18 Jun 2002 14:48:12 -0000 1.20
@@ -132,19 +132,21 @@
// NB: if the string is terminated with a '(' a matching ')' will be
// automatically added when constructing the filter expression
- "1", // ORC_T_Always = 0,
- "matchi(", // ORC_T_Match,
- "containsi(", // ORC_T_Contains,
- "match(", // ORC_T_MatchC,
- "contains(", // ORC_T_ContainsC,
- "matchregex(", // ORC_T_MatchRegExC,
- "size() > ", // ORC_T_LargerThan,
- "size() < ", // ORC_T_SmallerThan,
- "(now()-date()) > ", // ORC_T_OlderThan,
- "(now()-date()) < ", // ORC_T_NewerThan,
- "isspam()", // ORC_T_IsSpam,
- "python(", // ORC_T_Python,
- "matchregexi(", // ORC_T_MatchRegEx,
- "score() > ", // ORC_T_ScoreAbove,
- "score() < ", // ORC_T_ScoreBelow,
+ "1", // ORC_T_Always
+ "matchi(", // ORC_T_Match
+ "containsi(", // ORC_T_Contains
+ "match(", // ORC_T_MatchC
+ "contains(", // ORC_T_ContainsC
+ "matchregex(", // ORC_T_MatchRegExC
+ "size() > ", // ORC_T_LargerThan
+ "size() < ", // ORC_T_SmallerThan
+ "(now()-date()) > ", // ORC_T_OlderThan
+ "(now()-date()) < ", // ORC_T_NewerThan
+ "isspam()", // ORC_T_IsSpam
+ "python(", // ORC_T_Python
+ "matchregexi(", // ORC_T_MatchRegEx
+ "score() > ", // ORC_T_ScoreAbove
+ "score() < ", // ORC_T_ScoreBelow
+ "istome()", // ORC_T_IsToMe
+ "subj8bit()", // ORC_T_8BitSubject
NULL
};
@@ -166,16 +168,39 @@
ORC_F_NeedsArg, // ORC_T_OlderThan,
ORC_F_NeedsArg, // ORC_T_NewerThan,
- 0, // ORC _T_IsSpam,
+ 0, // ORC_T_IsSpam,
ORC_F_NeedsArg, // ORC_T_Python,
ORC_F_NeedsTarget|ORC_F_NeedsArg, // ORC_T_MatchRegEx,
ORC_F_NeedsArg, // ORC_T_ScoreAbove,
ORC_F_NeedsArg, // ORC_T_ScoreBelow
- };
+ 0, // ORC_T_IsToMe
+ 0, // ORC_T_8BitSubject
+};
+
+bool FilterTestNeedsArgument(int test)
+{
+ CHECK( test >= 0 && (unsigned)test < WXSIZEOF(ORC_T_Flags), false,
+ "invalid filter test" );
+
+ return (ORC_T_Flags[test] & ORC_F_NeedsArg) != 0;
+}
+
+bool FilterTestNeedsTarget(int test)
+{
+ CHECK( test >= 0 && (unsigned)test < WXSIZEOF(ORC_T_Flags), false,
+ "invalid filter test" );
+
+ return (ORC_T_Flags[test] & ORC_F_NeedsTarget) != 0;
+}
static
const char * ORC_W_Names[] =
{
- "subject()", "header()", "from()", "body()",
- "message()", "to()", "header(\"Sender\")",
+ "subject()",
+ "header()",
+ "from()",
+ "body()",
+ "message()",
+ "to()",
+ "header(\"Sender\")",
"recipients()",
NULL
@@ -184,7 +209,16 @@
static const char * OAC_T_Names[] =
{
- "delete(", "copy(", "move(", "expunge(",
- "message(", "log(", "python(", "addscore(",
- "setcolour(", "zap(", "print(", NULL
+ "delete(",
+ "copy(",
+ "move(",
+ "expunge(",
+ "message(",
+ "log(",
+ "python(",
+ "addscore(",
+ "setcolour(",
+ "zap(",
+ "print(",
+ NULL
};
@@ -192,17 +226,33 @@
static unsigned char OAC_T_Flags[] =
{
- 0, OAC_F_NeedsArg, OAC_F_NeedsArg, 0,
- OAC_F_NeedsArg, OAC_F_NeedsArg, OAC_F_NeedsArg, OAC_F_NeedsArg,
- OAC_F_NeedsArg, 0 , 0
+ 0,
+ OAC_F_NeedsArg,
+ OAC_F_NeedsArg,
+ 0,
+ OAC_F_NeedsArg,
+ OAC_F_NeedsArg,
+ OAC_F_NeedsArg,
+ OAC_F_NeedsArg,
+ OAC_F_NeedsArg,
+ 0,
+ 0,
};
+wxCOMPILE_TIME_ASSERT( WXSIZEOF(ORC_T_Names) == ORC_T_Max + 1,
+ MismatchInCritArrays );
+
+wxCOMPILE_TIME_ASSERT( WXSIZEOF(ORC_T_Flags) == ORC_T_Max,
+ MismatchInCritFlags );
+
+wxCOMPILE_TIME_ASSERT( WXSIZEOF(ORC_W_Names) == ORC_W_Max + 1,
+ MismatchInTargetArray );
+
String
MFDialogComponent::WriteTest(void)
{
- ASSERT( WXSIZEOF(ORC_T_Names) == ORC_T_Max + 1);
- ASSERT( WXSIZEOF(ORC_T_Flags) == ORC_T_Max);
- ASSERT( WXSIZEOF(ORC_W_Names) == ORC_W_Max + 1);
-
String program;
+
+ CHECK( m_Test >= 0 && m_Test < ORC_T_Max, program, "illegal filter test" );
+
// This returns the bit to go into an if between the brackets:
// if ( .............. )
@@ -212,26 +262,26 @@
program << '|';
break;
+
case ORC_L_And: // AND:
program << '&';
break;
+
+ default:
+ FAIL_MSG( "unknown logical filter operation" );
+
case ORC_L_None:
break;
- default:
- ASSERT(0); // not possible
}
+
program << '(';
- if(m_Inverted)
+ if ( m_Inverted )
program << '!';
- if(m_Test < 0 || m_Test >= ORC_T_Max)
- {
- ASSERT_MSG(0, "Illegal test - must not happen");
- return "";
- }
- bool needsTarget = ORC_T_Flags[m_Test] & ORC_F_NeedsTarget;
- bool needsArgument = (ORC_T_Flags[m_Test] & ORC_F_NeedsArg) != 0;
program << ORC_T_Names[m_Test];
+
bool needsClosingParen = program.Last() == '(';
+
+ bool needsTarget = FilterTestNeedsTarget(m_Test);
if(needsTarget)
{
@@ -244,4 +294,6 @@
}
}
+
+ bool needsArgument = FilterTestNeedsArgument(m_Test);
if(needsTarget && needsArgument)
program << ',';
@@ -255,4 +307,5 @@
program << ')'; // end of function call
program << ')';
+
return program;
}
@@ -261,8 +314,4 @@
MFDialogComponent::ReadSettingsFromRule(String & rule)
{
- ASSERT( WXSIZEOF(ORC_T_Names) == ORC_T_Max + 1);
- ASSERT( WXSIZEOF(ORC_T_Flags) == ORC_T_Max);
- ASSERT( WXSIZEOF(ORC_W_Names) == ORC_W_Max + 1);
-
const char *cptr = rule.c_str();
@@ -301,6 +350,6 @@
if(m_Test == ORC_T_Illegal)
return FALSE;
- bool needsTarget = ORC_T_Flags[m_Test] & ORC_F_NeedsTarget;
- bool needsArgument = (ORC_T_Flags[m_Test] & ORC_F_NeedsArg) != 0;
+ bool needsTarget = FilterTestNeedsTarget(m_Test);
+ bool needsArgument = FilterTestNeedsArgument(m_Test);
m_Target = ORC_W_Illegal;
if(needsTarget)
----------------------------------------------------------------------------
Bringing you mounds of caffeinated joy
>>> http://thinkgeek.com/sf <<<
_______________________________________________
Mahogany-cvsupdates mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/mahogany-cvsupdates