--- a
+++ b/src/bincimapmime/mime.cc
@@ -0,0 +1,157 @@
+/* -*- Mode: c++; -*- */
+/* --------------------------------------------------------------------
+ * Filename:
+ * mime.cc
+ *
+ * Description:
+ * Implementation of main mime parser components
+ * --------------------------------------------------------------------
+ * Copyright 2002-2004 Andreas Aardal Hanssen
+ *
+ * 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., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ * --------------------------------------------------------------------
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "mime.h"
+#include "convert.h"
+#include <string>
+#include <vector>
+#include <map>
+#include <exception>
+#include <iostream>
+
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <errno.h>
+
+using namespace ::std;
+
+//------------------------------------------------------------------------
+Binc::MimeDocument::MimeDocument(void) : MimePart()
+{
+ allIsParsed = false;
+ headerIsParsed = false;
+}
+
+//------------------------------------------------------------------------
+Binc::MimeDocument::~MimeDocument(void)
+{
+}
+
+//------------------------------------------------------------------------
+void Binc::MimeDocument::clear(void) const
+{
+ members.clear();
+ h.clear();
+ headerIsParsed = false;
+ allIsParsed = false;
+}
+
+//------------------------------------------------------------------------
+void Binc::MimePart::clear(void) const
+{
+ members.clear();
+ h.clear();
+}
+
+//------------------------------------------------------------------------
+Binc::MimePart::MimePart(void)
+{
+ size = 0;
+ messagerfc822 = false;
+ multipart = false;
+
+ nlines = 0;
+ nbodylines = 0;
+}
+
+//------------------------------------------------------------------------
+Binc::MimePart::~MimePart(void)
+{
+}
+
+//------------------------------------------------------------------------
+Binc::HeaderItem::HeaderItem(void)
+{
+}
+
+//------------------------------------------------------------------------
+Binc::HeaderItem::HeaderItem(const string &key, const string &value)
+{
+ this->key = key;
+ this->value = value;
+}
+
+//------------------------------------------------------------------------
+Binc::Header::Header(void)
+{
+}
+
+//------------------------------------------------------------------------
+Binc::Header::~Header(void)
+{
+}
+
+//------------------------------------------------------------------------
+bool Binc::Header::getFirstHeader(const string &key, HeaderItem &dest) const
+{
+ string k = key;
+ lowercase(k);
+
+ for (vector<HeaderItem>::const_iterator i = content.begin();
+ i != content.end(); ++i) {
+ string tmp = (*i).getKey();
+ lowercase(tmp);
+
+ if (tmp == k) {
+ dest = *i;
+ return true;
+ }
+ }
+ return false;
+}
+
+//------------------------------------------------------------------------
+bool Binc::Header::getAllHeaders(const string &key, vector<HeaderItem> &dest) const
+{
+ string k = key;
+ lowercase(k);
+
+ for (vector<HeaderItem>::const_iterator i = content.begin();
+ i != content.end(); ++i) {
+ string tmp = (*i).getKey();
+ lowercase(tmp);
+ if (tmp == k)
+ dest.push_back(*i);
+ }
+
+ return (dest.size() != 0);
+}
+
+//------------------------------------------------------------------------
+void Binc::Header::clear(void) const
+{
+ content.clear();
+}
+
+//------------------------------------------------------------------------
+void Binc::Header::add(const string &key, const string &value)
+{
+ content.push_back(HeaderItem(key, value));
+}