#ifndef _MESSAGE_H
#define _MESSAGE_H
typedef struct message {
mime_type mimeType;
encoding_type *encodingTypes;
int numberOfEncTypes;
char *mimeSubtype;
int numberOfArguments;
char **mimeArguments;
char *mimeDispositionType;
text *body_first, *body_last;
char base64_1, base64_2, base64_3;
int base64chars;
const text *bounce;
const text *binhex;
const text *uuencode;
const text *yenc;
const text *encoding;
const text *dedupedThisFar;
} message;
message *messageCreate(void);
void messageDestroy(message *m);
void messageReset(message *m);
int messageSetMimeType(message *m, const char *type);
mime_type messageGetMimeType(const message *m);
void messageSetMimeSubtype(message *m, const char *subtype);
const char *messageGetMimeSubtype(const message *m);
void messageSetDispositionType(message *m, const char *disptype);
const char *messageGetDispositionType(const message *m);
void messageAddArgument(message *m, const char *arg);
void messageAddArguments(message *m, const char *arg);
const char *messageFindArgument(const message *m, const char *variable);
void messageSetEncoding(message *m, const char *enctype);
encoding_type messageGetEncoding(const message *m);
int messageAddLine(message *m, line_t *line);
int messageAddStr(message *m, const char *data);
int messageAddStrAtTop(message *m, const char *data);
const text *messageGetBody(const message *m);
void messageClean(message *m);
fileblob *messageToFileblob(message *m, const char *dir);
blob *messageToBlob(message *m);
text *messageToText(message *m);
const text *binhexBegin(const message *m);
const text *uuencodeBegin(const message *m);
const text *yEncBegin(const message *m);
const text *bounceBegin(const message *m);
const text *encodingLine(const message *m);
void messageClearMarkers(message *m);
unsigned char *decodeLine(message *m, encoding_type enctype, const char *line, unsigned char *buf, size_t buflen);
int isuuencodebegin(const char *line);
#endif