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