From d5fc962299f48696697e29f323e78c8bba6ca2d1 Mon Sep 17 00:00:00 2001 From: Pierre Habouzit Date: Sun, 5 Nov 2006 16:16:47 +0100 Subject: [PATCH 1/1] move rfc822 related types into lib-mime/mime-types.h out of mutt.h. Signed-off-by: Pierre Habouzit --- lib-mime/Makefile.am | 5 +- lib-mime/mime-types.h | 289 +++++++++++++++++++++++++++++++++++++++++ lib-mime/mime.h | 89 +------------ lib-mime/rfc2047.c | 1 - lib-mime/rfc822parse.c | 8 +- mutt.h | 168 ------------------------ 6 files changed, 294 insertions(+), 266 deletions(-) create mode 100644 lib-mime/mime-types.h diff --git a/lib-mime/Makefile.am b/lib-mime/Makefile.am index 0e9fa5a..b06f4f7 100644 --- a/lib-mime/Makefile.am +++ b/lib-mime/Makefile.am @@ -1,7 +1,8 @@ noinst_LIBRARIES = libmime.a -libmime_a_SOURCES = mime.h mime.c rfc822address.c rfc822parse.c rfc2047.c rfc2231.c +libmime_a_SOURCES = mime.h mime-types.h \ + mime.c rfc822address.c rfc822parse.c rfc2047.c rfc2231.c -noinst_HEADERS = mime.h +noinst_HEADERS = mime.h mime-types.h -include ../cflags.mk diff --git a/lib-mime/mime-types.h b/lib-mime/mime-types.h new file mode 100644 index 0000000..3744cbc --- /dev/null +++ b/lib-mime/mime-types.h @@ -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 + * Copyright (C) 1999-2000 Thomas Roessler + * + * 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 +#include +#include + +/* 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 */ diff --git a/lib-mime/mime.h b/lib-mime/mime.h index 4f2d62c..498473c 100644 --- a/lib-mime/mime.h +++ b/lib-mime/mime.h @@ -32,94 +32,7 @@ #include -#include -#include -#include - -/* 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; - - -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); - +#include "mime-types.h" extern const char MimeSpecials[]; extern const char *BodyTypes[]; diff --git a/lib-mime/rfc2047.c b/lib-mime/rfc2047.c index 26c68ce..3bd353c 100644 --- a/lib-mime/rfc2047.c +++ b/lib-mime/rfc2047.c @@ -33,7 +33,6 @@ #include -#include "mutt.h" #include "charset.h" #include "thread.h" diff --git a/lib-mime/rfc822parse.c b/lib-mime/rfc822parse.c index 2c8f4ad..5078f19 100644 --- a/lib-mime/rfc822parse.c +++ b/lib-mime/rfc822parse.c @@ -26,12 +26,7 @@ * please see the file GPL in the top level source directory. */ -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include +#include #include #include @@ -42,7 +37,6 @@ #include -#include "mutt.h" #include "enter.h" #include "recvattach.h" #include "mx.h" diff --git a/mutt.h b/mutt.h index 27b1239..d418c38 100644 --- a/mutt.h +++ b/mutt.h @@ -524,174 +524,6 @@ int mutt_matches_ignore (const char *, LIST *); void mutt_init (int, LIST *); -/* 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; - typedef struct thread { unsigned int fake_thread:1; unsigned int duplicate_thread:1; -- 2.20.1