E-MailRelay

- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

gfilterfactory.cpp
Go to the documentation of this file.
1 //
2 // Copyright (C) 2001-2018 Graeme Walker <graeme_walker@users.sourceforge.net>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
16 // ===
17 //
18 // gfilterfactory.cpp
19 //
20
21 #include "gdef.h"
22 #include "gsmtp.h"
23 #include "gstr.h"
24 #include "gfilterfactory.h"
25 #include "gnullfilter.h"
26 #include "gnetworkfilter.h"
27 #include "gexecutablefilter.h"
28 #include "gspamfilter.h"
29 #include "gexception.h"
30 #include "gfactoryparser.h"
31
32 std::string GSmtp::FilterFactory::check( const std::string & identifier )
33 {
34 return FactoryParser::check( identifier , true ) ;
35 }
36
37 unique_ptr<GSmtp::Filter> GSmtp::FilterFactory::newFilter( GNet::ExceptionHandler & eh ,
38 bool server_side , const std::string & identifier , unsigned int timeout )
39 {
40 FactoryParser::Result p = FactoryParser::parse( identifier , true ) ;
41 if( p.first.empty() )
42 {
43 return unique_ptr<GSmtp::Filter>( new NullFilter( eh , server_side ) ) ;
44 }
45 else if( p.first == "spam" )
46 {
47 bool edit = p.third == 1 ;
48 bool read_only = !edit ;
49 bool always_pass = edit ;
50 return unique_ptr<GSmtp::Filter>( new SpamFilter( eh , server_side , p.second , read_only , always_pass , timeout , timeout ) ) ;
51 }
52 else if( p.first == "net" )
53 {
54 return unique_ptr<GSmtp::Filter>( new NetworkFilter( eh , server_side , p.second , timeout , timeout ) ) ;
55 }
56 else if( p.first == "exit" )
57 {
58 return unique_ptr<GSmtp::Filter>( new NullFilter( eh , server_side , G::Str::toUInt(p.second) ) ) ;
59 }
60 else
61 {
62 return unique_ptr<GSmtp::Filter>( new ExecutableFilter( eh , server_side , p.second ) ) ;
63 }
64 }
65
66 /// \file gfilterfactory.cpp
gfilterfactory.h
GSmtp::FactoryParser::Result
Result tuple for GSmtp::FactoryParser::parse().
Definition: gfactoryparser.h:41
GSmtp::FactoryParser::check
static std::string check(const std::string &identifier, bool allow_spam)
Parses and checks an identifier.
Definition: gfactoryparser.cpp:63
gfactoryparser.h
gspamfilter.h
GSmtp::NetworkFilter
A Filter class that passes the name of a message file to a remote process over the network...
Definition: gnetworkfilter.h:40
gexecutablefilter.h
GNet::ExceptionHandler
An abstract interface for handling exceptions thrown out of event-loop callbacks (socket events...
Definition: gexceptionhandler.h:44
G::Str::toUInt
static unsigned int toUInt(const std::string &s)
Converts string 's' to an unsigned int.
Definition: gstr.cpp:488
gstr.h
GSmtp::FilterFactory::newFilter
static unique_ptr< Filter > newFilter(GNet::ExceptionHandler &, bool server_side, const std::string &identifier, unsigned int timeout)
Returns a Filter on the heap.
Definition: gfilterfactory.cpp:37
GSmtp::NullFilter
A Filter class that does nothing.
Definition: gnullfilter.h:37
GSmtp::FilterFactory::check
static std::string check(const std::string &identifier)
Checks an identifier.
Definition: gfilterfactory.cpp:32
GSmtp::SpamFilter
A Filter class that passes the body of a message file to a remote process over the network and option...
Definition: gspamfilter.h:41
GSmtp::FactoryParser::parse
static Result parse(const std::string &identifier, bool allow_spam)
Parses an identifier like "/usr/bin/foo" or "net:127.0.0.1:99" returning the type and the specificati...
Definition: gfactoryparser.cpp:30
gexception.h
gsmtp.h
gnetworkfilter.h
GSmtp::ExecutableFilter
A Filter class that runs an external helper program.
Definition: gexecutablefilter.h:41
gnullfilter.h