diff src/lib-mail/message-parser.h @ 0:3b1985cbc908 HEAD

Initial revision
author Timo Sirainen <tss@iki.fi>
date Fri, 09 Aug 2002 12:15:38 +0300
parents
children 1b34ec11fff8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-mail/message-parser.h	Fri Aug 09 12:15:38 2002 +0300
@@ -0,0 +1,55 @@
+#ifndef __MESSAGE_PARSER_H
+#define __MESSAGE_PARSER_H
+
+typedef struct _MessagePart MessagePart;
+typedef struct _MessagePosition MessagePosition;
+typedef struct _MessageSize MessageSize;
+
+struct _MessagePosition {
+	off_t physical_pos;
+	off_t virtual_pos;
+};
+
+struct _MessageSize {
+	size_t physical_size;
+	size_t virtual_size;
+	unsigned int lines;
+};
+
+struct _MessagePart {
+	MessagePart *parent;
+	MessagePart *next;
+	MessagePart *children;
+
+        MessagePosition pos;
+	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 *user_data;
+};
+
+/* 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 *user_data);
+
+/* func is called for each field in message header. */
+MessagePart *message_parse(Pool pool, const char *msg, size_t size,
+			   MessageHeaderFunc func, void *user_data);
+
+/* 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. */
+void message_parse_header(MessagePart *part, const char *msg, size_t size,
+			  MessageSize *hdr_size,
+			  MessageHeaderFunc func, void *user_data);
+
+#endif