/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef _MIMEMOZ_H_ #define _MIMEMOZ_H_ #include "nsStreamConverter.h" #include "nsIMimeEmitter.h" #include "nsIURI.h" #include "mozITXTToHTMLConv.h" #include "modmimee.h" #include "nsMsgAttachmentData.h" // SHERRY - Need to get these out of here eventually #ifdef XP_UNIX # undef Bool #endif #include "mimei.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "nsIPrefBranch.h" typedef struct _nsMIMESession nsMIMESession; /* stream functions */ typedef unsigned int (*MKSessionWriteReadyFunc)(nsMIMESession* stream); #define MAX_WRITE_READY \ (((unsigned)(~0) << 1) >> 1) /* must be <= than MAXINT!!!!! */ typedef int (*MKSessionWriteFunc)(nsMIMESession* stream, const char* str, int32_t len); typedef void (*MKSessionCompleteFunc)(nsMIMESession* stream); typedef void (*MKSessionAbortFunc)(nsMIMESession* stream, int status); /* streamclass function */ struct _nsMIMESession { const char* name; /* Just for diagnostics */ void* window_id; /* used for progress messages, etc. */ void* data_object; /* a pointer to whatever * structure you wish to have * passed to the routines below * during writes, etc... * * this data object should hold * the document, document * structure or a pointer to the * document. */ MKSessionWriteReadyFunc is_write_ready; /* checks to see if the stream is * ready for writing. Returns 0 if * not ready or the number of bytes * that it can accept for write */ MKSessionWriteFunc put_block; /* writes a block of data to the stream */ MKSessionCompleteFunc complete; /* normal end */ MKSessionAbortFunc abort; /* abnormal end */ bool is_multipart; /* is the stream part of a multipart sequence */ }; /* * This is for the reworked mime parser. */ class mime_stream_data { /* This object is the state we pass around amongst the various stream functions used by MIME_MessageConverter(). */ public: mime_stream_data(); char* url_name; char* orig_url_name; /* original url name */ nsCOMPtr channel; nsMimeOutputType format_out; void* pluginObj2; /* The new XP-COM stream converter object */ nsMIMESession* istream; /* Holdover - new stream we're writing out image data-if any. */ MimeObject* obj; /* The root parser object */ MimeDisplayOptions* options; /* Data for communicating with libmime.a */ MimeHeaders* headers; /* Copy of outer most mime header */ nsIMimeEmitter* output_emitter; /* Output emitter engine for libmime */ }; // // This object is the state we use for loading drafts and templates... // class mime_draft_data { public: mime_draft_data(); char* url_name; // original url name */ nsMimeOutputType format_out; // intended output format; should be FO_OPEN_DRAFT */ nsMIMESession* stream; // not used for now MimeObject* obj; // The root MimeDisplayOptions* options; // data for communicating with libmime MimeHeaders* headers; // Copy of outer most mime header nsTArray attachments; // attachments nsMsgAttachedFile* messageBody; // message body nsMsgAttachedFile* curAttachment; // temp nsCOMPtr tmpFile; nsCOMPtr tmpFileStream; // output file handle MimeDecoderData* decoder_data; char* mailcharset; // get it from CHARSET of Content-Type bool forwardInline; bool forwardInlineFilter; bool overrideComposeFormat; // Override compose format (for forward inline). nsString forwardToAddress; nsCOMPtr identity; nsCString originalMsgURI; // the original URI of the message we are currently // processing nsCOMPtr origMsgHdr; bool autodetectCharset; // Used to indicate pending autodetection while // streaming contents. }; //////////////////////////////////////////////////////////////// // Bridge routines for legacy mime code //////////////////////////////////////////////////////////////// // Create bridge stream for libmime extern "C" void* mime_bridge_create_display_stream( nsIMimeEmitter* newEmitter, nsStreamConverter* newPluginObj2, nsIURI* uri, nsMimeOutputType format_out, uint32_t whattodo, nsIChannel* aChannel); // To get the mime emitter... extern "C" nsIMimeEmitter* GetMimeEmitter(MimeDisplayOptions* opt); // To support 2 types of emitters...we need these routines :-( extern "C" nsresult mimeSetNewURL(nsMIMESession* stream, char* url); extern "C" nsresult mimeEmitterAddAttachmentField(MimeDisplayOptions* opt, const char* field, const char* value); extern "C" nsresult mimeEmitterAddHeaderField(MimeDisplayOptions* opt, const char* field, const char* value); extern "C" nsresult mimeEmitterAddAllHeaders(MimeDisplayOptions* opt, const char* allheaders, const int32_t allheadersize); extern "C" nsresult mimeEmitterStartAttachment(MimeDisplayOptions* opt, const char* name, const char* contentType, const char* url, bool aIsExternalAttachment); extern "C" nsresult mimeEmitterEndAttachment(MimeDisplayOptions* opt); extern "C" nsresult mimeEmitterEndAllAttachments(MimeDisplayOptions* opt); extern "C" nsresult mimeEmitterStartBody(MimeDisplayOptions* opt, bool bodyOnly, const char* msgID, const char* outCharset); extern "C" nsresult mimeEmitterEndBody(MimeDisplayOptions* opt); extern "C" nsresult mimeEmitterEndHeader(MimeDisplayOptions* opt, MimeObject* obj); extern "C" nsresult mimeEmitterStartHeader(MimeDisplayOptions* opt, bool rootMailHeader, bool headerOnly, const char* msgID, const char* outCharset); extern "C" nsresult mimeEmitterUpdateCharacterSet(MimeDisplayOptions* opt, const char* aCharset); extern "C" nsresult MimeGetAttachmentList(MimeObject* tobj, const char* aMessageURL, nsMsgAttachmentData** data); /* To Get the connection to prefs service manager */ extern "C" nsIPrefBranch* GetPrefBranch(MimeDisplayOptions* opt); // Get the text converter... mozITXTToHTMLConv* GetTextConverter(MimeDisplayOptions* opt); nsresult HTML2Plaintext(const nsString& inString, nsString& outString, uint32_t flags, uint32_t wrapCol); nsresult HTMLSanitize(const nsString& inString, nsString& outString); extern "C" char* MimeGetStringByID(int32_t stringID); extern "C" char* MimeGetStringByName(const char16_t* stringName); // Utility to create a nsIURI object... extern "C" nsresult nsMimeNewURI(nsIURI** aInstancePtrResult, const char* aSpec, nsIURI* aBase); extern "C" nsresult SetMailCharacterSetToMsgWindow(MimeObject* obj, const char* aCharacterSet); extern "C" nsresult GetMailNewsFont(MimeObject* obj, bool styleFixed, int32_t* fontPixelSize, int32_t* fontSizePercentage, nsCString& fontLang); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _MIMEMOZ_H_ */