// helper function called by ParseHeadersWithArray nsresult FillResultsArray(const char * aName, const char *aAddress, PRUnichar ** aOutgoingEmailAddress, PRUnichar ** aOutgoingName, PRUnichar ** aOutgoingFullName, nsIMsgHeaderParser *aParser) { NS_ENSURE_ARG(aParser); nsresult rv = NS_OK; char * result = nsnull; if (aAddress) { result = MIME_DecodeMimeHeader(aAddress, NULL, PR_FALSE, PR_TRUE); *aOutgoingEmailAddress = ToNewUnicode(NS_ConvertUTF8toUTF16(result ? result : aAddress)); PR_FREEIF(result); } if (aName) { result = MIME_DecodeMimeHeader(aName, NULL, PR_FALSE, PR_TRUE); *aOutgoingName = ToNewUnicode(NS_ConvertUTF8toUTF16(result ? result : aName)); PR_FREEIF(result); } nsCString fullAddress; nsCString unquotedAddress; rv = aParser->MakeFullAddressString(aName, aAddress, getter_Copies(fullAddress)); if (NS_SUCCEEDED(rv) && !fullAddress.IsEmpty()) { result = MIME_DecodeMimeHeader(fullAddress.get(), nsnull, PR_FALSE, PR_TRUE); if (result) fullAddress.Adopt(result); aParser->UnquotePhraseOrAddr(fullAddress.get(), PR_TRUE, getter_Copies(unquotedAddress)); if (!unquotedAddress.IsEmpty()) fullAddress = unquotedAddress; *aOutgoingFullName = ToNewUnicode(NS_ConvertUTF8toUTF16(fullAddress)); } else *aOutgoingFullName = nsnull; return rv; }
nsresult nsMimeConverter::DecodeMimeHeaderToCharPtr(const char *header, const char *default_charset, bool override_charset, bool eatContinuations, char **decodedString) { NS_ENSURE_ARG_POINTER(decodedString); *decodedString = MIME_DecodeMimeHeader(header, default_charset, override_charset, eatContinuations); return NS_OK; }
// Decode routine (also converts output to unicode) nsresult nsMimeConverter::DecodeMimeHeader(const char *header, const char *default_charset, bool override_charset, bool eatContinuations, nsAString& decodedString) { NS_ENSURE_ARG_POINTER(header); // apply MIME decode. char *decodedCstr = MIME_DecodeMimeHeader(header, default_charset, override_charset, eatContinuations); if (!decodedCstr) { CopyUTF8toUTF16(nsDependentCString(header), decodedString); } else { CopyUTF8toUTF16(nsDependentCString(decodedCstr), decodedString); PR_FREEIF(decodedCstr); } return NS_OK; }
void MimeHeaders_convert_header_value(MimeDisplayOptions *opt, nsCString &value, bool convert_charset_only) { char *converted; if (value.IsEmpty()) return; if (convert_charset_only) { nsCAutoString output; ConvertRawBytesToUTF8(value, opt->default_charset, output); value.Assign(output); return; } if (opt && opt->rfc1522_conversion_p) { converted = MIME_DecodeMimeHeader(value.get(), opt->default_charset, opt->override_charset, true); if (converted) { value.Adopt(converted); } } else { // This behavior, though highly unusual, was carefully preserved // from the previous implementation. It may be that this is dead // code, in which case opt->rfc1522_conversion_p is no longer // needed. value.Truncate(); } }