/** * internet_address_list_set_address: * @list: a #InternetAddressList * @index: index of #InternetAddress to set * @ia: a #InternetAddress * * Sets the #InternetAddress at the specified index to @ia. **/ void internet_address_list_set_address (InternetAddressList *list, int index, InternetAddress *ia) { InternetAddress *old; g_return_if_fail (IS_INTERNET_ADDRESS_LIST (list)); g_return_if_fail (IS_INTERNET_ADDRESS (ia)); g_return_if_fail (index >= 0); if ((guint) index > list->array->len) return; if ((guint) index == list->array->len) { internet_address_list_add (list, ia); return; } if ((old = list->array->pdata[index]) == ia) return; g_mime_event_remove (old->priv, (GMimeEventCallback) address_changed, list); g_object_unref (old); g_mime_event_add (ia->priv, (GMimeEventCallback) address_changed, list); list->array->pdata[index] = ia; g_object_ref (ia); g_mime_event_emit (list->priv, NULL); }
/** * internet_address_group_add_member: * @group: a #InternetAddressGroup * @member: a #InternetAddress * * Add a contact to the internet address group. * * Returns: the index of the newly added member. **/ int internet_address_group_add_member (InternetAddressGroup *group, InternetAddress *member) { g_return_val_if_fail (INTERNET_ADDRESS_IS_GROUP (group), -1); g_return_val_if_fail (IS_INTERNET_ADDRESS (member), -1); return internet_address_list_add (group->members, member); }
gboolean rspamd_task_add_sender (struct rspamd_task *task, const gchar *sender) { InternetAddressList *tmp_addr; if (task->from_envelope == NULL) { task->from_envelope = internet_address_list_new (); #ifdef GMIME24 rspamd_mempool_add_destructor (task->task_pool, (rspamd_mempool_destruct_t) g_object_unref, task->from_envelope); #else rspamd_mempool_add_destructor (task->task_pool, (rspamd_mempool_destruct_t) internet_address_list_destroy, task->from_envelope); #endif } if (strcmp (sender, "<>") == 0) { /* Workaround for gmime */ internet_address_list_add (task->from_envelope, internet_address_mailbox_new ("", "")); return TRUE; } else { tmp_addr = internet_address_list_parse_string (sender); if (tmp_addr) { internet_address_list_append (task->from_envelope, tmp_addr); #ifdef GMIME24 g_object_unref (tmp_addr); #else internet_address_list_destroy (tmp_addr); #endif return TRUE; } } return FALSE; }
static void vevent_reply(GObject * button, GtkWidget * box) { LibBalsaVEvent *event = LIBBALSA_VEVENT(g_object_get_data(button, "event")); LibBalsaVCalPartStat pstat = GPOINTER_TO_INT(g_object_get_data(button, "mode")); gchar *rcpt; LibBalsaMessage *message; LibBalsaMessageBody *body; gchar *dummy; gchar **params; GError *error = NULL; LibBalsaMsgCreateResult result; LibBalsaIdentity *ident; g_return_if_fail(event != NULL); rcpt = (gchar *) g_object_get_data(G_OBJECT(event), "ev:sender"); g_return_if_fail(rcpt != NULL); ident = g_object_get_data(G_OBJECT(event), "ev:ident"); g_return_if_fail(ident != NULL); /* make the button box insensitive... */ gtk_widget_set_sensitive(box, FALSE); /* create a message with the header set from the incoming message */ message = libbalsa_message_new(); message->headers->from = internet_address_list_new(); internet_address_list_add(message->headers->from, ident->ia); message->headers->to_list = internet_address_list_parse_string(rcpt); message->headers->date = time(NULL); /* create the message subject */ dummy = g_strdup_printf("%s: %s", event->summary ? event->summary : _("iTIP Calendar Request"), libbalsa_vcal_part_stat_to_str(pstat)); libbalsa_message_set_subject(message, dummy); g_free(dummy); /* the only message part is the calendar object */ body = libbalsa_message_body_new(message); body->buffer = libbalsa_vevent_reply(event, INTERNET_ADDRESS_MAILBOX(ident->ia)->addr, pstat); body->charset = g_strdup("utf-8"); body->content_type = g_strdup("text/calendar"); libbalsa_message_append_part(message, body); /* set the text/calendar parameters */ params = g_new(gchar *, 3); params[0] = g_strdup("method"); params[1] = g_strdup("reply"); params[2] = NULL; message->parameters = g_list_prepend(message->parameters, params); #if ENABLE_ESMTP result = libbalsa_message_send(message, balsa_app.outbox, NULL, balsa_find_sentbox_by_url, ident->smtp_server, GTK_WINDOW(gtk_widget_get_toplevel ((GtkWidget *) button)), FALSE, balsa_app.debug, &error); #else result = libbalsa_message_send(message, balsa_app.outbox, NULL, balsa_find_sentbox_by_url, GTK_WINDOW(gtk_widget_get_toplevel ((GtkWidget *) button)), FALSE, balsa_app.debug, &error); #endif if (result != LIBBALSA_MESSAGE_CREATE_OK) libbalsa_information(LIBBALSA_INFORMATION_ERROR, _("Sending the iTIP calendar reply failed: %s"), error ? error->message : "?"); if (error) g_error_free(error); g_object_unref(G_OBJECT(message)); }
static void test_address_sync (void) { const char *raw_value, *value; InternetAddress *addr, *ia; InternetAddressList *list; GMimeHeaderList *headers; GMimeMessage *message; GMimeObject *object; GMimeHeader *header; message = g_mime_message_new (TRUE); list = g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_TO); object = (GMimeObject *) message; headers = object->headers; testsuite_check ("address header synchronization"); try { /* first, check that the To recipients are empty */ if (list == NULL || internet_address_list_length (list) != 0) throw (exception_new ("unexpected initial internet address list")); /* now check that the initial header value is null */ if ((value = g_mime_object_get_header (object, "To")) != NULL) throw (exception_new ("unexpected initial value")); header = g_mime_header_list_get_header (headers, "To"); if ((raw_value = g_mime_header_get_raw_value (header)) != NULL) throw (exception_new ("unexpected initial raw_value")); /* now try adding an address */ addr = internet_address_mailbox_new ("Tester", "*****@*****.**"); internet_address_list_add (list, addr); if (!(value = g_mime_object_get_header (object, "To"))) throw (exception_new ("address list header unexpectedly null after adding recipient")); if (strcmp ("Tester <*****@*****.**>", value) != 0) throw (exception_new ("unexpected address list header after adding recipient")); header = g_mime_header_list_get_header (headers, "To"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("raw_value is null after adding recipient")); if (strcmp (" Tester <*****@*****.**>\n", raw_value) != 0) throw (exception_new ("unexpected raw_value after adding recipient: %s", raw_value)); /* now let's try changing the address name to make sure signals properly chain up */ internet_address_set_name (addr, "Eva Lucy-Ann Tester"); if (!(value = g_mime_object_get_header (object, "To"))) throw (exception_new ("address list header unexpectedly null after changing name")); if (strcmp ("Eva Lucy-Ann Tester <*****@*****.**>", value) != 0) throw (exception_new ("unexpected address list header after changing name: %s", value)); header = g_mime_header_list_get_header (headers, "To"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("raw_value is null after changing name")); if (strcmp (" Eva Lucy-Ann Tester <*****@*****.**>\n", raw_value) != 0) throw (exception_new ("unexpected raw_value after changing name")); /* now let's try changing the address mailbox... */ internet_address_mailbox_set_addr ((InternetAddressMailbox *) addr, "*****@*****.**"); if (!(value = g_mime_object_get_header (object, "To"))) throw (exception_new ("address list header unexpectedly null after changing mailbox")); if (strcmp ("Eva Lucy-Ann Tester <*****@*****.**>", value) != 0) throw (exception_new ("unexpected address list header after changing mailbox")); header = g_mime_header_list_get_header (headers, "To"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("raw_value is null after changing mailbox")); if (strcmp (" Eva Lucy-Ann Tester <*****@*****.**>\n", raw_value) != 0) throw (exception_new ("unexpected raw_value after changing mailbox")); /* now let's try inserting a group address */ g_object_unref (addr); addr = internet_address_group_new ("Group"); internet_address_list_insert (list, 0, addr); if (!(value = g_mime_object_get_header (object, "To"))) throw (exception_new ("address list header unexpectedly null after inserting group")); if (strcmp ("Group: ;, Eva Lucy-Ann Tester <*****@*****.**>", value) != 0) throw (exception_new ("unexpected address list header after inserting group")); header = g_mime_header_list_get_header (headers, "To"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("raw_value is null after inserting group")); if (strcmp (" Group: ;, Eva Lucy-Ann Tester <*****@*****.**>\n", raw_value) != 0) throw (exception_new ("unexpected raw_value after inserting group")); /* now let's try removing the original recipient */ internet_address_list_remove_at (list, 1); if (!(value = g_mime_object_get_header (object, "To"))) throw (exception_new ("address list header unexpectedly null after removing recipient")); if (strcmp ("Group: ;", value) != 0) throw (exception_new ("unexpected address list header after removing recipient")); header = g_mime_header_list_get_header (headers, "To"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("raw_value is null after removing recipient")); if (strcmp (" Group: ;\n", raw_value) != 0) throw (exception_new ("unexpected raw_value after removing recipient")); /* now let's try adding an address to the group... */ ia = internet_address_mailbox_new ("Tester", "*****@*****.**"); internet_address_list_add (((InternetAddressGroup *) addr)->members, ia); if (!(value = g_mime_object_get_header (object, "To"))) throw (exception_new ("address list header unexpectedly null after adding addr to group")); if (strcmp ("Group: Tester <*****@*****.**>;", value) != 0) throw (exception_new ("unexpected address list header after adding addr to group")); header = g_mime_header_list_get_header (headers, "To"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("raw_value is null after adding addr to group")); if (strcmp (" Group: Tester <*****@*****.**>;\n", raw_value) != 0) throw (exception_new ("unexpected raw_value after adding addr to group")); /* let's try this in reverse... set the header value and make sure InternetAddressList gets updated */ g_mime_object_set_header (object, "To", "[email protected] (=?iso-8859-1?q?Fran=E7ois?= Pons)", NULL); if (internet_address_list_length (list) != 1) throw (exception_new ("unexpected number of addresses in addrlist after setting header value")); ia = internet_address_list_get_address (list, 0); value = internet_address_get_name (ia); if (strcmp ("Fran\xc3\xa7ois Pons", value) != 0) throw (exception_new ("unexpected name after setting header value")); value = internet_address_mailbox_get_addr ((InternetAddressMailbox *) ia); if (strcmp ("*****@*****.**", value) != 0) throw (exception_new ("unexpected addr after setting header value")); header = g_mime_header_list_get_header (headers, "To"); if (!(raw_value = g_mime_header_get_raw_value (header))) throw (exception_new ("raw_value is null after setting header value")); if (strcmp (" =?iso-8859-1?q?Fran=E7ois?= Pons <*****@*****.**>\n", raw_value) != 0) throw (exception_new ("unexpected raw_value after setting header value: %s", raw_value)); testsuite_check_passed (); } catch (ex) { testsuite_check_failed ("address header not synchronized: %s", ex->message); } finally; g_object_unref (message); }