233 lines
7.5 KiB
C
233 lines
7.5 KiB
C
/*
|
|
* The contents of this file are subject to the Netscape Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is the Netscape Messaging Access SDK Version 3.5 code,
|
|
* released on or about June 15, 1998. *
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
|
* Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s): ______________________________________.
|
|
*/
|
|
|
|
/*
|
|
* Copyright (c) 1997 and 1998 Netscape Communications Corporation
|
|
* (http://home.netscape.com/misc/trademarks.html)
|
|
*/
|
|
|
|
|
|
/**** mime_internal.h ****/
|
|
|
|
#ifndef MIME_INTERNAL_H
|
|
#define MIME_INTERNAL_H
|
|
|
|
#include "nsmail.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
#define MIME_INFO 1
|
|
#define MIME_HEADER 2
|
|
#define MIME_XHEADER 3
|
|
#define MIME_MESSAGE_DATA 4
|
|
#define MIME_PARAM 5
|
|
#define MIME_BOUNDARY 6
|
|
#define MIME_CRLF 7
|
|
|
|
#define MIME_MESSAGE 20
|
|
#define MIME_BASICPART MIME_CONTENT_TEXT
|
|
#define MIME_MULTIPART MIME_CONTENT_MULTIPART
|
|
#define MIME_MESSAGEPART MIME_CONTENT_MESSAGEPART
|
|
#define MIME_PARSE_ALL 30
|
|
#define MIME_MP_MAX_PARTS 50 /* Max 50 parts in a multi-part */
|
|
#define BUFFER_INCREMENT 1024 /* buffer increases by this when it runs out of space */
|
|
|
|
|
|
|
|
/* used by parser to store general message information */
|
|
typedef struct mimeInfo
|
|
{
|
|
int nType; /* mimeInfo type */
|
|
int nContentType; /* current message content type */
|
|
char *szName; /* name */
|
|
char *szValue; /* value */
|
|
Vector *pVectorParam; /* extra parameters */
|
|
|
|
} mimeInfo_t;
|
|
|
|
|
|
typedef struct mime_mp_partInfo
|
|
{
|
|
mime_content_type nContentType; /* content type of the part */
|
|
char *contentID; /* content ID */
|
|
void *pThePart; /* pointer to actual part */
|
|
|
|
} mime_mp_partInfo_t;
|
|
|
|
|
|
typedef struct mime_basicPart_internal
|
|
{
|
|
nsmail_inputstream_t *pTheDataStream; /* pointer to bodydata STREAM! */
|
|
char *szMessageBody; /* message body data */
|
|
long nMessageSize; /* size of decoded message body data */
|
|
long nRawMessageSize; /* size of raw message body data */
|
|
int nStartMessageDataIndex; /* start of message vector index */
|
|
int nEndMessageDataIndex; /* end of message vector index */
|
|
BOOLEAN bDecodedData; /* TRUE if data has been decoded */
|
|
int nDynamicBufferSize; /* dynamic buffer size, only 4 callbacks */
|
|
void *pUserObject; /* user object */
|
|
|
|
} mime_basicPart_internal_t;
|
|
|
|
|
|
typedef struct mime_multiPart_internal
|
|
{
|
|
int nPartCount;
|
|
mime_mp_partInfo_t partInfo [MIME_MP_MAX_PARTS];
|
|
char *szBoundary;
|
|
void *pUserObject;
|
|
BOOLEAN fParsedPart;
|
|
|
|
} mime_multiPart_internal_t;
|
|
|
|
|
|
typedef struct mime_messagePart_internal
|
|
{
|
|
struct mime_message *pTheMessage;
|
|
void *pUserObject;
|
|
|
|
} mime_messagePart_internal_t;
|
|
|
|
|
|
typedef struct mime_message_internal
|
|
{
|
|
mime_basicPart_t *pMimeBasicPart;
|
|
mime_multiPart_t *pMimeMultiPart;
|
|
mime_messagePart_t *pMimeMessagePart;
|
|
|
|
/* callback support */
|
|
void *pUserObject; /* user object */
|
|
struct mimeDataSink *pDataSink; /* user's datasink. NULL if not using dynamic parsing */
|
|
|
|
} mime_message_internal_t;
|
|
|
|
|
|
|
|
/* ---------------- BasicPart ---------------- */
|
|
struct mime_basicPart * mime_basicPart_new();
|
|
int mime_basicPart_free (struct mime_basicPart *p);
|
|
struct mime_basicPart * mime_basicPart_clone (struct mime_basicPart *p);
|
|
|
|
mime_basicPart_internal_t * mime_basicPart_internal_new();
|
|
int mime_basicPart_internal_free (mime_basicPart_internal_t *p);
|
|
mime_basicPart_internal_t * mime_basicPart_internal_clone (mime_basicPart_internal_t *p);
|
|
|
|
|
|
/* ---------------- Multi-part ---------------- */
|
|
struct mime_multiPart * mime_multiPart_new();
|
|
int mime_multiPart_free (struct mime_multiPart *p);
|
|
struct mime_multiPart * mime_multiPart_clone (struct mime_multiPart *p);
|
|
|
|
int mime_multiPart_addPart (struct mime_multiPart *pMultiPart,
|
|
void *pMessage,
|
|
mime_content_type nContentType,
|
|
int *index_assigned );
|
|
|
|
int mime_multiPart_addPart_clonable( struct mime_multiPart *pMultiPart,
|
|
void * pMessage,
|
|
mime_content_type nContentType,
|
|
BOOLEAN clone,
|
|
int * pIndex_assigned);
|
|
|
|
int mime_multiPart_getPart2 (struct mime_multiPart *pMultiPart,
|
|
int index,
|
|
char *contentID,
|
|
mime_content_type *pContentType,
|
|
void **ppTheBodyPart );
|
|
|
|
mime_multiPart_internal_t * mime_multiPart_internal_new();
|
|
int mime_multiPart_internal_free (mime_multiPart_internal_t *p);
|
|
mime_multiPart_internal_t * mime_multiPart_internal_clone (mime_multiPart_internal_t *p);
|
|
|
|
|
|
/* ---------------- MessagePart ---------------- */
|
|
struct mime_messagePart * mime_messagePart_new();
|
|
int mime_messagePart_free (struct mime_messagePart *p);
|
|
struct mime_messagePart * mime_messagePart_clone (struct mime_messagePart *p);
|
|
BOOLEAN mime_messagePart_isEmpty (struct mime_messagePart *pMessage);
|
|
|
|
mime_messagePart_internal_t * mime_messagePart_internal_new();
|
|
int mime_messagePart_internal_free (mime_messagePart_internal_t *p);
|
|
mime_messagePart_internal_t * mime_messagePart_internal_clone (mime_messagePart_internal_t *p);
|
|
|
|
|
|
/* ---------------- Message ---------------- */
|
|
mime_message_internal_t * mime_message_internal_new();
|
|
int mime_message_internal_free (mime_message_internal_t *p);
|
|
mime_message_internal_t * mime_message_internal_clone (mime_message_internal_t *p);
|
|
|
|
|
|
/* common constructor for both regular and dynamic parsing versions
|
|
* pass in a NULL parameter means regular parsing
|
|
* pass in a proper datasink to turn on dynamic parsing
|
|
*/
|
|
mime_message_t * mime_message_new (struct mimeDataSink *pDataSink);
|
|
int mime_message_free (struct mime_message *p);
|
|
struct mime_message * mime_message_clone (struct mime_message *p );
|
|
int mime_message_addBasicPart_clonable (struct mime_message * pMessage,
|
|
struct mime_basicPart * pBasicPart,
|
|
BOOLEAN clone );
|
|
int mime_message_addMultiPart_clonable (struct mime_message * pMessage,
|
|
struct mime_multiPart * pMultiPart,
|
|
BOOLEAN clone );
|
|
int mime_message_addMessagePart_clonable (struct mime_message * pMessage,
|
|
struct mime_messagePart * pMessagePart,
|
|
BOOLEAN clone );
|
|
BOOLEAN mime_message_isEmpty (struct mime_message *pMessage);
|
|
|
|
|
|
/* ---------------- Header ---------------- */
|
|
/*struct mime_header * mime_header_new (char *szName, char *szValue); */
|
|
int mime_header_add (struct mime_header *pStart, char *szName, char *szValue);
|
|
int mime_header_apend( mime_header_t *pStart, char *szName, char *szValue );
|
|
/*int mime_header_free (struct mime_header *p); */
|
|
int mime_header_freeAll (struct mime_header *pStart);
|
|
struct mime_header * mime_header_clone (struct mime_header *pMimeHeader);
|
|
|
|
|
|
|
|
/* -------------- Generic -------------- */
|
|
int mime_getStructType (void *pStruct);
|
|
|
|
void * mime_clone_any_part (void * pThePart, mime_content_type nContentType);
|
|
|
|
int mime_translateMimeInfo (char *name, char *value);
|
|
int mime_translateMimeEncodingType (char *s);
|
|
int mime_translateDispType (char *s, char **ppParam);
|
|
|
|
struct mimeInfo *mimeInfo_new();
|
|
int mimeInfo_free (struct mimeInfo *p);
|
|
int mimeInfo_init (struct mimeInfo *p, int nType1, char *szName1);
|
|
int mimeInfo_init2 (struct mimeInfo *p, int nType1, char *szName1, char *szValue1);
|
|
struct mimeInfo *mimeInfo_clone (struct mimeInfo *p);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif /* MIME_INTERNAL_H */
|