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

Reply via email to