From 96077ce7e6125cdba959925d0a2b7b1f8ee54046 Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Fri, 22 Nov 2013 13:32:52 +0100 Subject: Do not throw exception for normal code flow (exceptions::no_such_field). --- src/net/transport.cpp | 68 ++++++++++++++++++++------------------------------- 1 file changed, 26 insertions(+), 42 deletions(-) (limited to 'src/net') diff --git a/src/net/transport.cpp b/src/net/transport.cpp index eae4a024..dd7281d0 100644 --- a/src/net/transport.cpp +++ b/src/net/transport.cpp @@ -125,64 +125,48 @@ static void extractMailboxes void transport::send(shared_ptr msg, utility::progressListener* progress) { // Extract expeditor - mailbox expeditor; + shared_ptr fromMbox = + msg->getHeader()->findFieldValue (fields::FROM); - try - { - const mailbox& mbox = - *msg->getHeader()->findField(fields::FROM)->getValue (); - - expeditor = mbox; - } - catch (exceptions::no_such_field&) - { + if (!fromMbox) throw exceptions::no_expeditor(); - } + + mailbox expeditor = *fromMbox; // Extract sender - mailbox sender; + shared_ptr senderMbox = + msg->getHeader()->findFieldValue (fields::SENDER); - try - { - const mailbox& mbox = - *msg->getHeader()->findField(fields::SENDER)->getValue (); + mailbox sender; - sender = mbox; - } - catch (exceptions::no_such_field&) - { + if (!senderMbox) sender = expeditor; - } + else + sender = *senderMbox; // Extract recipients mailboxList recipients; - try - { - const addressList& to = - *msg->getHeader()->findField(fields::TO)->getValue (); + // -- "To" field + shared_ptr addresses = + msg->getHeader()->findFieldValue (fields::TO); - extractMailboxes(recipients, to); - } - catch (exceptions::no_such_field&) { } + if (addresses) + extractMailboxes(recipients, *addresses); - try - { - const addressList& cc = - *msg->getHeader()->findField(fields::CC)->getValue (); + // -- "Cc" field + addresses = + msg->getHeader()->findFieldValue (fields::CC); - extractMailboxes(recipients, cc); - } - catch (exceptions::no_such_field&) { } + if (addresses) + extractMailboxes(recipients, *addresses); - try - { - const addressList& bcc = - *msg->getHeader()->findField(fields::BCC)->getValue (); + // -- "Bcc" field + addresses = + msg->getHeader()->findFieldValue (fields::BCC); - extractMailboxes(recipients, bcc); - } - catch (exceptions::no_such_field&) { } + if (addresses) + extractMailboxes(recipients, *addresses); // Process message header by removing fields that should be removed // before transmitting the message to MSA, and adding missing fields -- cgit