1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /*  GMime
3  *  Copyright (C) 2000-2020 Jeffrey Stedfast
4  *
5  *  This library is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU Lesser General Public License
7  *  as published by the Free Software Foundation; either version 2.1
8  *  of the License, or (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  *  Lesser General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Lesser General Public
16  *  License along with this library; if not, write to the Free
17  *  Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
18  *  02110-1301, USA.
19  */
20 
21 
22 #ifndef __INTERNET_ADDRESS_H__
23 #define __INTERNET_ADDRESS_H__
24 
25 #include <glib.h>
26 #include <glib-object.h>
27 
28 #include <gmime/gmime-format-options.h>
29 #include <gmime/gmime-parser-options.h>
30 
31 G_BEGIN_DECLS
32 
33 #define INTERNET_ADDRESS_TYPE                  (internet_address_get_type ())
34 #define INTERNET_ADDRESS(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), internet_address_get_type (), InternetAddress))
35 #define INTERNET_ADDRESS_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), internet_address_get_type (), InternetAddressClass))
36 #define IS_INTERNET_ADDRESS(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), internet_address_get_type ()))
37 #define IS_INTERNET_ADDRESS_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), internet_address_get_type ()))
38 #define INTERNET_ADDRESS_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), internet_address_get_type (), InternetAddressClass))
39 
40 #define INTERNET_ADDRESS_TYPE_GROUP            (internet_address_group_get_type ())
41 #define INTERNET_ADDRESS_GROUP(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), INTERNET_ADDRESS_TYPE_GROUP, InternetAddressGroup))
42 #define INTERNET_ADDRESS_GROUP_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), INTERNET_ADDRESS_TYPE_GROUP, InternetAddressGroupClass))
43 #define INTERNET_ADDRESS_IS_GROUP(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INTERNET_ADDRESS_TYPE_GROUP))
44 #define INTERNET_ADDRESS_IS_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INTERNET_ADDRESS_TYPE_GROUP))
45 
46 #define INTERNET_ADDRESS_TYPE_MAILBOX          (internet_address_mailbox_get_type ())
47 #define INTERNET_ADDRESS_MAILBOX(obj)          (G_TYPE_CHECK_INSTANCE_CAST ((obj), INTERNET_ADDRESS_TYPE_MAILBOX, InternetAddressMailbox))
48 #define INTERNET_ADDRESS_MAILBOX_CLASS(klass)  (G_TYPE_CHECK_CLASS_CAST ((klass), INTERNET_ADDRESS_TYPE_MAILBOX, InternetAddressMailboxClass))
49 #define INTERNET_ADDRESS_IS_MAILBOX(obj)       (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INTERNET_ADDRESS_TYPE_MAILBOX))
50 #define INTERNET_ADDRESS_IS_MAILBOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INTERNET_ADDRESS_TYPE_MAILBOX))
51 
52 #define INTERNET_ADDRESS_LIST_TYPE             (internet_address_list_get_type ())
53 #define INTERNET_ADDRESS_LIST(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), INTERNET_ADDRESS_LIST_TYPE, InternetAddressList))
54 #define INTERNET_ADDRESS_LIST_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), INTERNET_ADDRESS_LIST_TYPE, InternetAddressListClass))
55 #define IS_INTERNET_ADDRESS_LIST(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INTERNET_ADDRESS_LIST_TYPE))
56 #define IS_INTERNET_ADDRESS_LIST_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), INTERNET_ADDRESS_LIST_TYPE))
57 
58 
59 typedef struct _InternetAddress InternetAddress;
60 typedef struct _InternetAddressClass InternetAddressClass;
61 
62 typedef struct _InternetAddressGroup InternetAddressGroup;
63 typedef struct _InternetAddressGroupClass InternetAddressGroupClass;
64 
65 typedef struct _InternetAddressMailbox InternetAddressMailbox;
66 typedef struct _InternetAddressMailboxClass InternetAddressMailboxClass;
67 
68 typedef struct _InternetAddressList InternetAddressList;
69 typedef struct _InternetAddressListClass InternetAddressListClass;
70 
71 
72 /**
73  * InternetAddress:
74  * @parent_object: parent #GObject
75  * @charset: the charset used for encoding the name
76  * @name: display name
77  *
78  * An RFC 2822 Address object.
79  **/
80 struct _InternetAddress {
81 	GObject parent_object;
82 
83 	char *charset;
84 	char *name;
85 
86 	/* < private > */
87 	gpointer changed;
88 };
89 
90 struct _InternetAddressClass {
91 	GObjectClass parent_class;
92 
93 	/* public virtual methods */
94 	void (* to_string) (InternetAddress *ia, GMimeFormatOptions *options, guint32 flags,
95 			    size_t *linelen, GString *str);
96 };
97 
98 
99 GType internet_address_get_type (void);
100 
101 void internet_address_set_name (InternetAddress *ia, const char *name);
102 const char *internet_address_get_name (InternetAddress *ia);
103 
104 void internet_address_set_charset (InternetAddress *ia, const char *charset);
105 const char *internet_address_get_charset (InternetAddress *ia);
106 
107 char *internet_address_to_string (InternetAddress *ia, GMimeFormatOptions *options, gboolean encode);
108 
109 
110 /**
111  * InternetAddressMailbox:
112  * @parent_object: parent #InternetAddress
113  * @idn_addr: the ascii-encoded version of @addr
114  * @addr: the address string
115  * @at: the index of the '@' character
116  *
117  * An RFC 2822 Mailbox address.
118  **/
119 struct _InternetAddressMailbox {
120 	InternetAddress parent_object;
121 
122 	char *idn_addr;
123 	char *addr;
124 	int at;
125 };
126 
127 struct _InternetAddressMailboxClass {
128 	InternetAddressClass parent_class;
129 
130 };
131 
132 
133 GType internet_address_mailbox_get_type (void);
134 
135 InternetAddress *internet_address_mailbox_new (const char *name, const char *addr);
136 
137 void internet_address_mailbox_set_addr (InternetAddressMailbox *mailbox, const char *addr);
138 const char *internet_address_mailbox_get_addr (InternetAddressMailbox *mailbox);
139 const char *internet_address_mailbox_get_idn_addr (InternetAddressMailbox *mailbox);
140 
141 /**
142  * InternetAddressGroup:
143  * @parent_object: parent #InternetAddress
144  * @members: a #InternetAddressList of group members
145  *
146  * An RFC 2822 Group address.
147  **/
148 struct _InternetAddressGroup {
149 	InternetAddress parent_object;
150 
151 	InternetAddressList *members;
152 };
153 
154 struct _InternetAddressGroupClass {
155 	InternetAddressClass parent_class;
156 
157 };
158 
159 
160 GType internet_address_group_get_type (void);
161 
162 InternetAddress *internet_address_group_new (const char *name);
163 
164 void internet_address_group_set_members (InternetAddressGroup *group, InternetAddressList *members);
165 InternetAddressList *internet_address_group_get_members (InternetAddressGroup *group);
166 
167 int internet_address_group_add_member (InternetAddressGroup *group, InternetAddress *member);
168 
169 
170 /**
171  * InternetAddressList:
172  * @parent_object: parent #GObject
173  * @array: The array of #InternetAddress objects.
174  *
175  * A collection of #InternetAddress objects.
176  **/
177 struct _InternetAddressList {
178 	GObject parent_object;
179 
180 	GPtrArray *array;
181 
182 	/* < private > */
183 	gpointer changed;
184 };
185 
186 struct _InternetAddressListClass {
187 	GObjectClass parent_class;
188 
189 };
190 
191 
192 GType internet_address_list_get_type (void);
193 
194 InternetAddressList *internet_address_list_new (void);
195 
196 int internet_address_list_length (InternetAddressList *list);
197 
198 void internet_address_list_clear (InternetAddressList *list);
199 
200 int internet_address_list_add (InternetAddressList *list, InternetAddress *ia);
201 void internet_address_list_prepend (InternetAddressList *list, InternetAddressList *prepend);
202 void internet_address_list_append (InternetAddressList *list, InternetAddressList *append);
203 void internet_address_list_insert (InternetAddressList *list, int index, InternetAddress *ia);
204 gboolean internet_address_list_remove (InternetAddressList *list, InternetAddress *ia);
205 gboolean internet_address_list_remove_at (InternetAddressList *list, int index);
206 
207 gboolean internet_address_list_contains (InternetAddressList *list, InternetAddress *ia);
208 int internet_address_list_index_of (InternetAddressList *list, InternetAddress *ia);
209 
210 InternetAddress *internet_address_list_get_address (InternetAddressList *list, int index);
211 void internet_address_list_set_address (InternetAddressList *list, int index, InternetAddress *ia);
212 
213 char *internet_address_list_to_string (InternetAddressList *list, GMimeFormatOptions *options, gboolean encode);
214 void internet_address_list_encode (InternetAddressList *list, GMimeFormatOptions *options, GString *str);
215 
216 InternetAddressList *internet_address_list_parse (GMimeParserOptions *options, const char *str);
217 
218 G_END_DECLS
219 
220 #endif /* __INTERNET_ADDRESS_H__ */
221