diff options
author | 2013-04-17 18:41:16 -0700 | |
---|---|---|
committer | 2013-04-17 18:41:16 -0700 | |
commit | 917836062499bb3460d521d4db0d1d964ae16c2e (patch) | |
tree | 173d932430d7d275c49b14619944031ae1f7badb /src/core/abstract/MCAddress.cc | |
parent | d9d06287ab5a6690ab978f58418b0a698883fb52 (diff) | |
parent | cc8e20cbd00a772228525709944bac8f470fb293 (diff) |
Merge pull request #26 from MailCore/Addresses-Strings-Methods
Addresses strings methods
Diffstat (limited to 'src/core/abstract/MCAddress.cc')
-rw-r--r-- | src/core/abstract/MCAddress.cc | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/core/abstract/MCAddress.cc b/src/core/abstract/MCAddress.cc index 3afd07b9..4f6fc303 100644 --- a/src/core/abstract/MCAddress.cc +++ b/src/core/abstract/MCAddress.cc @@ -5,6 +5,9 @@ using namespace mailcore; +static Array * lep_address_list_from_lep_mailbox(struct mailimf_mailbox_list * mb_list, int encoded); +static Array * lep_address_list_from_lep_addr(struct mailimf_address_list * addr_list, int encoded); + Address::Address() { init(); @@ -161,6 +164,48 @@ Address * Address::addressWithNonEncodedRFC822String(String * nonEncodedRFC822St return result; } +Array * Address::addressesWithRFC822String(String * string) +{ + const char * utf8String; + size_t currentIndex; + struct mailimf_address_list * addr_list; + Array * result; + int r; + + utf8String = string->UTF8Characters(); + currentIndex = 0; + + r = mailimf_address_list_parse(utf8String, strlen(utf8String), ¤tIndex, &addr_list); + if (r != MAILIMF_NO_ERROR) + return NULL; + + result = lep_address_list_from_lep_addr(addr_list, 1); + mailimf_address_list_free(addr_list); + + return result; +} + +Array * Address::addressesWithNonEncodedRFC822String(String * string) +{ + const char * utf8String; + size_t currentIndex; + struct mailimf_address_list * addr_list; + Array * result; + int r; + + utf8String = string->UTF8Characters(); + currentIndex = 0; + + r = mailimf_address_list_parse(utf8String, strlen(utf8String), ¤tIndex, &addr_list); + if (r != MAILIMF_NO_ERROR) + return NULL; + + result = lep_address_list_from_lep_addr(addr_list, 0); + mailimf_address_list_free(addr_list); + + return result; +} + String * Address::description() { String * result = String::string(); @@ -356,3 +401,70 @@ String * Address::nonEncodedRFC822String() return result; } + +static Array * lep_address_list_from_lep_mailbox(struct mailimf_mailbox_list * mb_list, int encoded) +{ + Array * result; + clistiter * cur; + + result = new Array(); + for(cur = clist_begin(mb_list->mb_list) ; cur != NULL ; cur = clist_next(cur)) { + struct mailimf_mailbox * mb; + Address * address; + + mb = (mailimf_mailbox *) clist_content(cur); + if (encoded) { + address = Address::addressWithIMFMailbox(mb); + } + else { + address = Address::addressWithNonEncodedIMFMailbox(mb); + } + result->addObject(address); + } + + return result; +} + +static Array * lep_address_list_from_lep_addr(struct mailimf_address_list * addr_list, int encoded) +{ + Array * result; + clistiter * cur; + + result = new Array(); + + for(cur = clist_begin(addr_list->ad_list) ; cur != NULL ; + cur = clist_next(cur)) { + struct mailimf_address * addr; + + addr = (mailimf_address *) clist_content(cur); + switch (addr->ad_type) { + case MAILIMF_ADDRESS_MAILBOX: + { + Address * address; + + if (encoded) { + address = Address::addressWithIMFMailbox(addr->ad_data.ad_mailbox); + } + else { + address = Address::addressWithNonEncodedIMFMailbox(addr->ad_data.ad_mailbox); + } + result->addObject(address); + break; + } + + case MAILIMF_ADDRESS_GROUP: + { + if (addr->ad_data.ad_group->grp_mb_list != NULL) { + Array * subArray; + + subArray = lep_address_list_from_lep_mailbox(addr->ad_data.ad_group->grp_mb_list, encoded); + result->addObjectsFromArray(subArray); + } + break; + } + } + } + + return result; +} + |