move rfc822 related types into lib-mime/mime-types.h out of mutt.h.
[apps/madmutt.git] / lib-mime / mime-types.h
diff --git a/lib-mime/mime-types.h b/lib-mime/mime-types.h
new file mode 100644 (file)
index 0000000..3744cbc
--- /dev/null
@@ -0,0 +1,289 @@
+/*
+ *  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 */