+ header_sofar = (char *)g_hash_table_lookup (message->headers, header);
+ /* we treat the Received: header special - we want to concat ALL of
+ * the Received: headers we encounter.
+ * for everything else we return the first instance of a header */
+ if (strcasecmp(header, "received") == 0) {
+ if (header_sofar == NULL) {
+ /* first Received: header we encountered; just add it */
+ g_hash_table_insert (message->headers, header, decoded_value);
+ } else {
+ /* we need to add the header to those we already collected */
+ newhdr = strlen(decoded_value);
+ hdrsofar = strlen(header_sofar);
+ combined_header = xmalloc(hdrsofar + newhdr + 2);
+ strncpy(combined_header,header_sofar,hdrsofar);
+ *(combined_header+hdrsofar) = ' ';
+ strncpy(combined_header+hdrsofar+1,decoded_value,newhdr+1);
+ free (decoded_value);
+ g_hash_table_insert (message->headers, header, combined_header);
+ }
+ } else {
+ if (header_sofar == NULL) {
+ /* Only insert if we don't have a value for this header, yet. */
+ g_hash_table_insert (message->headers, header, decoded_value);
+ } else {
+ free (header);
+ free (decoded_value);
+ decoded_value = header_sofar;
+ }
+ }
+ /* if we found a match we can bail - unless of course we are
+ * collecting all the Received: headers */
+ if (match && !is_received)