#ifndef ZOIDBERG_MAIL_ATTACHMENT_H #define ZOIDBERG_MAIL_ATTACHMENT_H /* Attachment - classes which handle mail attachments ** ** Copyright 2001 Dr. Zoidberg Enterprises. All rights reserved. */ #include #include #include class BFile; class BMailAttachment : public BMailComponent { public: virtual void SetFileName(const char *name) = 0; virtual status_t FileName(char *name) = 0; virtual status_t SetTo(BFile *file, bool deleteFileWhenDone = false) = 0; virtual status_t SetTo(entry_ref *ref) = 0; virtual status_t InitCheck() = 0; private: virtual void _ReservedAttachment1(); virtual void _ReservedAttachment2(); virtual void _ReservedAttachment3(); virtual void _ReservedAttachment4(); }; class BSimpleMailAttachment : public BMailAttachment { public: BSimpleMailAttachment(BPositionIO *dataToAttach, mail_encoding encoding = base64); BSimpleMailAttachment(const void *dataToAttach, size_t lengthOfData, mail_encoding encoding = base64); BSimpleMailAttachment(BFile *file, bool delete_when_done); BSimpleMailAttachment(entry_ref *ref); BSimpleMailAttachment(); virtual ~BSimpleMailAttachment(); virtual status_t SetTo(BFile *file, bool delete_file_when_done = false); virtual status_t SetTo(entry_ref *ref); virtual status_t InitCheck(); virtual void SetFileName(const char *name); virtual status_t FileName(char *name); virtual status_t GetDecodedData(BPositionIO *data); virtual status_t SetDecodedData(BPositionIO *data); virtual BPositionIO *GetDecodedData(); virtual status_t SetDecodedData(const void *data, size_t length /* data to attach */); virtual status_t SetDecodedDataAndDeleteWhenDone(BPositionIO *data); void SetEncoding(mail_encoding encoding = base64 /* note: we only support base64. This is a no-op */); mail_encoding Encoding(); virtual status_t SetToRFC822(BPositionIO *data, size_t length, bool parse_now = false); virtual status_t RenderToRFC822(BPositionIO *render_to); private: void Initialize(mail_encoding encoding); void ParseNow(); virtual void _ReservedSimple1(); virtual void _ReservedSimple2(); virtual void _ReservedSimple3(); status_t fStatus; BPositionIO *_data, *_raw_data; size_t _raw_length; off_t _raw_offset; bool _we_own_data; mail_encoding _encoding; uint32 _reserved[5]; }; class BAttributedMailAttachment : public BMailAttachment { public: BAttributedMailAttachment(BFile *file, bool delete_when_done); BAttributedMailAttachment(entry_ref *ref); BAttributedMailAttachment(); virtual ~BAttributedMailAttachment(); virtual status_t SetTo(BFile *file, bool delete_file_when_done = false); virtual status_t SetTo(entry_ref *ref); virtual status_t InitCheck(); void SaveToDisk(BEntry *entry); //-----we pay no attention to entry, but set it to the location of our file in /tmp void SetEncoding(mail_encoding encoding /* anything but uuencode */); mail_encoding Encoding(); virtual status_t FileName(char *name); virtual void SetFileName(const char *name); virtual status_t GetDecodedData(BPositionIO *data); virtual status_t SetDecodedData(BPositionIO *data); virtual status_t SetToRFC822(BPositionIO *data, size_t length, bool parse_now = false); virtual status_t RenderToRFC822(BPositionIO *render_to); virtual status_t MIMEType(BMimeType *mime); private: status_t Initialize(); virtual void _ReservedAttributed1(); virtual void _ReservedAttributed2(); virtual void _ReservedAttributed3(); BMIMEMultipartMailContainer *fContainer; status_t fStatus; BSimpleMailAttachment *_data, *_attributes_attach; BMessage _attributes; uint32 _reserved[5]; }; #endif /* ZOIDBERG_MAIL_ATTACHMENT_H */