view src/lib-mail/message-parser.h @ 105:31034993473c HEAD

there was no need for MessagePart->pos.virtual_pos, so removed it.
author Timo Sirainen <tss@iki.fi>
date Sun, 01 Sep 2002 02:57:37 +0300
parents d493b9cc265e
children 5fe3e04ca8d9
line wrap: on
line source

#ifndef __MESSAGE_PARSER_H
#define __MESSAGE_PARSER_H

typedef struct _MessagePart MessagePart;
typedef struct _MessagePosition MessagePosition;
typedef struct _MessageSize MessageSize;

struct _MessageSize {
	uoff_t physical_size;
	uoff_t virtual_size;
	unsigned int lines;
};

struct _MessagePart {
	MessagePart *parent;
	MessagePart *next;
	MessagePart *children;

	uoff_t physical_pos; /* absolute position from beginning of message */
	MessageSize header_size;
	MessageSize body_size;

	unsigned int multipart:1;
	unsigned int multipart_digest:1;
	unsigned int message_rfc822:1;
	unsigned int text:1; /* content-type: text/.. */
	unsigned int binary:1; /* content-transfer-encoding: binary */

	void *context;
};

/* NOTE: name and value aren't \0-terminated */
typedef void (*MessageHeaderFunc)(MessagePart *part,
				  const char *name, unsigned int name_len,
				  const char *value, unsigned int value_len,
				  void *context);

/* func is called for each field in message header. */
MessagePart *message_parse(Pool pool, IOBuffer *inbuf,
			   MessageHeaderFunc func, void *context);

/* Call func for each field in message header. Fills the hdr_size.
   part can be NULL, just make sure your header function works with it.
   This function doesn't use temp. mempool so your header function may save
   return values to it. When finished, inbuf will point to beginning of
   message body. */
void message_parse_header(MessagePart *part, IOBuffer *inbuf,
			  MessageSize *hdr_size,
			  MessageHeaderFunc func, void *context);

#endif