static void internet_address_group_init (InternetAddressGroup *group, InternetAddressGroupClass *klass) { group->members = internet_address_list_new (); g_mime_event_add (group->members->priv, (GMimeEventCallback) members_changed, group); }
gboolean rspamd_task_add_recipient (struct rspamd_task *task, const gchar *rcpt) { InternetAddressList *tmp_addr; if (task->rcpt_envelope == NULL) { task->rcpt_envelope = internet_address_list_new (); #ifdef GMIME24 rspamd_mempool_add_destructor (task->task_pool, (rspamd_mempool_destruct_t) g_object_unref, task->rcpt_envelope); #else rspamd_mempool_add_destructor (task->task_pool, (rspamd_mempool_destruct_t) internet_address_list_destroy, task->rcpt_envelope); #endif } tmp_addr = internet_address_list_parse_string (rcpt); if (tmp_addr) { internet_address_list_append (task->rcpt_envelope, tmp_addr); #ifdef GMIME24 g_object_unref (tmp_addr); #else internet_address_list_destroy (tmp_addr); #endif return TRUE; } return FALSE; }
/** * internet_address_list_parse_string: * @str: a string containing internet addresses * * Construct a list of internet addresses from the given string. * * Returns: (transfer full): a #InternetAddressList or %NULL if the * input string does not contain any addresses. **/ InternetAddressList * internet_address_list_parse_string (const char *str) { InternetAddressList *addrlist; const char *inptr = str; InternetAddress *addr; const char *start; addrlist = internet_address_list_new (); while (inptr && *inptr) { start = inptr; if ((addr = decode_address (&inptr))) { _internet_address_list_add (addrlist, addr); } else { w(g_warning ("Invalid or incomplete address: %.*s", inptr - start, start)); } decode_lwsp (&inptr); if (*inptr == ',') { inptr++; decode_lwsp (&inptr); /* obs-mbox-list and obs-addr-list allow for empty members (commas with nothing between them) */ while (*inptr == ',') { inptr++; decode_lwsp (&inptr); } } else if (*inptr) { w(g_warning ("Parse error at '%s': expected ','", inptr)); /* try skipping to the next address */ if ((inptr = strchr (inptr, ','))) inptr++; } } if (addrlist->array->len == 0) { g_object_unref (addrlist); addrlist = NULL; } return addrlist; }
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)); }