aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2005-04-26 19:27:20 +0000
committerVincent Richard <[email protected]>2005-04-26 19:27:20 +0000
commitb9e637f976c7dcaa2390dd8faa6ed5e43386c704 (patch)
tree91fc458e2402035112d4a6f7b4ef2dd2b5718a77
parentAdded unit tests for date comparison + fixed date comparison (again...). (diff)
downloadvmime-b9e637f976c7dcaa2390dd8faa6ed5e43386c704.tar.gz
vmime-b9e637f976c7dcaa2390dd8faa6ed5e43386c704.zip
Moved generic implementation of send() to 'transport'.
-rw-r--r--SConstruct2
-rw-r--r--src/messaging/smtp/SMTPTransport.cpp72
-rw-r--r--src/messaging/transport.cpp116
-rw-r--r--vmime/messaging/transport.hpp7
4 files changed, 120 insertions, 77 deletions
diff --git a/SConstruct b/SConstruct
index 40bcdb2b..811bd828 100644
--- a/SConstruct
+++ b/SConstruct
@@ -194,7 +194,7 @@ libvmime_messaging_sources = [
'messaging/socket.hpp',
'messaging/store.hpp',
'messaging/timeoutHandler.hpp',
- 'messaging/transport.hpp'
+ 'messaging/transport.cpp', 'messaging/transport.hpp'
]
libvmime_messaging_proto_sources = [
diff --git a/src/messaging/smtp/SMTPTransport.cpp b/src/messaging/smtp/SMTPTransport.cpp
index 6e7ab240..58e000ac 100644
--- a/src/messaging/smtp/SMTPTransport.cpp
+++ b/src/messaging/smtp/SMTPTransport.cpp
@@ -22,7 +22,6 @@
#include "vmime/exception.hpp"
#include "vmime/platformDependant.hpp"
#include "vmime/encoderB64.hpp"
-#include "vmime/message.hpp"
#include "vmime/mailboxList.hpp"
#include "vmime/messaging/authHelper.hpp"
@@ -258,77 +257,6 @@ void SMTPTransport::noop()
}
-static void extractMailboxes
- (mailboxList& recipients, const addressList& list)
-{
- for (int i = 0 ; i < list.getAddressCount() ; ++i)
- {
- mailbox* mbox = dynamic_cast <mailbox*>(list.getAddressAt(i)->clone());
-
- if (mbox != NULL)
- recipients.appendMailbox(mbox);
- }
-}
-
-
-void SMTPTransport::send(vmime::message* msg, progressionListener* progress)
-{
- // Extract expeditor
- mailbox expeditor;
-
- try
- {
- const mailboxField& from = dynamic_cast <const mailboxField&>
- (*msg->getHeader()->findField(fields::FROM));
- expeditor = from.getValue();
- }
- catch (exceptions::no_such_field&)
- {
- throw exceptions::no_expeditor();
- }
-
- // Extract recipients
- mailboxList recipients;
-
- try
- {
- const addressListField& to = dynamic_cast <const addressListField&>
- (*msg->getHeader()->findField(fields::TO));
- extractMailboxes(recipients, to.getValue());
- }
- catch (exceptions::no_such_field&) { }
-
- try
- {
- const addressListField& cc = dynamic_cast <const addressListField&>
- (*msg->getHeader()->findField(fields::CC));
- extractMailboxes(recipients, cc.getValue());
- }
- catch (exceptions::no_such_field&) { }
-
- try
- {
- const addressListField& bcc = dynamic_cast <const addressListField&>
- (*msg->getHeader()->findField(fields::BCC));
- extractMailboxes(recipients, bcc.getValue());
- }
- catch (exceptions::no_such_field&) { }
-
- // Generate the message, "stream" it and delegate the sending
- // to the generic send() function.
- std::ostringstream oss;
- utility::outputStreamAdapter ossAdapter(oss);
-
- msg->generate(ossAdapter);
-
- const string& str(oss.str());
-
- utility::inputStreamStringAdapter isAdapter(str);
-
- send(expeditor, recipients, isAdapter, str.length(), progress);
-}
-
-
void SMTPTransport::send(const mailbox& expeditor, const mailboxList& recipients,
utility::inputStream& is, const utility::stream::size_type size,
progressionListener* progress)
diff --git a/src/messaging/transport.cpp b/src/messaging/transport.cpp
new file mode 100644
index 00000000..1caa7fae
--- /dev/null
+++ b/src/messaging/transport.cpp
@@ -0,0 +1,116 @@
+//
+// VMime library (http://www.vmime.org)
+// Copyright (C) 2002-2005 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 "vmime/messaging/transport.hpp"
+
+#include "vmime/utility/stream.hpp"
+#include "vmime/mailboxList.hpp"
+#include "vmime/message.hpp"
+
+
+namespace vmime {
+namespace messaging {
+
+
+transport::transport(session* sess, const serviceInfos& infos, authenticator* auth)
+ : service(sess, infos, auth)
+{
+}
+
+
+static void extractMailboxes
+ (mailboxList& recipients, const addressList& list)
+{
+ for (int i = 0 ; i < list.getAddressCount() ; ++i)
+ {
+ mailbox* mbox = dynamic_cast <mailbox*>(list.getAddressAt(i)->clone());
+
+ if (mbox != NULL)
+ recipients.appendMailbox(mbox);
+ }
+}
+
+
+void transport::send(vmime::message* msg, progressionListener* progress)
+{
+ // Extract expeditor
+ mailbox expeditor;
+
+ try
+ {
+ const mailboxField& from = dynamic_cast <const mailboxField&>
+ (*msg->getHeader()->findField(fields::FROM));
+ expeditor = from.getValue();
+ }
+ catch (exceptions::no_such_field&)
+ {
+ throw exceptions::no_expeditor();
+ }
+
+ // Extract recipients
+ mailboxList recipients;
+
+ try
+ {
+ const addressListField& to = dynamic_cast <const addressListField&>
+ (*msg->getHeader()->findField(fields::TO));
+ extractMailboxes(recipients, to.getValue());
+ }
+ catch (exceptions::no_such_field&) { }
+
+ try
+ {
+ const addressListField& cc = dynamic_cast <const addressListField&>
+ (*msg->getHeader()->findField(fields::CC));
+ extractMailboxes(recipients, cc.getValue());
+ }
+ catch (exceptions::no_such_field&) { }
+
+ try
+ {
+ const addressListField& bcc = dynamic_cast <const addressListField&>
+ (*msg->getHeader()->findField(fields::BCC));
+ extractMailboxes(recipients, bcc.getValue());
+ }
+ catch (exceptions::no_such_field&) { }
+
+ // Generate the message, "stream" it and delegate the sending
+ // to the generic send() function.
+ std::ostringstream oss;
+ utility::outputStreamAdapter ossAdapter(oss);
+
+ msg->generate(ossAdapter);
+
+ const string& str(oss.str());
+
+ utility::inputStreamStringAdapter isAdapter(str);
+
+ send(expeditor, recipients, isAdapter, str.length(), progress);
+}
+
+
+const transport::Type transport::getType() const
+{
+ return (TYPE_TRANSPORT);
+}
+
+
+} // messaging
+} // vmime
+
diff --git a/vmime/messaging/transport.hpp b/vmime/messaging/transport.hpp
index 7b48883e..8ffe8ad2 100644
--- a/vmime/messaging/transport.hpp
+++ b/vmime/messaging/transport.hpp
@@ -42,8 +42,7 @@ class transport : public service
{
protected:
- transport(session* sess, const serviceInfos& infos, authenticator* auth)
- : service(sess, infos, auth) { }
+ transport(session* sess, const serviceInfos& infos, authenticator* auth);
public:
@@ -52,7 +51,7 @@ public:
* @param msg message to send
* @param progress progression listener, or NULL if not used
*/
- virtual void send(vmime::message* msg, progressionListener* progress = NULL) = 0;
+ virtual void send(vmime::message* msg, progressionListener* progress = NULL);
/** Send a message over this transport service.
*
@@ -65,7 +64,7 @@ public:
virtual void send(const mailbox& expeditor, const mailboxList& recipients, utility::inputStream& is, const utility::stream::size_type size, progressionListener* progress = NULL) = 0;
- const Type getType() const { return (TYPE_TRANSPORT); }
+ const Type getType() const;
};