/usr/include/thunderbird/nsMsgAttachmentHandler.h is in thunderbird-dev 1:52.8.0-1~deb8u1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | /* -*- Mode: C++; tab-width: 2; 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 _nsMsgAttachmentHandler_H_
#define _nsMsgAttachmentHandler_H_
#include "nsIURL.h"
#include "nsMsgCompFields.h"
#include "nsIMsgStatusFeedback.h"
#include "nsIChannel.h"
#include "nsIMsgSend.h"
#include "nsIFileStreams.h"
#include "nsIStreamConverter.h"
#include "nsAutoPtr.h"
#include "nsIMsgAttachmentHandler.h"
#ifdef XP_MACOSX
#include "nsMsgAppleDouble.h"
#include "nsILocalFileMac.h"
class AppleDoubleEncodeObject
{
public:
appledouble_encode_object ap_encode_obj;
char *buff; // the working buff
int32_t s_buff; // the working buff size
nsCOMPtr <nsIOutputStream> fileStream; // file to hold the encoding
};
class nsILocalFileMac;
class nsIZipWriter;
/* Simple utility class that will synchronously zip any file
(or folder hierarchy) you give it. */
class nsSimpleZipper
{
public:
// Synchronously zips the input file/folder and writes all
// data to the output file.
static nsresult Zip(nsIFile *aInputFile, nsIFile *aOutputFile);
private:
// Recursively adds the file or folder to aZipWriter.
static nsresult AddToZip(nsIZipWriter *aZipWriter,
nsIFile *aFile,
const nsACString &aPath);
};
#endif // XP_MACOSX
namespace mozilla {
namespace mailnews {
class MimeEncoder;
}
}
//
// This is a class that deals with processing remote attachments. It implements
// an nsIStreamListener interface to deal with incoming data
//
class nsMsgAttachmentHandler : public nsIMsgAttachmentHandler
{
typedef mozilla::mailnews::MimeEncoder MimeEncoder;
public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIMSGATTACHMENTHANDLER
nsMsgAttachmentHandler();
public:
nsresult SnarfAttachment(nsMsgCompFields *compFields);
nsresult PickEncoding(const char *charset, nsIMsgSend* mime_delivery_state);
nsresult PickCharset();
void AnalyzeSnarfedFile (); // Analyze a previously-snarfed file.
// (Currently only used for plaintext
// converted from HTML.)
nsresult Abort();
nsresult UrlExit(nsresult status, const char16_t* aMsg);
// if there's an intermediate temp file left, takes care to remove it from disk.
//
// NOTE: this takes care of the mEncodedWorkingFile temp file, but not mTmpFile which seems
// to be used by lots of other classes at the moment.
void CleanupTempFile();
private:
virtual ~nsMsgAttachmentHandler();
// use when a message (e.g. original message in a reply) is attached as a rfc822 attachment.
nsresult SnarfMsgAttachment(nsMsgCompFields *compFields);
bool UseUUEncode_p(void);
void AnalyzeDataChunk (const char *chunk, int32_t chunkSize);
nsresult LoadDataFromFile(nsIFile *file, nsString &sigData, bool charsetConversion); //A similar function already exist in nsMsgCompose!
#ifdef XP_MACOSX
nsresult ConvertToAppleEncoding(const nsCString &aFileSpecURI,
const nsCString &aFilePath,
nsILocalFileMac *aSourceFile);
// zips this attachment and does the work to make this attachment handler handle it properly.
nsresult ConvertToZipFile(nsILocalFileMac *aSourceFile);
bool HasResourceFork(FSRef *fsRef);
#endif
//
public:
nsCOMPtr<nsIURI> mURL;
nsCOMPtr<nsIFile> mTmpFile; // The temp file to which we save it
nsCOMPtr<nsIOutputStream> mOutFile;
nsCOMPtr<nsIRequest> mRequest; // The live request used while fetching an attachment
nsMsgCompFields *mCompFields; // Message composition fields for the sender
bool m_bogus_attachment; // This is to catch problem children...
#ifdef XP_MACOSX
// if we need to encode this file into for example an appledouble, or zip file,
// this file is our working file. currently only needed on mac.
nsCOMPtr<nsIFile> mEncodedWorkingFile;
#endif
nsCString m_xMacType; // Mac file type
nsCString m_xMacCreator; // Mac file creator
bool m_done;
nsCString m_charset; // charset name
nsCString m_contentId; // This is for mutipart/related Content-ID's
nsCString m_type; // The real type, once we know it.
nsCString m_typeParam; // Any addition parameters to add to the content-type (other than charset, macType and maccreator)
nsCString m_overrideType; // The type we should assume it to be
// or 0, if we should get it from the
// server)
nsCString m_overrideEncoding; // Goes along with override_type
nsCString m_desiredType; // The type it should be converted to.
nsCString m_description; // For Content-Description header
nsCString m_realName; // The name for the headers, if different
// from the URL.
nsCString m_encoding; // The encoding, once we've decided. */
bool m_already_encoded_p; // If we attach a document that is already
// encoded, we just pass it through.
bool m_decrypted_p; /* S/MIME -- when attaching a message that was
encrypted, it's necessary to decrypt it first
(since nobody but the original recipient can
read it -- if you forward it to someone in the
raw, it will be useless to them.) This flag
indicates whether decryption occurred, so that
libmsg can issue appropriate warnings about
doing a cleartext forward of a message that was
originally encrypted. */
bool mDeleteFile; // If this is true, Delete the file...its
// NOT the original file!
bool mMHTMLPart; // This is true if its an MHTML part, otherwise, false
bool mPartUserOmissionOverride; // This is true if the user send send the email without this part
bool mMainBody; // True if this is a main body.
// true if this should be sent as a link to a file.
bool mSendViaCloud;
nsString mHtmlAnnotation;
nsCString mCloudProviderKey;
nsCString mCloudUrl;
int32_t mNodeIndex; //If this is an embedded image, this is the index of the
// corresponding domNode in the editor's
//GetEmbeddedObjects. Otherwise, it will be -1.
//
// Vars for analyzing file data...
//
uint32_t m_size; /* Some state used while filtering it */
uint32_t m_unprintable_count;
uint32_t m_highbit_count;
uint32_t m_ctl_count;
uint32_t m_null_count;
uint8_t m_have_cr, m_have_lf, m_have_crlf;
bool m_prev_char_was_cr;
uint32_t m_current_column;
uint32_t m_max_column;
uint32_t m_lines;
bool m_file_analyzed;
nsAutoPtr<MimeEncoder> m_encoder;
nsCString m_uri; // original uri string
nsresult GetMimeDeliveryState(nsIMsgSend** _retval);
nsresult SetMimeDeliveryState(nsIMsgSend* mime_delivery_state);
private:
nsCOMPtr<nsIMsgSend> m_mime_delivery_state;
nsCOMPtr<nsIStreamConverter> m_mime_parser;
nsCOMPtr<nsIChannel> m_converter_channel;
};
#endif /* _nsMsgAttachmentHandler_H_ */
|