+void
+modest_tny_msg_get_references (TnyMsg *msg, gchar **message_id, gchar **references, gchar **in_reply_to)
+{
+ TnyList *headers;
+ TnyIterator *iterator;
+ gchar *l_message_id;
+ gchar *l_references;
+ gchar *l_in_reply_to;
+
+ g_return_if_fail (TNY_IS_MSG (msg));
+
+ l_message_id = NULL;
+ l_references = NULL;
+ l_in_reply_to = NULL;
+
+ headers = TNY_LIST (tny_simple_list_new ());
+ tny_mime_part_get_header_pairs (TNY_MIME_PART (msg), headers);
+
+ iterator = tny_list_create_iterator (headers);
+ while (!tny_iterator_is_done (iterator)) {
+ TnyPair *pair;
+ const gchar *name;
+
+ pair = TNY_PAIR (tny_iterator_get_current (iterator));
+ name = tny_pair_get_name (pair);
+ if (!g_ascii_strcasecmp (name, "References")) {
+ if (l_references) g_free (l_references);
+ l_references = g_strdup (tny_pair_get_value (pair));
+ } else if (!g_ascii_strcasecmp (name, "In-Reply-To")) {
+ if (l_in_reply_to) g_free (l_in_reply_to);
+ l_in_reply_to = g_strdup (tny_pair_get_value (pair));
+ } else if (!g_ascii_strcasecmp (name, "Message-ID")) {
+ if (l_message_id) g_free (l_message_id);
+ l_message_id = g_strdup (tny_pair_get_value (pair));
+ }
+
+ g_object_unref (pair);
+ tny_iterator_next (iterator);
+ }
+
+ g_object_unref (iterator);
+ g_object_unref (headers);
+
+ if (message_id) {
+ *message_id = l_message_id;
+ } else {
+ g_free (l_message_id);
+ }
+
+ if (in_reply_to) {
+ *in_reply_to = l_in_reply_to;
+ } else {
+ g_free (l_in_reply_to);
+ }
+
+ if (references) {
+ *references = l_references;
+ } else {
+ g_free (l_references);
+ }
+}
+
+static void
+set_references (TnyMsg *reply_msg, TnyMsg *original_msg)
+{
+ gchar *orig_references, *orig_in_reply_to, *orig_message_id;
+ gchar *references, *in_reply_to;
+
+ modest_tny_msg_get_references (original_msg, &orig_message_id, &orig_references, &orig_in_reply_to);
+
+ references = NULL;
+ in_reply_to = NULL;
+
+ if (orig_message_id)
+ in_reply_to = g_strdup (orig_message_id);
+
+ if (orig_references) {
+ if (orig_message_id)
+ references = g_strconcat (orig_references, "\n ", orig_message_id, NULL);
+ else
+ references = g_strdup (orig_references);
+
+ } else if (orig_in_reply_to) {
+ if (orig_message_id)
+ references = g_strconcat (orig_in_reply_to, "\n ", orig_message_id, NULL);
+ else
+ references = g_strdup (orig_in_reply_to);
+ } else if (orig_message_id) {
+ references = g_strdup (orig_message_id);
+ }
+
+ g_free (orig_references);
+ g_free (orig_in_reply_to);
+ g_free (orig_message_id);
+
+ if (in_reply_to) {
+ tny_mime_part_set_header_pair (TNY_MIME_PART (reply_msg), "In-Reply-To", in_reply_to);
+ }
+ if (references) {
+ tny_mime_part_set_header_pair (TNY_MIME_PART (reply_msg), "References", references);
+ }
+}