#ifndef MUTT_LIB_MIME_MIME_TYPES_H
#define MUTT_LIB_MIME_MIME_TYPES_H
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <lib-lib/mem.h>
-#include <lib-lib/buffer.h>
-#include <lib-lib/list.h>
+#include <lib-lib/lib-lib.h>
/* Content-Type */
enum {
ENCQUOTEDPRINTABLE,
ENCBASE64,
ENCBINARY,
- ENCUUENCODED
+ ENCUUENCODED,
};
/* Content-Disposition values */
DISPFORMDATA
};
-typedef struct parameter {
- char *attribute;
- char *value;
- struct parameter *next;
-} PARAMETER;
+/****************************************************************************/
+/* rfc822 addresses */
+/****************************************************************************/
typedef struct address_t {
+ struct address_t *next;
char *personal; /* real name of address */
char *mailbox; /* mailbox and host address */
int group; /* group mailbox? */
- struct address_t *next;
} address_t;
+DO_INIT(address_t, address);
+static inline void address_wipe(address_t *addr) {
+ p_delete(&addr->personal);
+ p_delete(&addr->mailbox);
+}
+
+DO_NEW(address_t, address);
+DO_DELETE(address_t, address);
+DO_SLIST(address_t, address, address_delete);
+
+/****************************************************************************/
+/* rfc822 header parameters */
+/****************************************************************************/
+
+typedef struct parameters_t parameters_t;
+
+parameters_t *parameter_new();
+parameters_t *parameter_dup(parameters_t *);
+char *parameter_getval(parameters_t *, const char *);
+void parameter_setval(parameters_t *, const char *, const char *);
+void parameter_delval(parameters_t * p, const char *);
+void parameter_set_boundary(parameters_t *);
+void parameter_purge_empty(parameters_t *);
+
+int parameter_equal(const parameters_t *, const parameters_t *);
+
+void parameter_foreach(const parameters_t *,
+ void (*f)(const char *, const char *));
+
+/****************************************************************************/
+/* rfc822 envelopes */
+/****************************************************************************/
+
typedef struct envelope_t {
address_t *return_path;
address_t *from;
char *date;
char *x_label;
char *organization;
-#ifdef USE_NNTP
- char *newsgroups;
- char *xref;
- char *followup_to;
- char *x_comment_to;
-#endif
BUFFER *spam;
- LIST *references; /* message references (in reverse order) */
- LIST *in_reply_to; /* in-reply-to header content */
- LIST *userhdrs; /* user defined headers */
+ string_list_t *references; /* message references (in reverse order) */
+ string_list_t *in_reply_to; /* in-reply-to header content */
+ string_list_t *userhdrs; /* user defined headers */
unsigned int irt_changed:1; /* In-Reply-To changed to link/break threads */
unsigned int refs_changed:1; /* References changed to break thread */
} ENVELOPE;
+DO_INIT(ENVELOPE, envelope);
+void envelope_wipe(ENVELOPE*);
+
+DO_NEW(ENVELOPE, envelope);
+DO_DELETE(ENVELOPE, envelope);
+
+/****************************************************************************/
+/* rfc822 content-* */
+/****************************************************************************/
+
/* Information that helps in determing the Content-* of an attachment */
typedef struct content {
long hibin; /* 8-bit characters */
unsigned int cr:1; /* has CR, even when in a CRLF pair */
} CONTENT;
+
+/****************************************************************************/
+/* rfc822 Bodies */
+/****************************************************************************/
+
typedef struct body {
+ struct body *next; /* next attachment in the list */
+
char *xtype; /* content-type if x-unknown */
char *subtype; /* content-type subtype */
- PARAMETER *parameter; /* parameters of the content-type */
+ parameters_t *parameter; /* parameters of the content-type */
char *description; /* content-description */
char *form_name; /* Content-Disposition form-data name param */
off_t hdr_offset; /* offset in stream where the headers begin.
* to determine what content-transfer-encoding
* is required when sending mail.
*/
- struct body *next; /* next attachment in the list */
struct body *parts; /* parts of a multipart or message/rfc822 */
struct header *hdr; /* header information for message/rfc822 */
unsigned int collapsed:1; /* used by recvattach */
unsigned int attach_qualifies:1;
-
} BODY;
+static inline BODY *body_init(BODY *b) {
+ b->disposition = DISPATTACH;
+ b->use_disp = 1;
+ return b;
+}
+void body_wipe(BODY *);
+
+DO_NEW(BODY, body);
+DO_DELETE(BODY, body);
+DO_SLIST(BODY, body, body_delete);
+
+
+/****************************************************************************/
+/* rfc822 Headers */
+/****************************************************************************/
+
typedef struct header {
unsigned int security:11; /* bit 0-6: flags, bit 7,8: application.
see: crypt.h pgplib.h, smime.h */
ENVELOPE *env; /* envelope information */
BODY *content; /* list of MIME parts */
char *path;
-#ifdef USE_NNTP
- int article_num;
-#endif
char *tree; /* character string to print thread tree */
struct thread *thread;
short attach_total;
-#ifdef MIXMASTER
- LIST *chain;
-#endif
-
int refno; /* message number on server */
void *data; /* driver-specific data */
char *maildir_flags; /* unknown maildir flags */
} HEADER;
-DO_INIT(address_t, address);
-void address_wipe(address_t *);
-
-DO_NEW(address_t, address);
-DO_DELETE(address_t, address);
-DO_SLIST(address_t, address);
+DO_INIT(HEADER, header);
+void header_wipe(HEADER *);
+DO_NEW(HEADER, header);
+DO_DELETE(HEADER, header);
#endif /* MUTT_LIB_MIME_MIME_TYPES_H */