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; }
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; }