summaryrefslogtreecommitdiff
path: root/testsuite/mimetest.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/mimetest.c')
-rw-r--r--testsuite/mimetest.c294
1 files changed, 0 insertions, 294 deletions
diff --git a/testsuite/mimetest.c b/testsuite/mimetest.c
deleted file mode 100644
index 4bc05f42b..000000000
--- a/testsuite/mimetest.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/* GNU Mailutils -- a suite of utilities for electronic mail
- Copyright (C) 1999-2019 Free Software Foundation, Inc.
-
- GNU Mailutils 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 3, or (at your option)
- any later version.
-
- GNU Mailutils 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 GNU Mailutils. If not, see <http://www.gnu.org/licenses/>. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <strings.h>
-#include <unistd.h>
-
-#include <sys/types.h>
-
-#include <mailutils/mailutils.h>
-
-void message_display_parts (mu_message_t msg, int indent);
-
-const char *from;
-const char *subject;
-const char *charset;
-int print_attachments;
-int indent_level = 4;
-
-void
-print_file (const char *fname, int indent)
-{
- char buf[128];
- FILE *fp = fopen (fname, "r");
-
- if (!fp)
- {
- fprintf (stderr, "can't open file %s: %s", fname, strerror (errno));
- return;
- }
-
- while (fgets (buf, sizeof buf, fp))
- printf ("%*.*s%s", indent, indent, "", buf);
- fclose (fp);
- unlink (fname);
-}
-
-int
-main (int argc, char **argv)
-{
- mu_mailbox_t mbox = NULL;
- size_t i;
- size_t count = 0;
- char *mailbox_name;
- int debug = 0;
-
- for (i = 1; i < argc; i++)
- {
- if (strcmp (argv[i], "-d") == 0)
- debug = 1;
- else if (strcmp (argv[i], "-p") == 0)
- print_attachments = 1;
- else if (strcmp (argv[i], "-i") == 0)
- {
- if (++i == argc)
- {
- mu_error ("-i requires argument");
- exit (1);
- }
- indent_level = strtoul (argv[i], NULL, 0);
- }
- else if (strcmp (argv[i], "-c") == 0)
- {
- if (++i == argc)
- {
- mu_error ("-c requires argument");
- exit (1);
- }
- charset = argv[i];
- }
- else
- break;
- }
-
- mailbox_name = argv[i];
-
- /* Registration. */
- mu_registrar_record (mu_imap_record);
- mu_registrar_record (mu_pop_record);
- mu_registrar_record (mu_mbox_record);
- mu_registrar_set_default_record (mu_mbox_record);
-
- MU_ASSERT (mu_mailbox_create_default (&mbox, mailbox_name));
-
- /* Debugging trace. */
- if (debug)
- {
- mu_debug_set_category_level (MU_DEBCAT_MAILBOX,
- MU_DEBUG_LEVEL_UPTO (MU_DEBUG_PROT));
- }
-
- /* Open the mailbox for reading only. */
- MU_ASSERT (mu_mailbox_open (mbox, MU_STREAM_READ));
-
- /* Iterate through the entire message set. */
- MU_ASSERT (mu_mailbox_messages_count (mbox, &count));
-
- for (i = 1; i <= count; ++i)
- {
- mu_message_t msg;
- mu_header_t hdr;
- size_t nparts;
- size_t msize, nlines;
-
- MU_ASSERT (mu_mailbox_get_message (mbox, i, &msg));
- MU_ASSERT (mu_message_size (msg, &msize));
- MU_ASSERT (mu_message_lines (msg, &nlines));
- MU_ASSERT (mu_message_get_header (msg, &hdr));
- if (mu_header_sget_value (hdr, MU_HEADER_FROM, &from))
- from = "";
- if (mu_header_sget_value (hdr, MU_HEADER_SUBJECT, &subject))
- subject = "";
- printf ("Message:%lu\n", (unsigned long) i);
- printf ("From:%s\n", from);
- printf ("Subject:%s\n", subject);
-
- MU_ASSERT (mu_message_get_num_parts (msg, &nparts));
- printf ("Number of parts in message:%lu\n",
- (unsigned long) nparts);
- printf ("Total message size:%lu/%lu\n",
- (unsigned long) msize, (unsigned long) nlines);
- message_display_parts (msg, 0);
- }
- mu_mailbox_close (mbox);
- mu_mailbox_destroy (&mbox);
- return 0;
-}
-
-char buf[2048];
-
-static void
-print_message_part_sizes (mu_message_t part, int indent)
-{
- mu_body_t body;
- mu_header_t hdr;
- size_t msize, mlines, hsize, hlines, bsize, blines;
-
- MU_ASSERT (mu_message_size (part, &msize));
- MU_ASSERT (mu_message_lines (part, &mlines));
- MU_ASSERT (mu_message_get_header (part, &hdr));
- MU_ASSERT (mu_header_size (hdr, &hsize));
- MU_ASSERT (mu_header_lines (hdr, &hlines));
- MU_ASSERT (mu_message_get_body (part, &body));
- MU_ASSERT (mu_body_size (body, &bsize));
- MU_ASSERT (mu_body_lines (body, &blines));
- printf ("%*.*sMessage part size:%lu/%lu: %lu/%lu, %lu/%lu\n",
- indent, indent, "",
- (unsigned long) msize, (unsigned long) mlines,
- (unsigned long) hsize, (unsigned long) hlines,
- (unsigned long) bsize, (unsigned long) blines);
-}
-
-void
-message_display_parts (mu_message_t msg, int indent)
-{
- int ret, j;
- size_t nparts;
- mu_message_t part;
- mu_header_t hdr;
- mu_stream_t str;
- mu_body_t body;
- int ismulti;
- size_t nbytes;
-
- /* How many parts does the message has? */
- if ((ret = mu_message_get_num_parts (msg, &nparts)) != 0)
- {
- fprintf (stderr, "mu_message_get_num_parts - %s\n", mu_strerror (ret));
- exit (2);
- }
-
- /* Iterate through all the parts.
- Treat type "message/rfc822" differently, since it is a message of
- its own that can have other subparts(recursive). */
- for (j = 1; j <= nparts; j++)
- {
- int status;
- const char *hvalue;
- char *type = NULL;
- const char *encoding = "";
-
- MU_ASSERT (mu_message_get_part (msg, j, &part));
- MU_ASSERT (mu_message_get_header (part, &hdr));
- status = mu_header_sget_value (hdr, MU_HEADER_CONTENT_TYPE,
- &hvalue);
- if (status == MU_ERR_NOENT)
- /* nothing */;
- else if (status != 0)
- mu_error ("Cannot get header value: %s", mu_strerror (status));
- else
- {
- status = mu_mimehdr_aget_disp (hvalue, &type);
- if (status)
- mu_error ("Cannot extract content type field: %s",
- mu_strerror (status));
- }
- printf ("%*.*sType of part %d:%s\n", indent, indent, "",
- j, mu_prstr (type));
- print_message_part_sizes (part, indent);
- if (mu_header_sget_value (hdr, MU_HEADER_CONTENT_TRANSFER_ENCODING,
- &encoding))
- encoding = "";
- ismulti = 0;
- if ((type
- && mu_c_strcasecmp (type, "message/rfc822") == 0)
- || (mu_message_is_multipart (part, &ismulti) == 0 && ismulti))
- {
- if (!ismulti)
- MU_ASSERT (mu_message_unencapsulate (part, &part, NULL));
-
- MU_ASSERT (mu_message_get_header (part, &hdr));
- if (mu_header_sget_value (hdr, MU_HEADER_FROM, &from))
- from = "";
- if (mu_header_sget_value (hdr, MU_HEADER_SUBJECT, &subject))
- subject = "";
- printf ("%*.*sEncapsulated message:\n",
- indent, indent, "");
- printf ("%*.*sFrom:%s\n", indent, indent, "", from);
- printf ("%*.*sSubject:%s\n", indent, indent, "", subject);
- printf ("%*.*sBegin\n", indent, indent, "");
- message_display_parts (part, indent + indent_level);
- mu_message_destroy (&part, NULL);
- }
- else if (!type
- || (mu_c_strcasecmp (type, "text/plain") == 0)
- || (mu_c_strcasecmp (type, "text/html")) == 0)
- {
- printf ("%*.*sText Message\n", indent, indent, "");
- printf ("%*.*sBegin\n", indent, indent, "");
- mu_message_get_body (part, &body);
- mu_body_get_streamref (body, &str);
- /* Make sure the original body stream is not closed when
- str gets destroyed */
- mu_filter_create (&str, str, encoding, MU_FILTER_DECODE,
- MU_STREAM_READ);
-
- while (mu_stream_readline (str, buf, sizeof (buf), &nbytes) == 0
- && nbytes)
- {
- printf ("%*.*s%s", indent, indent, "", buf);
- }
- mu_stream_destroy (&str);
- }
- else
- {
- /* Save the attachements. */
- char *fname = NULL;
-
- mu_message_aget_decoded_attachment_name (part, charset,
- &fname, NULL);
- if (fname == NULL)
- fname = mu_tempname (NULL);
-
- printf ("%*.*sAttachment - saving [%s]\n", indent, indent, "",
- fname);
- printf ("%*.*sBegin\n", indent, indent, "");
- if (charset)
- {
- mu_mime_io_buffer_t info;
- mu_mime_io_buffer_create (&info);
- mu_mime_io_buffer_set_charset (info, charset);
- MU_ASSERT (mu_message_save_attachment (part, NULL, info));
- mu_mime_io_buffer_destroy (&info);
- }
- else
- MU_ASSERT (mu_message_save_attachment (part, fname, NULL));
- if (print_attachments)
- print_file (fname, indent);
- free (fname);
- }
- printf ("\n%*.*sEnd\n", indent, indent, "");
- free (type);
- }
-}
-

Return to:

Send suggestions and report system problems to the System administrator.