summaryrefslogtreecommitdiff
path: root/libmu_cpp/message.cc
diff options
context:
space:
mode:
authorWojciech Polak <polak@gnu.org>2009-01-03 17:53:03 +0100
committerWojciech Polak <polak@gnu.org>2009-01-03 17:53:03 +0100
commitf5191b732ac0e4dcc782cb3cc8dfc700a7e4c72a (patch)
tree3a5938e9b205a3cbb3cc7810272e390630ee95fa /libmu_cpp/message.cc
parent74f736ce0bb4de4820324e7b08aaf79d494f79d8 (diff)
downloadmailutils-f5191b732ac0e4dcc782cb3cc8dfc700a7e4c72a.tar.gz
mailutils-f5191b732ac0e4dcc782cb3cc8dfc700a7e4c72a.tar.bz2
libmu_cpp refactoring and improvements.
* examples/cpp/mimetest.cc, include/mailutils/cpp/attribute.h, include/mailutils/cpp/body.h, include/mailutils/cpp/mime.h, include/mailutils/cpp/mutil.h, include/mailutils/cpp/registrar.h, libmu_cpp/attribute.cc, libmu_cpp/body.cc, libmu_cpp/mime.cc, libmu_cpp/mutil.cc, libmu_cpp/registrar.cc: New files.
Diffstat (limited to 'libmu_cpp/message.cc')
-rw-r--r--libmu_cpp/message.cc159
1 files changed, 155 insertions, 4 deletions
diff --git a/libmu_cpp/message.cc b/libmu_cpp/message.cc
index e7112d1f4..5d338022c 100644
--- a/libmu_cpp/message.cc
+++ b/libmu_cpp/message.cc
@@ -1,6 +1,6 @@
/*
GNU Mailutils -- a suite of utilities for electronic mail
- Copyright (C) 2004, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2006, 2007, 2009 Free Software Foundation, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -20,6 +20,8 @@
#include <mailutils/cpp/message.h>
#include <mailutils/cpp/header.h>
+#include <mailutils/cpp/body.h>
+#include <mailutils/cpp/stream.h>
#include <mailutils/cpp/error.h>
#include <errno.h>
@@ -30,7 +32,12 @@ using namespace mailutils;
//
Message :: Message ()
-{
+{
+ int status = mu_message_create (&msg, this);
+ if (status)
+ throw Exception ("Message::Message", status);
+
+ this->owner = true;
}
Message :: Message (const mu_message_t msg)
@@ -39,17 +46,161 @@ Message :: Message (const mu_message_t msg)
throw Exception ("Message::Message", EINVAL);
this->msg = msg;
+ this->owner = false;
+}
+
+Message&
+Message :: operator = (const Message& m)
+{
+ if (this != &m)
+ {
+ if (this->owner)
+ mu_message_destroy (&this->msg, this);
+
+ int status = mu_message_create_copy (&this->msg, m.msg);
+ if (status)
+ throw Exception ("Message::operator=", status);
+
+ this->owner = true;
+ }
+ return *this;
+}
+
+Message :: ~Message ()
+{
+ if (this->owner)
+ mu_message_destroy (&msg, this);
}
Header&
-Message :: getHeader ()
+Message :: get_header ()
{
mu_header_t c_hdr;
int status = mu_message_get_header (msg, &c_hdr);
if (status)
- throw Exception ("Message::getHeader", status);
+ throw Exception ("Message::get_header", status);
return *new Header (c_hdr);
}
+Body&
+Message :: get_body ()
+{
+ mu_body_t c_body;
+
+ int status = mu_message_get_body (msg, &c_body);
+ if (status)
+ throw Exception ("Message::get_body", status);
+
+ return *new Body (c_body);
+}
+
+Stream&
+Message :: get_stream ()
+{
+ mu_stream_t c_stream;
+
+ int status = mu_message_get_stream (msg, &c_stream);
+ if (status)
+ throw Exception ("Message::get_stream", status);
+
+ return *new Stream (c_stream);
+}
+
+bool
+Message :: is_multipart ()
+{
+ int pmulti;
+ int status = mu_message_is_multipart (msg, &pmulti);
+ if (status)
+ throw Exception ("Message::is_multipart", status);
+ return (bool) pmulti;
+}
+
+size_t
+Message :: size ()
+{
+ size_t c_size;
+ int status = mu_message_size (msg, &c_size);
+ if (status)
+ throw Exception ("Message::size", status);
+ return c_size;
+}
+
+size_t
+Message :: lines ()
+{
+ size_t c_lines;
+ int status = mu_message_lines (msg, &c_lines);
+ if (status)
+ throw Exception ("Message::lines", status);
+ return c_lines;
+}
+
+size_t
+Message :: get_num_parts ()
+{
+ size_t c_parts;
+ int status = mu_message_get_num_parts (msg, &c_parts);
+ if (status)
+ throw Exception ("Message::get_num_parts", status);
+ return c_parts;
+}
+
+Message&
+Message :: get_part (const size_t npart)
+{
+ mu_message_t c_part;
+
+ int status = mu_message_get_part (msg, npart, &c_part);
+ if (status)
+ throw Exception ("Message::get_part", status);
+
+ return *new Message (c_part);
+}
+
+void
+Message :: save_attachment ()
+{
+ int status = mu_message_save_attachment (msg, NULL, NULL);
+ if (status)
+ throw Exception ("Message::save_attachment", status);
+}
+
+void
+Message :: save_attachment (const std::string& filename)
+{
+ int status = mu_message_save_attachment (msg, filename.c_str (), NULL);
+ if (status)
+ throw Exception ("Message::save_attachment", status);
+}
+
+Message&
+Message :: unencapsulate ()
+{
+ mu_message_t c_msg;
+
+ int status = mu_message_unencapsulate (msg, &c_msg, NULL);
+ if (status)
+ throw Exception ("Message::unencapsulate", status);
+
+ return *new Message (c_msg);
+}
+
+std::string
+Message :: get_attachment_name ()
+{
+ char *c_name;
+ std::string name;
+
+ int status = mu_message_aget_attachment_name (msg, &c_name);
+ if (status)
+ throw Exception ("Message::get_attachment_name", status);
+ if (c_name) {
+ name = c_name;
+ free (c_name);
+ }
+ return name;
+}
+

Return to:

Send suggestions and report system problems to the System administrator.