1 /* spmfilter - mail filtering framework
2 * Copyright (C) 2009-2012 Axel Steiner and SpaceNet AG
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 3 of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #include <assert.h>
19 #include <cmime.h>
20
21 #include "smf_email_address.h"
22 #include "smf_core.h"
23
24 #define THIS_MODULE "email_address"
25
smf_email_address_new(void)26 SMFEmailAddress_T *smf_email_address_new(void) {
27 CMimeAddress_T *ea = cmime_address_new();
28
29 return (SMFEmailAddress_T *)ea;
30 }
31
smf_email_address_free(SMFEmailAddress_T * ea)32 void smf_email_address_free(SMFEmailAddress_T *ea) {
33 assert(ea);
34 cmime_address_free((CMimeAddress_T *)ea);
35 }
36
smf_email_address_parse_string(const char * addr)37 SMFEmailAddress_T *smf_email_address_parse_string(const char *addr) {
38 CMimeAddress_T *a = NULL;
39
40 assert(addr);
41
42 a = cmime_address_parse_string(addr);
43 return (SMFEmailAddress_T *)a;
44 }
45
smf_email_address_to_string(SMFEmailAddress_T * ea)46 char *smf_email_address_to_string(SMFEmailAddress_T *ea) {
47 assert(ea);
48 return (char *)cmime_address_to_string((CMimeAddress_T *)ea);
49 }
50
smf_email_address_set_type(SMFEmailAddress_T * ea,SMFEmailAddressType_T t)51 void smf_email_address_set_type(SMFEmailAddress_T *ea, SMFEmailAddressType_T t) {
52 assert(ea);
53 cmime_address_set_type((CMimeAddress_T *)ea,(CMimeAddressType_T )t);
54 }
55
smf_email_address_get_type(SMFEmailAddress_T * ea)56 SMFEmailAddressType_T smf_email_address_get_type(SMFEmailAddress_T *ea) {
57 assert(ea);
58
59 return (SMFEmailAddressType_T)cmime_address_get_type((CMimeAddress_T *)ea);
60 }
61
smf_email_address_set_name(SMFEmailAddress_T * ea,const char * name)62 void smf_email_address_set_name(SMFEmailAddress_T *ea, const char *name) {
63 assert(ea);
64 assert(name);
65
66 cmime_address_set_name((CMimeAddress_T *)ea,name);
67 }
68
smf_email_address_get_name(SMFEmailAddress_T * ea)69 char *smf_email_address_get_name(SMFEmailAddress_T *ea) {
70 assert(ea);
71
72 return (char *)cmime_address_get_name((CMimeAddress_T *)ea);
73 }
74
smf_email_address_set_email(SMFEmailAddress_T * ea,const char * email)75 void smf_email_address_set_email(SMFEmailAddress_T *ea, const char *email) {
76 assert(ea);
77 assert(email);
78
79 cmime_address_set_email((CMimeAddress_T *)ea,email);
80 }
81
smf_email_address_get_email(SMFEmailAddress_T * ea)82 char *smf_email_address_get_email(SMFEmailAddress_T *ea) {
83 assert(ea);
84
85 return (char *)cmime_address_get_email((CMimeAddress_T *)ea);
86 }
87
smf_email_address_is_empty(SMFEmailAddress_T * ea)88 int smf_email_address_is_empty(SMFEmailAddress_T *ea) {
89 char *p;
90
91 assert(ea != NULL);
92
93 p = strchr(ea->email, '<');
94 if (p != NULL)
95 p++;
96 else
97 p = ea->email;
98
99 while (*p != '>' && *p != '\0') {
100 if (!isspace(*p))
101 return 0;
102 p++;
103 }
104
105 return 1;
106 }
107
smf_email_address_get_simplified(SMFEmailAddress_T * ea)108 SMFEmailAddress_T *smf_email_address_get_simplified(SMFEmailAddress_T *ea) {
109 SMFEmailAddress_T *result;
110 char *email;
111
112 assert(ea != NULL);
113 assert(ea->email != NULL);
114
115 result = smf_email_address_parse_string(ea->email);
116 email = smf_email_address_get_email(result);
117
118 if (*email == '<') { /* angle-addr format */
119 char *end;
120
121 email = strdup(email + 1);
122 if ((end = strchr(email, '>')) != NULL)
123 *end = '\0';
124 } else {
125 email = strdup(email);
126 }
127
128 smf_core_strstrip(email);
129 smf_email_address_set_email(result, email);
130 free(email);
131
132 return result;
133 }
134
135