Example #1
0
nsresult
nsMimeConverter::QPEncoderInit(nsresult (*output_fn) (const char *buf,
                               PRInt32 size, void *closure), void *closure,
                               MimeEncoderData **returnEncoderData)
{
  NS_ENSURE_ARG_POINTER(returnEncoderData);

  MimeEncoderData *ptr;

  ptr = MimeQPEncoderInit(output_fn, closure);
  NS_ENSURE_TRUE(ptr, NS_ERROR_OUT_OF_MEMORY);

  *returnEncoderData = ptr;
  return NS_OK;
}
Example #2
0
NS_IMETHODIMP
nsEnigMsgCompose::OnStartRequest(nsIRequest *aRequest,
                                   nsISupports *aContext)
{
  nsresult rv;
  DEBUG_LOG(("nsEnigMsgCompose::OnStartRequest:\n"));

  nsCAutoString contentType;
  rv = mMimeListener->GetContentType(contentType);
  if (NS_FAILED(rv)) return rv;

  nsCAutoString contentEncoding;
  rv = mMimeListener->GetContentEncoding(contentEncoding);
  if (NS_FAILED(rv)) return rv;

  nsCAutoString headers;
  rv = mMimeListener->GetHeaders(headers);
  if (NS_FAILED(rv)) return rv;

  if (headers.IsEmpty())
    return NS_ERROR_FAILURE;

  DEBUG_LOG(("nsEnigMsgCompose::OnStartRequest: Content-Type: %s\n", headers.get()));

  EMBool encapsulate = PR_FALSE;
  if (mSendFlags & nsIEnigmail::SEND_PGP_MIME) {
    // RFC2015 crypto encapsulation
    encapsulate = PR_TRUE;

  } else if (!contentType.Equals("text/plain", CaseInsensitiveCompare)) {
    // Force RFC2015 crypto encapsulation for non-plaintext messages
    encapsulate = PR_TRUE;
    mSendFlags |= nsIEnigmail::SEND_PGP_MIME;
  }

  rv = Init();
  if (NS_FAILED(rv)) return rv;

  if (!mPipeTrans) return NS_OK;

  if (encapsulate) {
    // RFC2015 crypto encapsulation for headers

    // Send headers to crypto processor
    rv = WriteToPipe(headers.get(), headers.Length());
    if (NS_FAILED(rv)) return rv;

    if (mMultipartSigned) {
      rv = WriteSignedHeaders1( contentEncoding.Equals("8bit", CaseInsensitiveCompare) );
      if (NS_FAILED(rv)) return rv;

      // Copy original headers to output
      rv = WriteOut(headers.get(), headers.Length());
      if (NS_FAILED(rv)) return rv;

    } else {
      rv = WriteEncryptedHeaders();
      if (NS_FAILED(rv)) return rv;
    }

  } else {
    // No crypto encapsulation for headers
    DEBUG_LOG(("nsEnigMsgCompose::OnStartRequest: NO CRYPTO ENCAPSULATION\n"));

    rv = WriteOut(headers.get(), headers.Length());
    if (NS_FAILED(rv)) return rv;

    if (contentEncoding.Equals("base64", CaseInsensitiveCompare)) {

      mEncoderData = MimeB64EncoderInit(EnigMsgCompose_write, (void*) mWriter);

    } else if (contentEncoding.Equals("quoted-printable", CaseInsensitiveCompare)) {

      mEncoderData = MimeQPEncoderInit(EnigMsgCompose_write, (void*) mWriter);
    }
  }

  return NS_OK;
}