diff options
author | Jeffrey Stedfast <jestedfa@microsoft.com> | 2018-11-25 09:29:59 -0500 |
---|---|---|
committer | Jeffrey Stedfast <jestedfa@microsoft.com> | 2018-11-25 09:29:59 -0500 |
commit | 66686d0ceff05853f4b3215852e9956ea312b51e (patch) | |
tree | f219899e0485e07a5e0ab4260eb6663b7f1f4906 | |
parent | 3c9b83d41220522e2937a885a16cea9e47bd6de0 (diff) | |
download | gmime-66686d0ceff05853f4b3215852e9956ea312b51e.tar.gz |
Added API's to get/set the Resent-Date and Resent-Message-Id headers
-rw-r--r-- | gmime/gmime-message.c | 172 | ||||
-rw-r--r-- | gmime/gmime-message.h | 11 |
2 files changed, 156 insertions, 27 deletions
diff --git a/gmime/gmime-message.c b/gmime/gmime-message.c index 2dac6381..1dc117ee 100644 --- a/gmime/gmime-message.c +++ b/gmime/gmime-message.c @@ -205,6 +205,8 @@ g_mime_message_init (GMimeMessage *message, GMimeMessageClass *klass) message->addrlists = g_new (InternetAddressList *, N_ADDRESS_TYPES); ((GMimeObject *) message)->ensure_newline = TRUE; + message->resent_message_id = NULL; + message->resent_date = NULL; message->message_id = NULL; message->mime_part = NULL; message->subject = NULL; @@ -230,10 +232,14 @@ g_mime_message_finalize (GObject *object) } g_free (message->addrlists); + g_free (message->resent_message_id); g_free (message->message_id); g_free (message->subject); g_free (message->marker); + if (message->resent_date) + g_date_time_unref (message->resent_date); + if (message->date) g_date_time_unref (message->date); @@ -262,6 +268,8 @@ enum { HEADER_RESENT_TO, HEADER_RESENT_CC, HEADER_RESENT_BCC, + HEADER_RESENT_DATE, + HEADER_RESENT_MESSAGE_ID, HEADER_UNKNOWN }; @@ -282,6 +290,8 @@ static const char *message_headers[] = { "Resent-To", "Resent-Cc", "Resent-Bcc", + "Resent-Date", + "Resent-Message-Id" }; static void @@ -352,6 +362,30 @@ process_header (GMimeObject *object, GMimeHeader *header) case HEADER_BCC: message_update_addresses (message, options, GMIME_ADDRESS_TYPE_BCC); break; + case HEADER_SUBJECT: + g_free (message->subject); + + if ((value = g_mime_header_get_value (header))) + message->subject = g_strdup (value); + else + message->subject = NULL; + break; + case HEADER_DATE: + if ((value = g_mime_header_get_value (header))) { + if (message->date) + g_date_time_unref (message->date); + + message->date = g_mime_utils_header_decode_date (value); + } + break; + case HEADER_MESSAGE_ID: + g_free (message->message_id); + + if ((value = g_mime_header_get_value (header))) + message->message_id = g_mime_utils_decode_message_id (value); + else + message->message_id = NULL; + break; case HEADER_RESENT_SENDER: message_update_addresses (message, options, GMIME_ADDRESS_TYPE_RESENT_SENDER); break; @@ -370,29 +404,21 @@ process_header (GMimeObject *object, GMimeHeader *header) case HEADER_RESENT_BCC: message_update_addresses (message, options, GMIME_ADDRESS_TYPE_RESENT_BCC); break; - case HEADER_SUBJECT: - g_free (message->subject); - - if ((value = g_mime_header_get_value (header))) - message->subject = g_strdup (value); - else - message->subject = NULL; - break; - case HEADER_DATE: + case HEADER_RESENT_DATE: if ((value = g_mime_header_get_value (header))) { - if (message->date) - g_date_time_unref (message->date); + if (message->resent_date) + g_date_time_unref (message->resent_date); - message->date = g_mime_utils_header_decode_date (value); + message->resent_date = g_mime_utils_header_decode_date (value); } break; - case HEADER_MESSAGE_ID: - g_free (message->message_id); + case HEADER_RESENT_MESSAGE_ID: + g_free (message->resent_message_id); if ((value = g_mime_header_get_value (header))) - message->message_id = g_mime_utils_decode_message_id (value); + message->resent_message_id = g_mime_utils_decode_message_id (value); else - message->message_id = NULL; + message->resent_message_id = NULL; break; } } @@ -447,6 +473,20 @@ message_header_removed (GMimeObject *object, GMimeHeader *header) case HEADER_BCC: message_update_addresses (message, options, GMIME_ADDRESS_TYPE_BCC); break; + case HEADER_SUBJECT: + g_free (message->subject); + message->subject = NULL; + break; + case HEADER_DATE: + if (message->date) { + g_date_time_unref (message->date); + message->date = NULL; + } + break; + case HEADER_MESSAGE_ID: + g_free (message->message_id); + message->message_id = NULL; + break; case HEADER_RESENT_SENDER: message_update_addresses (message, options, GMIME_ADDRESS_TYPE_RESENT_SENDER); break; @@ -465,19 +505,15 @@ message_header_removed (GMimeObject *object, GMimeHeader *header) case HEADER_RESENT_BCC: message_update_addresses (message, options, GMIME_ADDRESS_TYPE_RESENT_BCC); break; - case HEADER_SUBJECT: - g_free (message->subject); - message->subject = NULL; - break; - case HEADER_DATE: - if (message->date) { - g_date_time_unref (message->date); - message->date = NULL; + case HEADER_RESENT_DATE: + if (message->resent_date) { + g_date_time_unref (message->resent_date); + message->resent_date = NULL; } break; - case HEADER_MESSAGE_ID: - g_free (message->message_id); - message->message_id = NULL; + case HEADER_RESENT_MESSAGE_ID: + g_free (message->resent_message_id); + message->resent_message_id = NULL; break; } @@ -496,11 +532,18 @@ message_headers_cleared (GMimeObject *object) unblock_changed_event (message, i); } + g_free (message->resent_message_id); + message->resent_message_id = NULL; g_free (message->message_id); message->message_id = NULL; g_free (message->subject); message->subject = NULL; + if (message->resent_date) { + g_date_time_unref (message->resent_date); + message->resent_date = NULL; + } + if (message->date) { g_date_time_unref (message->date); message->date = NULL; @@ -1170,6 +1213,43 @@ g_mime_message_get_date (GMimeMessage *message) /** + * g_mime_message_set_resent_date: + * @message: A #GMimeMessage + * @date: a date to be used in the Resent-Date header + * + * Sets the Resent-Date header on a MIME Message. + **/ +void +g_mime_message_set_resent_date (GMimeMessage *message, GDateTime *date) +{ + char *str; + + g_return_if_fail (GMIME_IS_MESSAGE (message)); + + str = g_mime_utils_header_format_date (date); + g_mime_object_set_header ((GMimeObject *) message, "Resent-Date", str, NULL); + g_free (str); +} + + +/** + * g_mime_message_get_resent_date: + * @message: A #GMimeMessage + * + * Gets the parsed date and time value from the Resent-Date header. + * + * Returns: a #GDateTime on success or %NULL if the date could not be parsed. + **/ +GDateTime * +g_mime_message_get_resent_date (GMimeMessage *message) +{ + g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL); + + return message->resent_date; +} + + +/** * g_mime_message_set_message_id: * @message: A #GMimeMessage * @message_id: message-id (addr-spec portion) @@ -1208,6 +1288,44 @@ g_mime_message_get_message_id (GMimeMessage *message) /** + * g_mime_message_set_resent_message_id: + * @message: A #GMimeMessage + * @message_id: message-id (addr-spec portion) + * + * Set the Resent-Message-Id on a message. + **/ +void +g_mime_message_set_resent_message_id (GMimeMessage *message, const char *message_id) +{ + char *msgid; + + g_return_if_fail (GMIME_IS_MESSAGE (message)); + g_return_if_fail (message_id != NULL); + + msgid = g_strdup_printf ("<%s>", message_id); + g_mime_object_set_header ((GMimeObject *) message, "Resent-Message-Id", msgid, NULL); + g_free (msgid); +} + + +/** + * g_mime_message_get_resent_message_id: + * @message: A #GMimeMessage + * + * Gets the Resent-Message-Id header of @message. + * + * Returns: the Resent-Message-Id of a message. + **/ +const char * +g_mime_message_get_resent_message_id (GMimeMessage *message) +{ + g_return_val_if_fail (GMIME_IS_MESSAGE (message), NULL); + + return message->resent_message_id; +} + + +/** * g_mime_message_get_mime_part: * @message: A #GMimeMessage * diff --git a/gmime/gmime-message.h b/gmime/gmime-message.h index fba233f1..6c8fa657 100644 --- a/gmime/gmime-message.h +++ b/gmime/gmime-message.h @@ -87,6 +87,8 @@ typedef enum _GMimeAddressType { * @message_id: Message-Id string * @date: Date value * @subject: Subject string + * @resent_message_id: The Resent-Message-Id string + * @resent_date: The Resent-Date value * * A MIME Message object. **/ @@ -99,6 +101,9 @@ struct _GMimeMessage { GDateTime *date; char *subject; + char *resent_message_id; + GDateTime *resent_date; + /* <private> */ char *marker; }; @@ -137,9 +142,15 @@ const char *g_mime_message_get_subject (GMimeMessage *message); void g_mime_message_set_date (GMimeMessage *message, GDateTime *date); GDateTime *g_mime_message_get_date (GMimeMessage *message); +void g_mime_message_set_resent_date (GMimeMessage *message, GDateTime *date); +GDateTime *g_mime_message_get_resent_date (GMimeMessage *message); + void g_mime_message_set_message_id (GMimeMessage *message, const char *message_id); const char *g_mime_message_get_message_id (GMimeMessage *message); +void g_mime_message_set_resent_message_id (GMimeMessage *message, const char *message_id); +const char *g_mime_message_get_resent_message_id (GMimeMessage *message); + GMimeObject *g_mime_message_get_mime_part (GMimeMessage *message); void g_mime_message_set_mime_part (GMimeMessage *message, GMimeObject *mime_part); |