aboutsummaryrefslogtreecommitdiffstats
path: root/src/headerFieldFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/headerFieldFactory.cpp')
-rw-r--r--src/headerFieldFactory.cpp139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/headerFieldFactory.cpp b/src/headerFieldFactory.cpp
new file mode 100644
index 00000000..0187c26d
--- /dev/null
+++ b/src/headerFieldFactory.cpp
@@ -0,0 +1,139 @@
+//
+// VMime library (http://vmime.sourceforge.net)
+// Copyright (C) 2002-2004 Vincent Richard <[email protected]>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of
+// the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+
+#include "headerFieldFactory.hpp"
+#include "exception.hpp"
+
+#include "defaultField.hpp"
+
+#include "mailboxField.hpp"
+#include "addressListField.hpp"
+#include "addressListField.hpp"
+#include "addressListField.hpp"
+#include "mailboxField.hpp"
+#include "dateField.hpp"
+#include "relayField.hpp"
+#include "textField.hpp"
+#include "mailboxField.hpp"
+#include "contentTypeField.hpp"
+#include "contentEncodingField.hpp"
+#include "contentDispositionField.hpp"
+#include "messageIdField.hpp"
+
+
+namespace vmime
+{
+
+
+headerFieldFactory::headerFieldFactory()
+{
+ // Register some default field types
+ registerType <mailboxField>(headerField::From);
+ registerType <addressListField>(headerField::To);
+ registerType <addressListField>(headerField::Cc);
+ registerType <addressListField>(headerField::Bcc);
+ registerType <mailboxField>(headerField::Sender);
+ registerType <dateField>(headerField::Date);
+ registerType <relayField>(headerField::Received);
+ registerType <textField>(headerField::Subject);
+ registerType <mailboxField>(headerField::ReplyTo);
+ registerType <mailboxField>(headerField::DeliveredTo);
+ registerType <textField>(headerField::Organization);
+ registerType <textField>(headerField::UserAgent);
+ registerType <mailboxField>(headerField::ReturnPath);
+ registerType <contentTypeField>(headerField::ContentType);
+ registerType <contentEncodingField>(headerField::ContentTransferEncoding);
+ registerType <textField>(headerField::ContentDescription);
+ registerType <defaultField>(headerField::MimeVersion);
+ registerType <contentDispositionField>(headerField::ContentDisposition);
+ registerType <messageIdField>(headerField::ContentId);
+ registerType <messageIdField>(headerField::MessageId);
+ registerType <defaultField>(headerField::ContentLocation);
+}
+
+
+headerFieldFactory::~headerFieldFactory()
+{
+}
+
+
+headerField* headerFieldFactory::create
+ (const string& name, const string& body)
+{
+ const headerField::Types type = headerField::nameToType(name);
+
+ if (type != headerField::Custom)
+ {
+ return (create(type, name, body));
+ }
+ else
+ {
+ NameMap::const_iterator pos = m_nameMap.find(toLower(name));
+ headerField* field = NULL;
+
+ if (pos != m_nameMap.end())
+ {
+ field = ((*pos).second)();
+ }
+ else
+ {
+ field = new defaultField;
+ }
+
+ field->m_type = headerField::Custom;
+ field->m_name = name;
+
+ if (body != NULL_STRING)
+ field->parse(body);
+
+ return (field);
+ }
+}
+
+
+headerField* headerFieldFactory::create(const headerField::Types type,
+ const string& name, const string& body)
+{
+ if (type == headerField::Custom)
+ {
+ return (create(name, body));
+ }
+ else
+ {
+ TypeMap::const_iterator pos = m_typeMap.find(type);
+
+ if (pos != m_typeMap.end())
+ {
+ headerField* field = ((*pos).second)();
+
+ field->m_type = type;
+ if (name != NULL_STRING) field->m_name = name;
+ if (body != NULL_STRING) field->parse(body);
+
+ return (field);
+ }
+ else
+ {
+ throw exceptions::bad_field_type();
+ }
+ }
+}
+
+
+} // vmime