/// <summary> /// Factory constructor. /// </summary> public MailFilterAgentFactory() { // Initialize fields, parameters, and data structures. hashManager = new SHA256Managed(); // Get the path to where the data files should be. // The final result is calculated in relation to the // binary DLL that contains this class and can easily // be set to almost any directory. The only requirement // is that the "Network Service" user has write permission // to whatever directory is specified. Assembly currAssembly = Assembly.GetAssembly(this.GetType()); string assemblyPath = Path.GetDirectoryName(currAssembly.Location); this.dataPath = Path.Combine(assemblyPath, RelativeDataPath); // Read the XML configuration file and apply its settings. this.MailFilterSettings = new MailFilterSettings(Path.Combine(this.dataPath, ConfigFileName)); // Initialize the empty database tables. this.verifiedDB = new MailFilterDatabase( this.MailFilterSettings.MaxVerifiedEntries, this.MailFilterSettings.BucketSize); this.unverifiedDB = new MailFilterDatabase( this.MailFilterSettings.MaxUnverifiedEntries, this.MailFilterSettings.BucketSize); // Try loading the contents of a persisted data file into // the temporarily blocked sender list tables. this.verifiedDB.ReadPersistedData(Path.Combine(this.dataPath, VerifiedDataFile)); this.unverifiedDB.ReadPersistedData(Path.Combine(this.dataPath, UnverifiedDataFile)); }
/// <summary> /// The Copy constructor makes a copy of another settings object. /// </summary> /// <param name="other">The settings object to be copied.</param> public MailFilterSettings(MailFilterSettings other) { this.VerifiedExpirationTime = other.VerifiedExpirationTime; this.UnverifiedExpirationTime = other.UnverifiedExpirationTime; this.InitialBlockingPeriod = other.InitialBlockingPeriod; this.MaxVerifiedEntries = other.MaxVerifiedEntries; this.MaxUnverifiedEntries = other.MaxUnverifiedEntries; this.BucketSize = other.BucketSize; this.CleanRowCount = other.CleanRowCount; }
/// <summary> /// The constructor registers all event handlers and creates /// local references to the session database tables. It should only be called /// from the MailFilterAgentFactory class. /// </summary> /// <param name="settings">A reference to a settings object.</param> /// <param name="verifiedDatabase">A reference to the table of verified entries.</param> /// <param name="unverifiedDatabase">A reference to the table of unverified entries.</param> /// <param name="hashManager">A reference to the hash class instance in the factory.</param> /// <param name="server">A reference to the SMTP server, passed from the factory.</param> public MailFilterAgent( MailFilterSettings settings, MailFilterDatabase verifiedDatabase, MailFilterDatabase unverifiedDatabase, SHA256Managed hashManager, SmtpServer server) { // Initialize instance variables. this.settings = settings; this.server = server; this.verifiedDatabase = verifiedDatabase; this.unverifiedDatabase = unverifiedDatabase; this.testOnEndOfHeaders = false; this.hashManager = hashManager; // Set up the hooks to have your functions called when certain events occur. this.OnRcptCommand += new RcptCommandEventHandler(this.OnRcptCommandHandler); this.OnEndOfHeaders += new EndOfHeadersEventHandler(this.OnEndOfHeaderHandler); }