From 253de14d2ee9f618a7562d6765e55fee64602f29 Mon Sep 17 00:00:00 2001 From: "mjudge%netscape.com" Date: Fri, 9 Oct 1998 02:48:53 +0000 Subject: [PATCH] Mailto MOZ_ENDER_MIME will not be turned on yet --- lib/mailto/makefile.win | 55 ++----------- lib/mailto/mhtmlstm.cpp | 168 +++++++++++++++++++++++++++++++--------- lib/mailto/mhtmlstm.h | 7 +- lib/mailto/mprmime.c | 79 ++++++++++++------- lib/mailto/mprmime.h | 13 +++- lib/mailto/msgsendp.cpp | 54 ++++++++++++- lib/mailto/msgsendp.h | 6 +- 7 files changed, 265 insertions(+), 117 deletions(-) diff --git a/lib/mailto/makefile.win b/lib/mailto/makefile.win index 5f409b63d999..935fa9906147 100644 --- a/lib/mailto/makefile.win +++ b/lib/mailto/makefile.win @@ -28,66 +28,21 @@ LIB = .\$(OBJDIR)\$(LIBRARY_NAME).lib LLIBS=$(LLIBS) $(GLOWDIR)\glowcode.lib !endif + REQUIRES=security nspr htmldlgs img util layer pref security js java net progress network OBJS = \ - .\$(OBJDIR)\addrutil.obj \ - .\$(OBJDIR)\ad_strm.obj \ - .\$(OBJDIR)\ap_decod.obj \ - .\$(OBJDIR)\ap_encod.obj \ - .\$(OBJDIR)\appledbl.obj \ - .\$(OBJDIR)\bh_strm.obj \ - .\$(OBJDIR)\m_binhex.obj \ - .\$(OBJDIR)\msgutils.obj \ - .\$(OBJDIR)\bytearr.obj \ - .\$(OBJDIR)\dwordarr.obj \ - .\$(OBJDIR)\mhtmlstm.obj \ - .\$(OBJDIR)\msgbg.obj \ - .\$(OBJDIR)\msgcflds.obj \ - .\$(OBJDIR)\msgcpane.obj \ - .\$(OBJDIR)\msgglue.obj \ - .\$(OBJDIR)\msgmast.obj \ - .\$(OBJDIR)\msgmdn.obj \ - .\$(OBJDIR)\msgpane.obj \ - .\$(OBJDIR)\msgppane.obj \ - .\$(OBJDIR)\msgprefs.obj \ - .\$(OBJDIR)\msgsend.obj \ - .\$(OBJDIR)\msgsendp.obj \ - .\$(OBJDIR)\msgurlq.obj \ - .\$(OBJDIR)\msgzap.obj \ - .\$(OBJDIR)\ptrarray.obj \ .\$(OBJDIR)\mprmime.obj \ + .\$(OBJDIR)\mhtmlstm.obj \ + .\$(OBJDIR)\msgsendp.obj \ $(NULL) # We'd like to include msgdlqml.cpp eventually (deliver queued mail) EXPORTS = \ - ad_codes.h \ - appledbl.h \ - bytearr.h \ - dwordarr.h \ - errcode.h \ - error.h \ - m_binhex.h \ mhtmlstm.h \ - msg.h \ - msgcflds.h \ - msgcpane.h \ - msghdr.h \ - msgmast.h \ - msgmdn.h \ - msgpane.h \ - msgppane.h \ - msgprefs.h \ - msgprnot.h \ - msgsend.h \ - msgsendp.h \ - msgutils.h \ - msgzap.h \ - ptrarray.h \ - mprmime.h \ $(NULL) MODULE=mailto @@ -101,6 +56,10 @@ LINCS=-I$(XPDIST)\public\security -I$(XPDIST)\public\nspr \ -I$(XPDIST)\public\net -I$(XPDIST)\public\progress \ -I$(XPDIST)\public\util -I$(XPDIST)\public\network +!ifdef MOZ_ENDER_MIME +LCFLAGS=$(LCFLAGS) -DMOZ_ENDER_MIME +!endif + include <$(DEPTH)\config\rules.mak> libs:: $(LIB) diff --git a/lib/mailto/mhtmlstm.cpp b/lib/mailto/mhtmlstm.cpp index 18149fb9eb68..460289b0e311 100644 --- a/lib/mailto/mhtmlstm.cpp +++ b/lib/mailto/mhtmlstm.cpp @@ -36,6 +36,17 @@ #include "mimeenc.h" #include "libi18n.h" +#ifdef MOZ_ENDER_MIME +#include "secrng.h" /* for RNG_GenerateGlobalRandomBytes() */ +extern "C" { +#include "xp_file.h" +} + +#include "mprmime.h" + + +#endif /*MOZ_ENDER_MIME*/ + extern "C" { extern int MK_UNABLE_TO_OPEN_FILE; } @@ -241,7 +252,7 @@ MSG_MimeRelatedSubpart::MSG_MimeRelatedSubpart(MSG_MimeRelatedSaver *parent, char *pMime, int16 part_csid, char *pFilename) : MSG_SendPart(NULL, part_csid), m_pOriginalURL(NULL), m_pLocalURL(NULL), m_pParentFS(parent), - m_pContentID(NULL), m_pContentName(NULL), m_rootPart(FALSE) + m_pContentID(NULL), m_pContentName(NULL), m_rootPart(FALSE) , m_pStreamOut(NULL), m_pEncoding(NULL) { m_filetype = xpFileToPost; @@ -269,7 +280,11 @@ MSG_MimeRelatedSubpart::MSG_MimeRelatedSubpart(MSG_MimeRelatedSaver *parent, else { // Generate a temp name for a file to which to write. - char *tmp = WH_TempName(xpFileToPost, "nsmail"); +#ifdef MOZ_ENDER_MIME + char *tmp = WH_TempName(xpFileToPost, "nswebm"); +#else + char *tmp = WH_TempName(xpFileToPost, "nsmail"); +#endif if (tmp) { CopyString(&m_filename, tmp); @@ -320,8 +335,10 @@ MSG_MimeRelatedSubpart::WriteEncodedMessageBody(const char *buf, int32 size, int returnVal = 0; XP_ASSERT(subpart->m_state != NULL); - if (subpart->m_state) +#ifndef MOZ_ENDER_MIME + if (subpart->m_state) returnVal = mime_write_message_body(subpart->m_state, (char *) buf, size); +#endif return returnVal; } @@ -415,7 +432,8 @@ MSG_MimeRelatedSubpart::Write(void) // that isn't text. if (m_type && (!m_rootPart)) { - // Uuencode only if we have to, otherwise use base64 +#ifndef MOZ_ENDER_MIME + // Uuencode only if we have to, otherwise use base64 if (m_pParentFS->m_pPane-> GetCompBoolHeader(MSG_UUENCODE_BINARY_BOOL_HEADER_MASK)) { @@ -437,6 +455,7 @@ MSG_MimeRelatedSubpart::Write(void) WriteEncodedMessageBody, this)); } +#endif /*MOZ_ENDER_MAIL*/ } // Horrible hack: if we got a local filename then we're the root lump, @@ -495,6 +514,7 @@ MSG_MimeRelatedParentPart::~MSG_MimeRelatedParentPart(void) { } +#ifdef MOZ_ENDER_MIME /* ---------------------------------------------------------------------- MSG_MimeRelatedStreamSaver @@ -513,11 +533,31 @@ MSG_MimeRelatedStreamSaver::MSG_MimeRelatedStreamSaver(MSG_CompositionPane *pane DeliveryDoneCallback cb, char **ppOriginalRootURL) : MSG_MimeRelatedSaver(pane,context,fields,digest_p,deliver_mode, - body,body_length,attachedFiles,cb,ppOriginalRootURL) + body,body_length,attachedFiles,cb,ppOriginalRootURL),m_pFilename(NULL) { + } + + +MSG_MimeRelatedStreamSaver::~MSG_MimeRelatedStreamSaver() +{ + XP_FREEIF(m_pFilename); +} + + + +extern "C" char *mime_make_separator(const char *prefix); + +extern "C" int mimer_output_func(const char *p_buffer,int32 p_size,void *closure) +{ + XP_File t_file; + t_file = (XP_File)closure; + return XP_FileWrite(p_buffer,p_size,t_file); +} + + void MSG_MimeRelatedStreamSaver::Complete( Bool bSuccess, EDT_ITapeFileSystemComplete *pfComplete, void *pArg ) { @@ -526,43 +566,61 @@ MSG_MimeRelatedStreamSaver::Complete( Bool bSuccess, EDT_ITapeFileSystemComplete // Call StartMessageDelivery (and should) if we // were told to at creation time. - if (bSuccess) + if (bSuccess && m_pPart) { - // If we only generated a single HTML part, treat that as - // the root part. - if (m_pPart->GetNumChildren() == 1) - { - MSG_SendPart *tempPart = m_pPart->DetachChild(0); - delete m_pPart; - m_pPart = tempPart; - } + //make new message! + XP_File t_file; + m_pFilename = WH_TempName (xpFileToPost, "nswebm"); + if (m_pFilename) + { + t_file = XP_FileOpen(m_pFilename,xpTemporary,XP_FILE_WRITE); + GenericMimeRelatedData *t_data = GenericMime_Init(mime_make_separator(""),mimer_output_func,t_file); + for (int32 i=0;i< m_pPart->GetNumChildren();i++) + { + MSG_MimeRelatedSubpart *t_part; + t_part = (MSG_MimeRelatedSubpart *)m_pPart->GetChild(i); + if (t_part->GetType() && !XP_STRCMP(t_part->GetType(),"text/html")) + { + GenericMime_AddTextFile(t_data,XP_STRDUP(t_part->GetFilename()),t_part->GetCSID()); + } + else /*base64*/ + { + AttachmentFields *t_fields = AttachmentFields_Init(XP_STRDUP(t_part->GetFilename()),XP_STRDUP(t_part->m_pOriginalURL), + XP_STRDUP(t_part->GetType()),XP_STRDUP(t_part->m_pContentID)); + if (t_fields) + GenericMime_AddBase64File(t_data,t_fields); + } + } + GenericMime_Begin(t_data); + GenericMime_Destroy(t_data); + XP_FileClose(t_file); - // Call our UrlExit routine to perform cleanup. - MSG_MimeRelatedSaver::UrlExit(m_pContext, this, 0, NULL); -#if 0 - msg_StartMessageDeliveryWithAttachments(m_pPane, this, - m_pFields, - m_digest, FALSE, - m_deliverMode, - TEXT_HTML, - m_pBody, m_bodyLength, - m_pAttachedFiles, - m_pPart, -#ifdef XP_OS2 - (void (_Optlink*) (MWContext*,void*,int,const char*)) -#endif - MSG_MimeRelatedSaver::UrlExit); -#endif + for (i=0;i< m_pPart->GetNumChildren();i++) + { + MSG_MimeRelatedSubpart *t_part; + t_part = (MSG_MimeRelatedSubpart *)m_pPart->GetChild(i); + if (t_part->GetType() && XP_STRCMP(t_part->GetType(),"text/html")) /*not text*/ + { + XP_FileRemove(t_part->GetFilename(), xpFileToPost); + } + } + } + // Call our UrlExit routine to perform cleanup. + MSG_MimeRelatedSaver::UrlExit(m_pContext, this, 0, NULL); } else { // delete the contained part since we failed delete m_pPart; m_pPart = NULL; - // Call our UrlExit routine to perform cleanup. - MSG_MimeRelatedSaver::UrlExit(m_pContext, this, MK_INTERRUPTED, NULL); - } + // Call our UrlExit routine to perform cleanup. + MSG_MimeRelatedSaver::UrlExit(m_pContext, this, MK_INTERRUPTED, NULL); + } } +#endif //MOZ_ENDER_MIME + + + /* ---------------------------------------------------------------------- MSG_MimeRelatedSaver @@ -570,7 +628,42 @@ MSG_MimeRelatedSaver */ extern char * msg_generate_message_id(void); +#ifdef MOZ_ENDER_MIME +char * +msg_generate_message_id (void) +{ + time_t now = XP_TIME(); + uint32 salt = 0; + const char *host = 0; + const char *from = FE_UsersMailAddress (); + RNG_GenerateGlobalRandomBytes((void *) &salt, sizeof(salt)); + + if (from) + { + host = XP_STRCHR (from, '@'); + if (host) + { + const char *s; + for (s = ++host; *s; s++) + if (!XP_IS_ALPHA(*s) && !XP_IS_DIGIT(*s) && + *s != '-' && *s != '_' && *s != '.') + { + host = 0; + break; + } + } + } + + if (! host) + /* If we couldn't find a valid host name to use, we can't generate a + valid message ID, so bail, and let NNTP and SMTP generate them. */ + return 0; + + return PR_smprintf("<%lX.%lX@%s>", + (unsigned long) now, (unsigned long) salt, host); +} +#endif //MOZ_ENDER_MIME // Constructor MSG_MimeRelatedSaver::MSG_MimeRelatedSaver(MSG_CompositionPane *pane, MWContext *context, @@ -588,7 +681,7 @@ MSG_MimeRelatedSaver::MSG_MimeRelatedSaver(MSG_CompositionPane *pane, m_pAttachedFiles(attachedFiles), m_cbDeliveryDone(cb), m_pSourceBaseURL(NULL) { - // Generate the message ID. + // Generate the message ID. m_pMessageID = msg_generate_message_id(); if (m_pMessageID) { @@ -603,7 +696,6 @@ MSG_MimeRelatedSaver::MSG_MimeRelatedSaver(MSG_CompositionPane *pane, } } XP_ASSERT(m_pMessageID); - // Create the part object that we represent. m_pPart = new MSG_MimeRelatedParentPart(INTL_DefaultWinCharSetID(context)); XP_ASSERT(m_pPart); @@ -621,7 +713,11 @@ MSG_MimeRelatedSaver::MSG_MimeRelatedSaver(MSG_CompositionPane *pane, // back an improvised source URL if we were not given one. // // Autogenerate the title and pass it back. +#ifdef MOZ_ENDER_MIME + m_rootFilename = WH_TempName(xpFileToPost,"nswebm"); +#else m_rootFilename = WH_TempName(xpFileToPost,"nsmail"); +#endif XP_ASSERT(m_rootFilename); char * temp = WH_FileName(m_rootFilename, xpFileToPost); *ppOriginalRootURL = XP_PlatformFileToURL(temp); @@ -866,6 +962,7 @@ void MSG_MimeRelatedSaver::Complete(Bool bSuccess, EDT_ITapeFileSystemComplete *pfComplete, void *pArg ) { +#ifndef MOZ_ENDER_MIME m_pEditorCompletionFunc = pfComplete; m_pEditorCompletionArg = pArg; @@ -904,6 +1001,7 @@ MSG_MimeRelatedSaver::Complete(Bool bSuccess, // Call our UrlExit routine to perform cleanup. UrlExit(m_pPane->GetContext(), this, MK_INTERRUPTED, NULL); } +#endif //#ifndef MOZ_ENDER_MIME } void diff --git a/lib/mailto/mhtmlstm.h b/lib/mailto/mhtmlstm.h index 2b749c4742d8..0da3515b58cf 100644 --- a/lib/mailto/mhtmlstm.h +++ b/lib/mailto/mhtmlstm.h @@ -223,6 +223,7 @@ public: //#endif +#ifdef MOZ_ENDER_MIME //used to stop lame mimerelated saver from sending a message! class MSG_MimeRelatedStreamSaver : public MSG_MimeRelatedSaver { @@ -234,12 +235,16 @@ public: MSG_AttachedFile *attachedFiles, DeliveryDoneCallback cb, char **ppOriginalRootURL); - virtual ~MSG_MimeRelatedStreamSaver(){} + virtual ~MSG_MimeRelatedStreamSaver(); + // // Called on completion, TRUE if completed successfully, FALSE if it failed. // we dont want the message to be sent, so we stop mimerelated saver from completing // virtual void Complete( Bool bSuccess, EDT_ITapeFileSystemComplete *pfComplete, void *pArg ); +private: + char *m_pFilename; }; +#endif //MOZ_ENDER_MIME #endif diff --git a/lib/mailto/mprmime.c b/lib/mailto/mprmime.c index f2af01ff9696..cd0b6fa06eff 100644 --- a/lib/mailto/mprmime.c +++ b/lib/mailto/mprmime.c @@ -16,15 +16,19 @@ #define READ_BUFFER_LEN 255 + /* prototypes -XP_Bool output_text_file(GenericMimeRelatedData *p_genmime, int16 p_index); -XP_Bool output_base64_file(GenericMimeRelatedData *p_genmime, int16 p_index); */ +XP_Bool output_text_file(GenericMimeRelatedData *p_genmime, int16 p_index); +XP_Bool output_text_body(GenericMimeRelatedData *p_genmime, int16 p_index); +XP_Bool output_base64_file(GenericMimeRelatedData *p_genmime, int16 p_index); + AttachmentFields * -AttachmentFields_Init(char *p_pFilename, char *p_pDispositionName, char *p_pContentType, char *p_pContentId) +AttachmentFields_Init(char *p_pFilename, char *p_pDispositionName, + char *p_pContentType, char *p_pContentId) { AttachmentFields *data = XP_NEW(AttachmentFields); if (!data || !p_pFilename || !p_pContentType || !p_pContentId) return 0; @@ -97,7 +101,7 @@ genericmime_validate(GenericMimeRelatedData *p_genmime) int i;/*counter*/ if (!p_genmime) return FALSE; - if (!p_genmime->m_iNumTextFiles + p_genmime->m_iNumBase64Files) + if (!(p_genmime->m_iNumTextFiles + p_genmime->m_iNumBase64Files)) return FALSE; /*no files*/ for( i=0; im_iNumTextFiles; i++) { @@ -139,13 +143,40 @@ GenericMime_Destroy(GenericMimeRelatedData *p_gendata) static XP_Bool -output_text_file(GenericMimeRelatedData *p_genmime, int16 p_index) +output_text_body(GenericMimeRelatedData *p_genmime, int16 p_index) { char readbuffer[READ_BUFFER_LEN]; /*buffer to store incomming data*/ int16 numread; /*number of bytes read in each pass*/ - char *charSet; /*used by text attachments when retrieving the charset str identifier*/ XP_File t_inputfile; /*file pointer for input file*/ + (*p_genmime->write_buffer)("\n",1,p_genmime->closure); + if( (t_inputfile = XP_FileOpen(p_genmime->m_pTextFiles[p_index],xpFileToPost,XP_FILE_READ)) != NULL ) + { + /* Attempt to read in READBUFLEN characters */ + while (!feof( t_inputfile )) + { + numread = fread( readbuffer, sizeof( char ), READ_BUFFER_LEN, t_inputfile ); + if (ferror(t_inputfile)) + { + XP_ASSERT(FALSE); + break; + } + (*p_genmime->write_buffer)(readbuffer,numread,p_genmime->closure); + } + fclose( t_inputfile ); + (*p_genmime->write_buffer)("\n",1,p_genmime->closure); + (*p_genmime->write_buffer)("\n",1,p_genmime->closure); + } + return TRUE; +} + + + +static XP_Bool +output_text_file(GenericMimeRelatedData *p_genmime, int16 p_index) +{ + char *charSet; /*used by text attachments when retrieving the charset str identifier*/ + if (p_genmime->m_pBoundarySpecifier) { (*p_genmime->write_buffer)(p_genmime->m_pBoundarySpecifier,strlen(p_genmime->m_pBoundarySpecifier),p_genmime->closure); @@ -161,24 +192,7 @@ output_text_file(GenericMimeRelatedData *p_genmime, int16 p_index) (*p_genmime->write_buffer)(BIT7_MIMEREL,strlen(BIT7_MIMEREL),p_genmime->closure); (*p_genmime->write_buffer)("\n",1,p_genmime->closure); (*p_genmime->write_buffer)("\n",1,p_genmime->closure); - if( (t_inputfile = fopen( p_genmime->m_pTextFiles[p_index], "r+t" )) != NULL ) - { - /* Attempt to read in READBUFLEN characters */ - while (!!feof( t_inputfile )) - { - numread = fread( readbuffer, sizeof( char ), READ_BUFFER_LEN, t_inputfile ); - if (ferror(t_inputfile)) - { - XP_ASSERT(FALSE); - break; - } - (*p_genmime->write_buffer)(readbuffer,numread,p_genmime->closure); - } - fclose( t_inputfile ); - (*p_genmime->write_buffer)("\n",1,p_genmime->closure); - (*p_genmime->write_buffer)("\n",1,p_genmime->closure); - } - return TRUE; + return output_text_body(p_genmime,p_index); } @@ -209,7 +223,9 @@ output_base64_file(GenericMimeRelatedData *p_genmime, int16 p_index) (*p_genmime->write_buffer)("\n",1,p_genmime->closure); (*p_genmime->write_buffer)(CONTENT_ID_MIMEREL,strlen(CONTENT_ID_MIMEREL),p_genmime->closure); + (*p_genmime->write_buffer)("<",1,p_genmime->closure); (*p_genmime->write_buffer)(t_tempattach->m_pContentId ,strlen(t_tempattach->m_pContentId),p_genmime->closure); + (*p_genmime->write_buffer)(">",1,p_genmime->closure); (*p_genmime->write_buffer)("\n",1,p_genmime->closure); (*p_genmime->write_buffer)(CONTENT_TRANS_MIMEREL,strlen(CONTENT_TRANS_MIMEREL),p_genmime->closure); @@ -225,13 +241,13 @@ output_base64_file(GenericMimeRelatedData *p_genmime, int16 p_index) (*p_genmime->write_buffer)("\n",1,p_genmime->closure); - if( (t_inputfile = fopen( t_tempattach->m_pFilename, "r+b" )) != NULL ) + if( (t_inputfile = XP_FileOpen( t_tempattach->m_pFilename, xpFileToPost,XP_FILE_READ_BIN )) != NULL ) { /* Attempt to read in READBUFLEN characters */ t_base64data = MimeB64EncoderInit(p_genmime->write_buffer,p_genmime->closure); if (!t_base64data) return FALSE; /* bad?*/ - while (!!feof( t_inputfile )) + while (!feof( t_inputfile )) { numread = fread( readbuffer, sizeof( char ), READ_BUFFER_LEN, t_inputfile ); if (ferror(t_inputfile)) @@ -260,6 +276,10 @@ GenericMime_Begin(GenericMimeRelatedData *p_genmime) XP_ASSERT(FALSE); return FALSE; } + if (p_genmime->m_iNumTextFiles == 1 && p_genmime->m_iNumBase64Files == 0) + { + return output_text_body(p_genmime,0); /*output only the body part*/ + } (*p_genmime->write_buffer)(CONTENT_TYPE_MPR_MIMEREL,strlen(CONTENT_TYPE_MPR_MIMEREL),p_genmime->closure); (*p_genmime->write_buffer)(BOUNDARYSTR_MIMEREL,strlen(BOUNDARYSTR_MIMEREL),p_genmime->closure); (*p_genmime->write_buffer)("\"",1,p_genmime->closure); /*begin quote*/ @@ -283,6 +303,13 @@ GenericMime_Begin(GenericMimeRelatedData *p_genmime) if (!output_base64_file(p_genmime,i)) return FALSE; } + if (p_genmime->m_pBoundarySpecifier) + { + (*p_genmime->write_buffer)(p_genmime->m_pBoundarySpecifier,strlen(p_genmime->m_pBoundarySpecifier),p_genmime->closure); + (*p_genmime->write_buffer)("--",2,p_genmime->closure); + } + (*p_genmime->write_buffer)("\n",1,p_genmime->closure); + return TRUE; } diff --git a/lib/mailto/mprmime.h b/lib/mailto/mprmime.h index 29f4e011fc71..c518a5bdd1ae 100644 --- a/lib/mailto/mprmime.h +++ b/lib/mailto/mprmime.h @@ -1,6 +1,8 @@ #ifndef _MPRMIME_H #define _MPRMIME_H +XP_BEGIN_PROTOS + typedef struct _AttachmentFields { char *m_pFilename; @@ -9,14 +11,14 @@ typedef struct _AttachmentFields char *m_pContentId; }AttachmentFields; -AttachmentFields * AttachmentFields_Init(char *p_pFilename, char *p_pDispositionName, char *p_pContentType, char *p_pContentId); +AttachmentFields * AttachmentFields_Init(char *p_pFilename, char *p_pDispositionName, + char *p_pContentType, char *p_pContentId); XP_Bool AttachmentFields_Destroy(AttachmentFields *p_fields); typedef struct _GenericMimeRelatedData { - XP_Bool m_bRemoveFiles; /*remove files from disk when complete with compilation*/ char *m_pBoundarySpecifier; /*string that is used as the boundary marker in multipart related mime*/ char **m_pTextFiles; /* text files that will be added as attachments*/ int16 *m_pCsids; /* charset ids for each text file */ @@ -48,5 +50,12 @@ you are relinquishing ownership of attachment fields struct */ int GenericMime_AddBase64File(GenericMimeRelatedData *p_gendata, AttachmentFields *p_fields); + +/* +typedef +*/ +typedef int (*MPR_MIME_OUTPUTFUNC) (const char *, int32, void *); +XP_END_PROTOS + #endif //_MPRMIME_H diff --git a/lib/mailto/msgsendp.cpp b/lib/mailto/msgsendp.cpp index 9cf30b2acf4c..41510a614289 100644 --- a/lib/mailto/msgsendp.cpp +++ b/lib/mailto/msgsendp.cpp @@ -23,6 +23,9 @@ #include "msgsendp.h" #include "libi18n.h" +#ifdef MOZ_ENDER_MIME +#include "secrng.h" /* for RNG_GenerateGlobalRandomBytes() */ +#endif /*MOZ_ENDER_MIME*/ extern "C" { extern int MK_OUT_OF_MEMORY; @@ -34,7 +37,25 @@ int32 MSG_SendPart::M_counter = 0; MSG_SendPart::MSG_SendPart(MSG_SendMimeDeliveryState* state, int16 part_csid) { - m_csid = part_csid; + m_type=NULL; + m_parent = NULL; + m_filename = NULL; + m_buffer = NULL; + m_other = NULL; + m_strip_sensitive_headers = FALSE; + m_encoder_data = FALSE; + + m_children = NULL; + m_numchildren = 0; + + m_firstBlock = FALSE; + m_needIntlConversion = FALSE; + + m_mainpart = FALSE; + + m_just_hit_CR = FALSE; + + m_csid = part_csid; SetMimeDeliveryState(state); } @@ -208,7 +229,8 @@ MSG_SendPart* MSG_SendPart::GetChild(int32 which) int MSG_SendPart::PushBody(char* buffer, int32 length) { - int status = 0; +#ifndef MOZ_ENDER_MIME + int status = 0; char* encoded_data = buffer; /* if this is the first block, create the conversion object @@ -322,6 +344,9 @@ int MSG_SendPart::PushBody(char* buffer, int32 length) } return status; +#else + return 0; +#endif //MOZ_ENDER_MIME } @@ -461,10 +486,29 @@ static int divide_content_headers(const char *headers, extern "C" { extern char *mime_make_separator(const char *prefix); } +#ifdef MOZ_ENDER_MIME +//moved this here +extern "C" char * +mime_make_separator(const char *prefix) +{ + unsigned char rand_buf[13]; + RNG_GenerateGlobalRandomBytes((void *) rand_buf, 12); + return PR_smprintf("------------%s" + "%02X%02X%02X%02X" + "%02X%02X%02X%02X" + "%02X%02X%02X%02X", + prefix, + rand_buf[0], rand_buf[1], rand_buf[2], rand_buf[3], + rand_buf[4], rand_buf[5], rand_buf[6], rand_buf[7], + rand_buf[8], rand_buf[9], rand_buf[10], rand_buf[11]); +} +#endif + int MSG_SendPart::Write() { - int status = 0; +#ifndef MOZ_ENDER_MIME + int status = 0; char *separator = 0; XP_File file = NULL; @@ -758,5 +802,7 @@ FAIL: m_intlDocToMailConverter = NULL; } return status; - +#else + return 0; +#endif //MOZ_ENDER_MIME } diff --git a/lib/mailto/msgsendp.h b/lib/mailto/msgsendp.h index d5cf255af955..b82fee4442f6 100644 --- a/lib/mailto/msgsendp.h +++ b/lib/mailto/msgsendp.h @@ -26,9 +26,13 @@ class MSG_SendMimeDeliveryState; typedef int (*MSG_SendPartWriteFunc)(const char* line, int32 size, XP_Bool isheader, void* closure); + - +#ifndef MOZ_ENDER_MIME class MSG_SendPart : public MSG_ZapIt { +#else +class MSG_SendPart { +#endif //MOZ_ENDER_MIME public: MSG_SendPart(MSG_SendMimeDeliveryState* state, int16 part_csid = 0); virtual ~MSG_SendPart(); // Note that the destructor also destroys