libclamav/message.h
e3aaff8e
 /*
2023340a
  *  Copyright (C) 2007-2008 Sourcefire, Inc.
  *
  *  Authors: Nigel Horne
e3aaff8e
  *
  *  This program is free software; you can redistribute it and/or modify
2023340a
  *  it under the terms of the GNU General Public License version 2 as
  *  published by the Free Software Foundation.
e3aaff8e
  *
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
48b7b4a7
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  *  MA 02110-1301, USA.
e3aaff8e
  */
 
 #ifndef	_MESSAGE_H
 #define	_MESSAGE_H
 
8affc406
 /* The contents could change, ONLY access in message.c */
e3aaff8e
 typedef struct message {
c7b69776
 	encoding_type	*encodingTypes;
b5231f5f
 	mime_type	mimeType;
c7b69776
 	int	numberOfEncTypes;	/* size of encodingTypes */
e3aaff8e
 	char	*mimeSubtype;
049a18b9
 	char	**mimeArguments;
e3aaff8e
 	char	*mimeDispositionType;	/* probably attachment */
 	text	*body_first, *body_last;
7891ef0b
 	cli_ctx	*ctx;	/* When set we can scan the message, otherwise NULL */
b5231f5f
 	int	numberOfArguments;	/* count of mimeArguments */
0c0894b8
 	int	base64chars;
a603478f
 
ae3bda56
 	/*
 	 * Markers for the start of various non MIME messages that could
 	 * be included within this message
 	 */
2673dc74
 	text	*bounce;	/* start of a bounced message */
 	text	*binhex;	/* start of a binhex message */
 	text	*yenc;		/* start of a yEnc message */
 	text	*encoding;	/* is the non MIME message encoded? */
1815e490
 	const text	*dedupedThisFar;
b5231f5f
 
 	char	base64_1, base64_2, base64_3;
 	unsigned	int	isInfected : 1;
92012beb
 	unsigned        int     isTruncated  : 1;
b5231f5f
 
e3aaff8e
 } message;
 
 message	*messageCreate(void);
 void	messageDestroy(message *m);
 void	messageReset(message *m);
53bfac08
 int	messageSetMimeType(message *m, const char *type);
e3aaff8e
 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);
d4884be0
 char	*messageFindArgument(const message *m, const char *variable);
641dbe1f
 char	*messageGetFilename(const message *m);
be32043e
 int	messageHasFilename(const message *m);
e3aaff8e
 void	messageSetEncoding(message *m, const char *enctype);
 encoding_type	messageGetEncoding(const message *m);
b2223aad
 int	messageAddLine(message *m, line_t *line);
564b3e07
 int	messageAddStr(message *m, const char *data);
b2223aad
 int	messageAddStrAtTop(message *m, const char *data);
94f051b0
 int	messageMoveText(message *m, text *t, message *old_message);
2673dc74
 text	*messageGetBody(message *m);
a9ecf619
 unsigned	char	*base64Flush(message *m, unsigned char *buf);
2673dc74
 fileblob	*messageToFileblob(message *m, const char *dir, int destroy);
 blob	*messageToBlob(message *m, int destroy);
0c0894b8
 text	*messageToText(message *m);
2673dc74
 text	*binhexBegin(message *m);
 text	*yEncBegin(message *m);
 text	*bounceBegin(message *m);
 text	*encodingLine(message *m);
4945127a
 unsigned char	*decodeLine(message *m, encoding_type enctype, const char *line, unsigned char *buf, size_t buflen);
5198de85
 int	isuuencodebegin(const char *line);
a603478f
 void	messageSetCTX(message *m, cli_ctx *ctx);
 int	messageContainsVirus(const message *m);
4270f93b
 int messageSavePartial(message *m, const char *dir, const char *id, unsigned part);
e3aaff8e
 
 #endif	/*_MESSAGE_H*/