+ 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
+remove_line_breaks (gchar *str)
+{
+ gchar *needle = g_strrstr (str, "\r\n");
+ if (needle)
+ *needle = '\0';
+}
+
+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) {
+ remove_line_breaks (in_reply_to);
+ tny_mime_part_set_header_pair (TNY_MIME_PART (reply_msg), "In-Reply-To", in_reply_to);
+ g_free (in_reply_to);
+ }
+ if (references) {
+ remove_line_breaks (references);
+ tny_mime_part_set_header_pair (TNY_MIME_PART (reply_msg), "References", references);
+ g_free (references);
+ }
+}
+
+TnyMsg*