aboutsummaryrefslogtreecommitdiff
path: root/vmime-master/src/vmime/bodyPart.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vmime-master/src/vmime/bodyPart.cpp')
-rw-r--r--vmime-master/src/vmime/bodyPart.cpp198
1 files changed, 198 insertions, 0 deletions
diff --git a/vmime-master/src/vmime/bodyPart.cpp b/vmime-master/src/vmime/bodyPart.cpp
new file mode 100644
index 0000000..ff81994
--- /dev/null
+++ b/vmime-master/src/vmime/bodyPart.cpp
@@ -0,0 +1,198 @@
+//
+// VMime library (http://www.vmime.org)
+// Copyright (C) 2002 Vincent Richard <vincent@vmime.org>
+//
+// 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 3 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.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// Linking this library statically or dynamically with other modules is making
+// a combined work based on this library. Thus, the terms and conditions of
+// the GNU General Public License cover the whole combination.
+//
+
+#include "vmime/bodyPart.hpp"
+
+
+namespace vmime {
+
+
+bodyPart::bodyPart()
+ : m_header(make_shared <header>()),
+ m_body(make_shared <body>()),
+ m_parent() {
+
+ m_body->setParentPart(this);
+}
+
+
+void bodyPart::parseImpl(
+ const parsingContext& ctx,
+ const shared_ptr <utility::parserInputStreamAdapter>& parser,
+ const size_t position,
+ const size_t end,
+ size_t* newPosition
+) {
+
+ // Parse the headers
+ size_t pos = position;
+ m_header->parse(ctx, parser, pos, end, &pos);
+
+ // Parse the body contents
+ m_body->parse(ctx, parser, pos, end, NULL);
+
+ setParsedBounds(position, end);
+
+ if (newPosition) {
+ *newPosition = end;
+ }
+}
+
+
+void bodyPart::generateImpl(
+ const generationContext& ctx,
+ utility::outputStream& os,
+ const size_t /* curLinePos */,
+ size_t* newLinePos
+) const {
+
+ m_header->generate(ctx, os);
+
+ os << CRLF;
+
+ m_body->generate(ctx, os);
+
+ if (newLinePos) {
+ *newLinePos = 0;
+ }
+}
+
+
+size_t bodyPart::getGeneratedSize(const generationContext& ctx) {
+
+ return m_header->getGeneratedSize(ctx) + 2 /* CRLF */ + m_body->getGeneratedSize(ctx);
+}
+
+
+shared_ptr <component> bodyPart::clone() const {
+
+ shared_ptr <bodyPart> p = make_shared <bodyPart>();
+
+ p->m_parent = NULL;
+
+ p->m_header->copyFrom(*m_header);
+ p->m_body->copyFrom(*m_body);
+
+ return p;
+}
+
+
+void bodyPart::copyFrom(const component& other) {
+
+ const bodyPart& bp = dynamic_cast <const bodyPart&>(other);
+
+ m_header->copyFrom(*(bp.m_header));
+ m_body->copyFrom(*(bp.m_body));
+}
+
+
+bodyPart& bodyPart::operator=(const bodyPart& other) {
+
+ copyFrom(other);
+ return *this;
+}
+
+
+const shared_ptr <const header> bodyPart::getHeader() const {
+
+ return m_header;
+}
+
+
+shared_ptr <header> bodyPart::getHeader() {
+
+ return m_header;
+}
+
+
+void bodyPart::setHeader(const shared_ptr <header>& h) {
+
+ m_header = h;
+}
+
+
+const shared_ptr <const body> bodyPart::getBody() const {
+
+ return m_body;
+}
+
+
+shared_ptr <body> bodyPart::getBody() {
+
+ return m_body;
+}
+
+
+void bodyPart::setBody(const shared_ptr <body>& b) {
+
+ bodyPart* oldPart = b->m_part;
+
+ m_body = b;
+ m_body->setParentPart(this);
+
+ // A body is associated to one and only one part
+ if (oldPart) {
+ oldPart->setBody(make_shared <body>());
+ }
+}
+
+
+bodyPart* bodyPart::getParentPart() {
+
+ return m_parent;
+}
+
+
+const bodyPart* bodyPart::getParentPart() const {
+
+ return m_parent;
+}
+
+
+shared_ptr <bodyPart> bodyPart::createChildPart() {
+
+ shared_ptr <bodyPart> part = make_shared <bodyPart>();
+ part->m_parent = this;
+
+ return part;
+}
+
+
+void bodyPart::importChildPart(const shared_ptr <bodyPart>& part) {
+
+ part->m_parent = this;
+}
+
+
+const std::vector <shared_ptr <component> > bodyPart::getChildComponents() {
+
+ std::vector <shared_ptr <component> > list;
+
+ list.push_back(m_header);
+ list.push_back(m_body);
+
+ return list;
+}
+
+
+} // vmime