+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * 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
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * Copyright © 2006 Pierre Habouzit
+ */
+
+/*
+ * Copyright notice from original mutt:
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2000 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ * This file is part of mutt-ng, see http://www.muttng.org/.
+ * It's licensed under the GNU General Public License,
+ * please see the file GPL in the top level source directory.
+ */
+
+#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>
+
+/* Content-Type */
+enum {
+ TYPEOTHER,
+ TYPEAUDIO,
+ TYPEAPPLICATION,
+ TYPEIMAGE,
+ TYPEMESSAGE,
+ TYPEMODEL,
+ TYPEMULTIPART,
+ TYPETEXT,
+ TYPEVIDEO,
+ TYPEANY
+};
+
+/* Content-Transfer-Encoding */
+enum {
+ ENCOTHER,
+ ENC7BIT,
+ ENC8BIT,
+ ENCQUOTEDPRINTABLE,
+ ENCBASE64,
+ ENCBINARY,
+ ENCUUENCODED
+};
+
+/* Content-Disposition values */
+enum {
+ DISPINLINE,
+ DISPATTACH,
+ DISPFORMDATA
+};
+
+typedef struct parameter {
+ char *attribute;
+ char *value;
+ struct parameter *next;
+} PARAMETER;
+
+typedef struct address_t {
+ char *personal; /* real name of address */
+ char *mailbox; /* mailbox and host address */
+ int group; /* group mailbox? */
+ struct address_t *next;
+} address_t;
+
+typedef struct envelope_t {
+ address_t *return_path;
+ address_t *from;
+ address_t *to;
+ address_t *cc;
+ address_t *bcc;
+ address_t *sender;
+ address_t *reply_to;
+ address_t *mail_followup_to;
+ char *list_post; /* this stores a mailto URL, or nothing */
+ char *subject;
+ char *real_subj; /* offset of the real subject */
+ char *message_id;
+ char *supersedes;
+ 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 */
+ unsigned int irt_changed:1; /* In-Reply-To changed to link/break threads */
+ unsigned int refs_changed:1; /* References changed to break thread */
+} ENVELOPE;
+
+/* Information that helps in determing the Content-* of an attachment */
+typedef struct content {
+ long hibin; /* 8-bit characters */
+ long lobin; /* unprintable 7-bit chars (eg., control chars) */
+ long crlf; /* '\r' and '\n' characters */
+ long ascii; /* number of ascii chars */
+ long linemax; /* length of the longest line in the file */
+ unsigned int space:1; /* whitespace at the end of lines? */
+ unsigned int binary:1; /* long lines, or CR not in CRLF pair */
+ unsigned int from:1; /* has a line beginning with "From "? */
+ unsigned int dot:1; /* has a line consisting of a single dot? */
+ unsigned int cr:1; /* has CR, even when in a CRLF pair */
+} CONTENT;
+
+typedef struct body {
+ char *xtype; /* content-type if x-unknown */
+ char *subtype; /* content-type subtype */
+ PARAMETER *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.
+ * this info is used when invoking metamail,
+ * where we need to send the headers of the
+ * attachment
+ */
+ off_t offset; /* offset where the actual data begins */
+ off_t length; /* length (in bytes) of attachment */
+ char *filename; /* when sending a message, this is the file
+ * to which this structure refers
+ */
+ char *d_filename; /* filename to be used for the
+ * content-disposition header.
+ * If NULL, filename is used
+ * instead.
+ */
+ char *file_charset; /* charset of attached file */
+ CONTENT *content; /* structure used to store detailed info about
+ * the content of the attachment. this is used
+ * 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 */
+
+ struct attachptr *aptr; /* Menu information, used in recvattach.c */
+
+ signed short attach_count;
+
+ time_t stamp; /* time stamp of last
+ * encoding update.
+ */
+
+ unsigned int type:4; /* content-type primary type */
+ unsigned int encoding:3; /* content-transfer-encoding */
+ unsigned int disposition:2; /* content-disposition */
+ unsigned int use_disp:1; /* Content-Disposition uses filename= ? */
+ unsigned int unlink:1; /* flag to indicate the the file named by
+ * "filename" should be unlink()ed before
+ * free()ing this structure
+ */
+ unsigned int tagged:1;
+ unsigned int deleted:1; /* attachment marked for deletion */
+
+ unsigned int noconv:1; /* don't do character set conversion */
+ unsigned int force_charset:1; /* send mode: don't adjust the character set
+ when in send-mode. */
+ unsigned int is_signed_data:1; /* A lot of MUAs don't indicate S/MIME
+ signed-data correctly, e.g. they use
+ foo.p7m even for the name of signed
+ data. This flag is used to keep track
+ of the actual message type. It gets set
+ during the verification (which is done
+ if the encryption try failed) and check
+ by the function to figure the type of
+ the message. */
+
+ unsigned int goodsig:1; /* good cryptographic signature */
+ unsigned int warnsig:1; /* maybe good signature */
+ unsigned int badsig:1; /* bad cryptographic signature (needed to check encrypted s/mime-signatures) */
+
+ unsigned int collapsed:1; /* used by recvattach */
+ unsigned int attach_qualifies:1;
+
+} BODY;
+
+typedef struct header {
+ unsigned int security:11; /* bit 0-6: flags, bit 7,8: application.
+see: crypt.h pgplib.h, smime.h */
+
+ unsigned int mime:1; /* has a MIME-Version header? */
+ unsigned int flagged:1; /* marked important? */
+ unsigned int tagged:1;
+ unsigned int appended:1; /* has been saved */
+ unsigned int purged:1; /* bypassing the trash folder */
+ unsigned int deleted:1;
+ unsigned int changed:1;
+ unsigned int attach_del:1; /* has an attachment marked for deletion */
+ unsigned int old:1;
+ unsigned int read:1;
+ unsigned int expired:1; /* already expired? */
+ unsigned int superseded:1; /* got superseded? */
+ unsigned int replied:1;
+ unsigned int subject_changed:1; /* used for threading */
+ unsigned int threaded:1; /* used for threading */
+ unsigned int display_subject:1; /* used for threading */
+ unsigned int recip_valid:1; /* is_recipient is valid */
+ unsigned int active:1; /* message is not to be removed */
+ unsigned int trash:1; /* message is marked as trashed on disk.
+ * This flag is used by the maildir_trash
+ * option.
+ */
+
+ /* timezone of the sender of this message */
+ unsigned int zhours:5;
+ unsigned int zminutes:6;
+ unsigned int zoccident:1;
+
+ /* bits used for caching when searching */
+ unsigned int searched:1;
+ unsigned int matched:1;
+
+ /* tells whether the attach count is valid */
+ unsigned int attach_valid:1;
+
+ /* the following are used to support collapsing threads */
+ unsigned int collapsed:1; /* is this message part of a collapsed thread? */
+ unsigned int limited:1; /* is this message in a limited view? */
+ size_t num_hidden; /* number of hidden messages in this view */
+
+ short recipient; /* user_is_recipient()'s return value, cached */
+
+ int pair; /* color-pair to use when displaying in the index */
+
+ time_t date_sent; /* time when the message was sent (UTC) */
+ time_t received; /* time when the message was placed in the mailbox */
+ off_t offset; /* where in the stream does this message begin? */
+ int lines; /* how many lines in the body of this message? */
+ int index; /* the absolute (unsorted) message number */
+ int msgno; /* number displayed to the user */
+ int virtual; /* virtual message number */
+ int score;
+ 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);
+
+
+#endif /* MUTT_LIB_MIME_MIME_TYPES_H */