diff options
| author | Vincent Richard <[email protected]> | 2013-12-29 10:02:12 +0100 |
|---|---|---|
| committer | Vincent Richard <[email protected]> | 2013-12-29 10:02:12 +0100 |
| commit | 152c6bed75598a6ca5efb7914701157270155833 (patch) | |
| tree | 8faced1d75a45c819630323da256248415992ed0 /src/address.cpp | |
| parent | Merge branch 'master' of https://github.com/kisli/vmime (diff) | |
| download | vmime-152c6bed75598a6ca5efb7914701157270155833.tar.gz vmime-152c6bed75598a6ca5efb7914701157270155833.zip | |
Merged source and header files in directory structure. Got rid of SConstruct build.
Diffstat (limited to 'src/address.cpp')
| -rw-r--r-- | src/address.cpp | 216 |
1 files changed, 0 insertions, 216 deletions
diff --git a/src/address.cpp b/src/address.cpp deleted file mode 100644 index c6fa74f1..00000000 --- a/src/address.cpp +++ /dev/null @@ -1,216 +0,0 @@ -// -// VMime library (http://www.vmime.org) -// Copyright (C) 2002-2013 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 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/address.hpp" - -#include "vmime/mailbox.hpp" -#include "vmime/mailboxGroup.hpp" - -#include "vmime/parserHelpers.hpp" - - -namespace vmime -{ - - -address::address() -{ -} - - -/* - - RFC #2822: - 3.4. ADDRESS SPECIFICATION - - Addresses occur in several message header fields to indicate senders - and recipients of messages. An address may either be an individual - mailbox, or a group of mailboxes. - -address = mailbox / group - -mailbox = name-addr / addr-spec - -name-addr = [display-name] angle-addr - -angle-addr = [CFWS] "<" addr-spec ">" [CFWS] / obs-angle-addr - -group = display-name ":" [mailbox-list / CFWS] ";" - [CFWS] - -display-name = phrase - -mailbox-list = (mailbox *("," mailbox)) / obs-mbox-list - -address-list = (address *("," address)) / obs-addr-list - -*/ - -shared_ptr <address> address::parseNext - (const parsingContext& ctx, const string& buffer, const size_t position, - const size_t end, size_t* newPosition, bool *isLastAddressOfGroup) -{ - bool escaped = false; - bool quoted = false; - bool quotedRFC2047 = false; - bool inRouteAddr = false; - bool isGroup = false; - bool stop = false; - int commentLevel = 0; - - if (isLastAddressOfGroup) - *isLastAddressOfGroup = false; - - size_t pos = position; - - while (pos < end && parserHelpers::isSpace(buffer[pos])) - ++pos; - - const size_t start = pos; - - while (!stop && pos < end) - { - if (escaped) - { - escaped = false; - } - else - { - switch (buffer[pos]) - { - case '\\': - escaped = true; - break; - case '"': - quoted = !quoted; - break; - case '<': - inRouteAddr = true; - break; - case '>': - inRouteAddr = false; - break; - - case '(': - - ++commentLevel; - break; - - case ')': - - if (commentLevel > 0) - --commentLevel; - - break; - - case '=': - - if (commentLevel == 0 && !quoted && !quotedRFC2047 && pos + 1 < end && buffer[pos + 1] == '?') - { - ++pos; - quotedRFC2047 = true; - } - - break; - - case '?': - - if (commentLevel == 0 && quotedRFC2047 && pos + 1 < end && buffer[pos + 1] == '=') - { - ++pos; - quotedRFC2047 = false; - } - - break; - - default: - { - if (commentLevel == 0 && !quoted && !quotedRFC2047 && !inRouteAddr) - { - switch (buffer[pos]) - { - case ';': - - if (isGroup) - { - if (pos + 1 < end && buffer[pos + 1] == ',') - ++pos; - } - - if (isLastAddressOfGroup) - *isLastAddressOfGroup = true; - - stop = true; - break; - - case ':': - - isGroup = true; - break; - - case ',': - - if (!isGroup) stop = true; - break; - } - } - - break; - } - - } - } - - if (!stop) - ++pos; - } - - if (newPosition) - { - if (pos == end) - *newPosition = end; - else - *newPosition = pos + 1; // ',' or ';' - } - - // Parse extracted address (mailbox or group) - if (pos != start) - { - shared_ptr <address> parsedAddress; - - if (isGroup) - parsedAddress = make_shared <mailboxGroup>(); - else - parsedAddress = make_shared <mailbox>(); - - parsedAddress->parse(ctx, buffer, start, pos, NULL); - parsedAddress->setParsedBounds(start, pos); - - return (parsedAddress); - } - - return null; -} - - -} // vmime |
