Example #1
0
// 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;
}
Example #2
0
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;
}
Example #3
0
// 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;
}
Example #4
0
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();
  }
}