[svn-upgrade] Integrating new upstream version, mimetic (0.9.2) upstream/0.9.2
authorgregor herrmann <gregoa@debian.org>
Sun, 21 Jan 2007 20:07:54 +0000 (20:07 -0000)
committergregor herrmann <gregoa@debian.org>
Sun, 21 Jan 2007 20:07:54 +0000 (20:07 -0000)
26 files changed:
ChangeLog
TODO
configure
configure.in
examples/Makefile.am
examples/Makefile.in
examples/smime2xml.cxx [new file with mode: 0644]
examples/smimestruct.cxx [new file with mode: 0644]
examples/structure.cxx
mimetic/Makefile.am
mimetic/Makefile.in
mimetic/config.h [deleted file]
mimetic/config_win32.h
mimetic/libconfig.h
mimetic/message.cxx
mimetic/message.h
mimetic/os/directory.h
mimetic/os/fileop.cxx
mimetic/os/mmfile.cxx
mimetic/parser/itparser.h
mimetic/rfc822/Makefile.in
mimetic/rfc822/datetime.cxx
mimetic/rfc822/datetime.h
mimetic/rfc822/messageid.h
mimetic/version.cxx
test/Makefile.in

index 500bc5b604fff2c94585aa68d3d4122ea91fa89c..83a223c59adb5561c2ece851115283f02a6861a1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
-x.x.x, 0.9.2
+21.01.2007, 0.9.2
        - Solaris compatibility fixes (thanks to Shan Will)
+       - itparser.h fixes (thanks to Phil Endecott and Joshua Chang)
+       - DateTime set fix
 
 10.04.2006, 0.9.1
        - utils.h: gcc 4.1 compatibility fix
diff --git a/TODO b/TODO
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..978da3d4e1bc5595e6e1147cf2f6df83296d1c37 100644 (file)
--- a/TODO
+++ b/TODO
@@ -0,0 +1,70 @@
+    Content-MD5 ?
+
+    test: multiple field w/ the same name must be preserved (Received:)
+    
+    codecs bench/optimization
+    
+    MimeEntity cpyctor & op=
+    
+    b64 & qp examples converted to File::iterator
+    
+    BUG: istring::find e istring::compare NON sono case insensitive
+    
+    override MimeEntity::write for binary entities (application/* etc.) so
+    we don't need to store files in memory but we can just print them out
+    when needed
+
+    usare size_t(in config.h)  invece di unsigned int
+
+    opt: create boundaries using char that are not allowed for
+    base64 encoded stuff
+
+    docs docs docs...    
+    
+    coding style check
+    
+    MMFile and StdFile tests
+
+    MMFile and StdFile must be handled by configure
+    
+    inline keyword where needed
+    
+    omimeentity_iterator:
+        copy(beg,end,omimeentity_itarator<char>(entity))
+    imimeentity_iterator:
+        imimeentity_itarator beg(entity), end;
+        copy(beg,end, outputit)
+
+    char_type clean
+    error handling/codes
+    
+    message/external-body
+    
+    - message-id part-id
+      - multipart/related
+
+    rfc822 update:
+        - rfc 1123
+        - rfc 2822 (822bis)
+
+    todo:
+      -? usenet msg format test
+    rfc822:
+      - DateTie > < >= <= == !=
+      - DateTime() ctor == Now()
+      - tutte le classi devono ritornare la stringa di inizializzazione se
+        sono state costruite tramite stringa di input in modo da minimizzare
+        la differenza tra contenuti parsed e quelli reali
+      - field "\"" quoting support
+      
+      -? field << Charset(IS08859-1) << base64str << 
+          Charset(ISO8859-4) << 34 << 55;     
+        field.append(Charset(), base64str);
+
+    ::::
+      - uuencode binhex
+      - RFC2231
+      - check rfc2047
+
+      S/MIME
+      PGP/MIME
index 70ef0b72272e4561bcaddcd63cb40da4d3ac2970..f8a944125a76a95730fe3d3ae9ad5e5d96714d2e 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Revision: 1.32 .
+# From configure.in Revision: 1.35 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.59.
 #
@@ -1778,7 +1778,7 @@ fi
 
 PACKAGE=mimetic
 
-VERSION=0.9.1
+VERSION=0.9.2
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
@@ -20531,6 +20531,9 @@ echo "$as_me: error: I'm unable to find STLport library. You must call configure
   LDFLAGS="$LDFLAGS ${stlp_ldflags}"
 fi
 
+CXXFLAGS="$CXXFLAGS -DHAVE_MIMETIC_CONFIG"
+CFLAGS="$CXXFLAGS"
+
  echo "$as_me:$LINENO: checking STL required features" >&5
 echo $ECHO_N "checking STL required features... $ECHO_C" >&6
  cat >conftest.$ac_ext <<_ACEOF
 fi
 
 
+for ac_header in sys/stat.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_cxx_werror_flag"                         || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/types.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_cxx_werror_flag"                         || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
 for ac_header in sys/time.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
index d58da24da9288d5b4b57566681fb6b13f088a1b9..f9e7f8552ff78fc2f23a6073f9044bef7fffe713 100644 (file)
@@ -1,9 +1,9 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_REVISION($Revision: 1.32 $)
+AC_REVISION($Revision: 1.35 $)
 AC_INIT(mimetic/mimetic.h)
 AC_CANONICAL_SYSTEM
 
-AM_INIT_AUTOMAKE(mimetic,0.9.1)
+AM_INIT_AUTOMAKE(mimetic,0.9.2)
 AM_CONFIG_HEADER(mimetic/config.h)
 
 dnl Checks for programs.
@@ -150,6 +150,9 @@ if test "$enable_stlport" = "yes"; then
   LDFLAGS="$LDFLAGS ${stlp_ldflags}"
 fi
 
+CXXFLAGS="$CXXFLAGS -DHAVE_MIMETIC_CONFIG"
+CFLAGS="$CXXFLAGS"
+
 dnl ** check for STL required features
  AC_MSG_CHECKING([STL required features])
  AC_TRY_COMPILE([#include <string>],
@@ -171,6 +174,8 @@ AC_TYPE_OFF_T
 AC_TYPE_UID_T
 
 AC_HEADER_DIRENT
+AC_CHECK_HEADERS(sys/stat.h)
+AC_CHECK_HEADERS(sys/types.h)
 AC_CHECK_HEADERS(sys/time.h)
 AC_CHECK_HEADERS(stdint.h)
 
index 72c1b1ddcad24269ebbc49e132bfb6df2bc51dfc..8b34e980bc5568c2016fdbad5fe735a746abcbcd 100644 (file)
@@ -1,10 +1,12 @@
 EXTRA_DIST=test.msg
 INCLUDES=-I$(top_srcdir)
 LDADD=../mimetic/libmimetic.la
-EXAMPLES=b64 qp exbin structure catpart buildidx search mbox mm
+EXAMPLES=b64 qp exbin structure catpart buildidx search mbox mm \
+    smime2xml smimestruct
 
 clean-local:
-       rm -f b64 qp exbin structure catpart buildidx search mbox mm
+       rm -f b64 qp exbin structure catpart buildidx search mbox mm \
+        smime2xml smimestruct
 
 examples: $(EXAMPLES)
 
@@ -27,3 +29,10 @@ search_SOURCES=search.cxx
 mbox_SOURCES=mbox.cxx
 
 mm_SOURCES=mm.cxx mm.h engine.h engine.cxx cmdline.cxx cmdline.h
+
+smimestruct_SOURCES=smimestruct.cxx
+smimestruct_LDADD=-lcrypto -lssl ../mimetic/libmimetic.la
+
+smime2xml_SOURCES=smime2xml.cxx
+smime2xml_LDADD=-lcrypto -lssl ../mimetic/libmimetic.la
+
index 55852386cafe26882848347fb73ac261aaaa4e98..7f01efd62ca81aaf3f8e8fbcb9f30dfb1662e0a4 100644 (file)
@@ -93,7 +93,8 @@ VERSION = @VERSION@
 EXTRA_DIST = test.msg
 INCLUDES = -I$(top_srcdir)
 LDADD = ../mimetic/libmimetic.la
-EXAMPLES = b64 qp exbin structure catpart buildidx search mbox mm
+EXAMPLES = b64 qp exbin structure catpart buildidx search mbox mm     smime2xml smimestruct
+
 
 EXTRA_PROGRAMS = $(EXAMPLES)
 
@@ -114,6 +115,12 @@ search_SOURCES = search.cxx
 mbox_SOURCES = mbox.cxx
 
 mm_SOURCES = mm.cxx mm.h engine.h engine.cxx cmdline.cxx cmdline.h
+
+smimestruct_SOURCES = smimestruct.cxx
+smimestruct_LDADD = -lcrypto -lssl ../mimetic/libmimetic.la
+
+smime2xml_SOURCES = smime2xml.cxx
+smime2xml_LDADD = -lcrypto -lssl ../mimetic/libmimetic.la
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = ../mimetic/config.h
 CONFIG_CLEAN_FILES = 
@@ -158,6 +165,12 @@ mm_OBJECTS =  mm.$(OBJEXT) engine.$(OBJEXT) cmdline.$(OBJEXT)
 mm_LDADD = $(LDADD)
 mm_DEPENDENCIES =  ../mimetic/libmimetic.la
 mm_LDFLAGS = 
+smime2xml_OBJECTS =  smime2xml.$(OBJEXT)
+smime2xml_DEPENDENCIES =  ../mimetic/libmimetic.la
+smime2xml_LDFLAGS = 
+smimestruct_OBJECTS =  smimestruct.$(OBJEXT)
+smimestruct_DEPENDENCIES =  ../mimetic/libmimetic.la
+smimestruct_LDFLAGS = 
 CXXFLAGS = @CXXFLAGS@
 CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
 LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -175,8 +188,8 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
 
 TAR = tar
 GZIP_ENV = --best
-SOURCES = $(b64_SOURCES) $(qp_SOURCES) $(exbin_SOURCES) $(structure_SOURCES) $(catpart_SOURCES) $(buildidx_SOURCES) $(search_SOURCES) $(mbox_SOURCES) $(mm_SOURCES)
-OBJECTS = $(b64_OBJECTS) $(qp_OBJECTS) $(exbin_OBJECTS) $(structure_OBJECTS) $(catpart_OBJECTS) $(buildidx_OBJECTS) $(search_OBJECTS) $(mbox_OBJECTS) $(mm_OBJECTS)
+SOURCES = $(b64_SOURCES) $(qp_SOURCES) $(exbin_SOURCES) $(structure_SOURCES) $(catpart_SOURCES) $(buildidx_SOURCES) $(search_SOURCES) $(mbox_SOURCES) $(mm_SOURCES) $(smime2xml_SOURCES) $(smimestruct_SOURCES)
+OBJECTS = $(b64_OBJECTS) $(qp_OBJECTS) $(exbin_OBJECTS) $(structure_OBJECTS) $(catpart_OBJECTS) $(buildidx_OBJECTS) $(search_OBJECTS) $(mbox_OBJECTS) $(mm_OBJECTS) $(smime2xml_OBJECTS) $(smimestruct_OBJECTS)
 
 all: all-redirect
 .SUFFIXES:
@@ -268,6 +281,14 @@ mbox$(EXEEXT): $(mbox_OBJECTS) $(mbox_DEPENDENCIES)
 mm$(EXEEXT): $(mm_OBJECTS) $(mm_DEPENDENCIES)
        @rm -f mm$(EXEEXT)
        $(CXXLINK) $(mm_LDFLAGS) $(mm_OBJECTS) $(mm_LDADD) $(LIBS)
+
+smime2xml$(EXEEXT): $(smime2xml_OBJECTS) $(smime2xml_DEPENDENCIES)
+       @rm -f smime2xml$(EXEEXT)
+       $(CXXLINK) $(smime2xml_LDFLAGS) $(smime2xml_OBJECTS) $(smime2xml_LDADD) $(LIBS)
+
+smimestruct$(EXEEXT): $(smimestruct_OBJECTS) $(smimestruct_DEPENDENCIES)
+       @rm -f smimestruct$(EXEEXT)
+       $(CXXLINK) $(smimestruct_LDFLAGS) $(smimestruct_OBJECTS) $(smimestruct_LDADD) $(LIBS)
 .cxx.o:
        $(CXXCOMPILE) -c $<
 .cxx.obj:
@@ -319,6 +340,30 @@ distdir: $(DISTFILES)
            || cp -p $$d/$$file $(distdir)/$$file || :; \
          fi; \
        done
+smimestruct.o: smimestruct.cxx ../mimetic/mimetic.h \
+       ../mimetic/libconfig.h ../mimetic/config.h ../mimetic/version.h \
+       ../mimetic/body.h ../mimetic/rfc822/body.h \
+       ../mimetic/codec/code.h ../mimetic/codec/codec_base.h \
+       ../mimetic/codec/codec_chain.h ../mimetic/codec/other_codecs.h \
+       ../mimetic/utils.h ../mimetic/strutils.h \
+       ../mimetic/mimeentitylist.h ../mimetic/os/file.h \
+       ../mimetic/os/stdfile.h ../mimetic/os/fileop.h \
+       ../mimetic/os/file_iterator.h ../mimetic/os/mmfile.h \
+       ../mimetic/circular_buffer.h ../mimetic/contentdescription.h \
+       ../mimetic/rfc822/fieldvalue.h ../mimetic/contentdisposition.h \
+       ../mimetic/fieldparam.h ../mimetic/contenttransferencoding.h \
+       ../mimetic/contenttype.h ../mimetic/header.h \
+       ../mimetic/rfc822/header.h ../mimetic/rfc822/field.h \
+       ../mimetic/rfc822/mailbox.h ../mimetic/rfc822/messageid.h \
+       ../mimetic/os/utils.h ../mimetic/rfc822/mailboxlist.h \
+       ../mimetic/rfc822/addresslist.h ../mimetic/rfc822/address.h \
+       ../mimetic/rfc822/group.h ../mimetic/mimeversion.h \
+       ../mimetic/contentid.h ../mimetic/message.h \
+       ../mimetic/mimeentity.h ../mimetic/codec/codec.h \
+       ../mimetic/codec/base64.h ../mimetic/codec/qp.h \
+       ../mimetic/parser/itparserdecl.h ../mimetic/streambufs.h \
+       ../mimetic/tokenizer.h ../mimetic/os/os.h \
+       ../mimetic/parser/itparser.h ../mimetic/tree.h
 
 info-am:
 info: info-am
@@ -391,7 +436,8 @@ maintainer-clean-generic clean mostlyclean distclean maintainer-clean
 
 
 clean-local:
-       rm -f b64 qp exbin structure catpart buildidx search mbox mm
+       rm -f b64 qp exbin structure catpart buildidx search mbox mm \
+        smime2xml smimestruct
 
 examples: $(EXAMPLES)
 
diff --git a/examples/smime2xml.cxx b/examples/smime2xml.cxx
new file mode 100644 (file)
index 0000000..0467364
--- /dev/null
@@ -0,0 +1,211 @@
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <iterator>
+#include <streambuf>
+#include <mimetic/mimetic.h>
+#include <mimetic/utils.h>
+#include <openssl/bio.h>
+#include <openssl/pkcs7.h>
+#include <openssl/x509.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+
+using namespace std;
+using namespace mimetic;
+
+void printMimeStructure(MimeEntity* pMe, int tabcount = 0);
+
+int g_verbose; // verbose mode on/off
+int g_quiet; // quiet mode
+
+void printTabs(int c)
+{
+    while(c--)
+        cout << "    ";
+}
+
+int bca_pkcs7_verify(PKCS7 *p7)
+{
+    return ~0;
+}
+
+int pkcs7MimeHandle(MimeEntity* pMe, int tabcount)
+{
+    BIO *in = NULL, *content = NULL;
+    PKCS7 *p7 = NULL;
+    long sz;
+    char *pdata = NULL;
+    int rc = ~0, vfy, iMask = imPreamble | imEpilogue;
+    string me_str;
+    Header& h = pMe->header();
+    ContentType ct = h.contentType();
+
+    {
+    stringstream ss;
+    ss << *pMe;
+    me_str = ss.str();
+    }
+
+    in = BIO_new_mem_buf((void*)me_str.c_str(), me_str.length());
+    if(in == NULL)
+        goto err;
+    BIO_set_mem_eof_return(in, 0);
+
+    p7 = SMIME_read_PKCS7(in, &content);
+    if(p7 == NULL)
+        goto err;
+
+    vfy = bca_pkcs7_verify(p7);
+
+    if(content == NULL)
+    { 
+        content = PKCS7_dataInit(p7, NULL);
+        if(content == NULL)
+            goto err;
+    } else {
+        ; /* multipart/signed, content is the cleartext message part */
+        goto err;
+    }
+    
+    sz = BIO_get_mem_data(content, &pdata);
+    if(sz > 0 && pdata)
+    {
+        MimeEntity me(pdata, pdata + sz, iMask);
+        printMimeStructure(&me, 1 + tabcount);
+    }
+
+    /* success */
+    rc = 0;
+err:
+    if(in)
+        BIO_free(in);
+    if(content)
+        BIO_free(content);
+    if(p7)
+        PKCS7_free(p7);
+    if(rc)
+        ERR_print_errors_fp(stderr);
+    return rc;
+}
+
+void printMimeStructure(MimeEntity* pMe, int tabcount)
+{
+    Header& h = pMe->header();
+    ContentType ct = h.contentType();
+    ContentId ci = h.contentId();
+    ContentDisposition cd = h.contentDisposition();
+    ContentDescription cds = h.contentDescription();
+
+    cout << "<mime-content>" << endl;
+    cout << "<mime-info>" << endl;
+    cout << "<content-type>" << 
+        ct.type() << "/" << ct.subtype() << 
+        "</content-type>" << endl;
+    if(ci.str().length())
+        ;//cout << "<content-id>" << ci.str() << "</content-id>" << endl;
+    if(h.hasField("subject"))
+        cout << "<subject>" << h.field("subject").value() << "</subject>" << 
+            endl;
+    if(cd.param("filename").length())
+        cout << "<filename>" << cd.param("filename") << "</filename>" << 
+            endl;
+    if(cds.str().length())
+        cout << "<description>" << cds.str() << "</description>" << endl;
+
+    cout << "</mime-info>" << endl;
+
+    if(ct.isMultipart() || 
+        (ct.type() == "message" && ct.subtype() == "rfc822"))
+    {
+        if(ct.subtype() == "signed")
+        {
+            cerr << "S/MIME multipart/signed not yet supported!" << endl;
+            exit(1);
+        } else {
+            //printTabs(tabcount);
+            //cout << ct.type() << "/" << ct.subtype() << endl;
+
+            MimeEntityList::iterator mbit = pMe->body().parts().begin(),
+                            meit = pMe->body().parts().end();
+            cout << "<structured-data>" << endl;
+            for(; mbit != meit; ++mbit)
+            {
+                printMimeStructure(*mbit, 1 + tabcount);
+            }
+            cout << "</structured-data>" << endl;
+        }
+    } else {
+        if(ct.type() == "application" && 
+            (ct.subtype() == "x-pkcs7-mime" || ct.subtype() == "pkcs7-mime"))
+        {
+            cout << "<structured-data>" << endl;
+            pkcs7MimeHandle(pMe, tabcount);
+            cout << "</structured-data>" << endl;
+        } else {
+            ;//printTabs(tabcount);
+            ;//cout << ct.type() << "/" << ct.subtype() << endl;
+        }
+    }
+    cout << "</mime-content>" << endl;
+}
+
+void usage()
+{
+    cout << "smime2xml in_file" << endl;
+    cout << "    -v Verbose mode" << endl;
+    cout << "    -q totaly quiet; exit code = num of entities" << endl;
+    cout << endl;
+    exit(1);
+}
+
+int main(int argc, char** argv)
+{
+    std::ios_base::sync_with_stdio(false);
+    int fidx = 1;
+    int iMask = imPreamble | imEpilogue;
+
+    /* Initialize the OpenSSL engine.  */
+    CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
+    OpenSSL_add_all_algorithms();
+    ERR_load_crypto_strings();
+
+    if(argc > 1)
+    {    
+        g_verbose = 0;
+        string first = argv[1];
+        if(first == "-h")
+            usage();
+        else if(first == "-v")
+            g_verbose = 1;
+        else if(first == "-q")
+            g_quiet = 1;
+        fidx = (g_verbose || g_quiet ? 2 : 1); // first filename idx
+    }
+    if(argc == fidx)
+    {
+        istreambuf_iterator<char> bit(std::cin), eit;
+        MimeEntity me(bit,eit, iMask);
+        printMimeStructure(&me);
+    } else {
+        for(int fc = fidx; fc < argc; ++fc)
+        {
+            File in(argv[fc]);
+            if(!in)
+            {
+                cerr << "ERR: unable to open file " 
+                    << argv[fc]
+                    << endl;
+                continue;
+            }
+            MimeEntity me(in.begin(), in.end(),iMask);
+            if(!me.header().hasField("content-type"))
+            {   /* no content-type found, consider it a CMS */
+                me.header().contentType().set("application/x-pkcs7-mime");
+            }
+            printMimeStructure(&me);
+        }
+    }
+    return 0;
+}
+
diff --git a/examples/smimestruct.cxx b/examples/smimestruct.cxx
new file mode 100644 (file)
index 0000000..05b3156
--- /dev/null
@@ -0,0 +1,199 @@
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <iterator>
+#include <streambuf>
+#include <mimetic/mimetic.h>
+#include <mimetic/utils.h>
+#include <openssl/bio.h>
+#include <openssl/pkcs7.h>
+#include <openssl/x509.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+
+using namespace std;
+using namespace mimetic;
+
+void printMimeStructure(MimeEntity* pMe, int tabcount = 0);
+
+int g_verbose; // verbose mode on/off
+int g_quiet; // quiet mode
+int g_entityCount; // num of entities found
+
+void printTabs(int c)
+{
+    while(c--)
+        cout << "    ";
+}
+
+int bca_pkcs7_verify(PKCS7 *p7)
+{
+    return ~0;
+}
+
+int pkcs7MimeHandle(MimeEntity* pMe, int tabcount)
+{
+    BIO *in = NULL, *content = NULL;
+    PKCS7 *p7 = NULL;
+    long sz;
+    char *pdata = NULL;
+    int rc = ~0, vfy, iMask = imPreamble | imEpilogue;
+    string me_str;
+    Header& h = pMe->header();
+    ContentType ct = h.contentType();
+
+    {
+    stringstream ss;
+    ss << *pMe;
+    me_str = ss.str();
+    }
+
+    in = BIO_new_mem_buf((void*)me_str.c_str(), me_str.length());
+    if(in == NULL)
+        goto err;
+    BIO_set_mem_eof_return(in, 0);
+
+    p7 = SMIME_read_PKCS7(in, &content);
+    if(p7 == NULL)
+        goto err;
+
+    vfy = bca_pkcs7_verify(p7);
+
+    printTabs(tabcount);
+    cout << ct.type() << "/" << ct.subtype() 
+        << " (verify " << (vfy == 0 ? "ok" : "failed") << ")"
+        << endl;
+
+    if(content == NULL)
+    { 
+        content = PKCS7_dataInit(p7, NULL);
+        if(content == NULL)
+            goto err;
+    } else {
+        ; /* multipart/signed, content is the cleartext message part */
+        goto err;
+    }
+    
+    sz = BIO_get_mem_data(content, &pdata);
+    if(sz > 0 && pdata)
+    {
+        MimeEntity me(pdata, pdata + sz, iMask);
+        printMimeStructure(&me, 1 + tabcount);
+    }
+
+    /* success */
+    rc = 0;
+err:
+    if(in)
+        BIO_free(in);
+    if(content)
+        BIO_free(content);
+    if(p7)
+        PKCS7_free(p7);
+    if(rc)
+        ERR_print_errors_fp(stderr);
+    return rc;
+}
+
+
+void printMimeStructure(MimeEntity* pMe, int tabcount)
+{
+    Header& h = pMe->header();
+    ContentType ct = h.contentType();
+    ContentId ci = h.contentId();
+
+    ++g_entityCount;
+
+    if(ct.isMultipart() || 
+        (ct.type() == "message" && ct.subtype() == "rfc822"))
+    {
+        if(ct.subtype() == "signed")
+        {
+            cerr << "S/MIME multipart/signed not yet supported!" << endl;
+            exit(1);
+            #if 0
+            if(pMe->body().parts().size() != 2)
+                cerr << "bad message!" << endl;
+            if(smimeVerify(pMe))
+                cerr << "S/MIME verification failed" << endl;
+            #endif
+        } else {
+            printTabs(tabcount);
+            cout << ct.type() << "/" << ct.subtype() << endl;
+
+            MimeEntityList::iterator mbit = pMe->body().parts().begin(),
+                            meit = pMe->body().parts().end();
+            for(; mbit != meit; ++mbit)
+                printMimeStructure(*mbit, 1 + tabcount);
+        }
+    } else {
+        if(ct.type() == "application" && 
+            (ct.subtype() == "x-pkcs7-mime" || ct.subtype() == "pkcs7-mime"))
+        {
+            pkcs7MimeHandle(pMe, tabcount);
+        } else {
+            printTabs(tabcount);
+            cout << ct.type() << "/" << ct.subtype() << endl;
+        }
+    }
+}
+
+
+
+void usage()
+{
+    cout << "structure [-v] [in_file]..." << endl;
+    cout << "    -v Verbose mode" << endl;
+    cout << "    -q totaly quiet; exit code = num of entities" << endl;
+    cout << endl;
+    exit(1);
+}
+
+
+int main(int argc, char** argv)
+{
+    std::ios_base::sync_with_stdio(false);
+    int fidx = 1;
+    //int iMask = imBody | imPreamble | imEpilogue;
+    int iMask = imPreamble | imEpilogue;
+
+    /* Initialize the OpenSSL engine.  */
+    CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
+    OpenSSL_add_all_algorithms();
+    ERR_load_crypto_strings();
+
+    if(argc > 1)
+    {    
+        g_verbose = 0;
+        string first = argv[1];
+        if(first == "-h")
+            usage();
+        else if(first == "-v")
+            g_verbose = 1;
+        else if(first == "-q")
+            g_quiet = 1;
+        fidx = (g_verbose || g_quiet ? 2 : 1); // first filename idx
+    }
+    if(argc == fidx)
+    {
+        istreambuf_iterator<char> bit(std::cin), eit;
+        MimeEntity me(bit,eit, iMask);
+        printMimeStructure(&me);
+    } else {
+        for(int fc = fidx; fc < argc; ++fc)
+        {
+            File in(argv[fc]);
+            if(!in)
+            {
+                cerr << "ERR: unable to open file " 
+                    << argv[fc]
+                    << endl;
+                continue;
+            }
+            MimeEntity me(in.begin(), in.end(),iMask);
+            printMimeStructure(&me);
+        }
+    }
+    return g_entityCount;
+}
+
index 79e80d1b47fdc2e821c284442419d7bb6df16d2c..576dbdd34c34b1efeab157bcd46354f8f852c00c 100644 (file)
@@ -2,7 +2,7 @@
     copyright            : (C) 2002-2005 by Stefano Barbato
     email                : stefano@codesink.org
 
-    $Id: structure.cxx,v 1.2 2005/02/23 10:26:14 tat Exp $
+    $Id: structure.cxx,v 1.5 2007/01/21 14:55:33 tat Exp $
  ***************************************************************************/
 
 /***************************************************************************
@@ -19,9 +19,6 @@
  * Reads in_file (or standard input) and writes its MIME structure to out_file
  * (or standard output)
  */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
 
 #include <iostream>
 #include <fstream>
@@ -51,6 +48,7 @@ void printMimeStructure(MimeEntity* pMe, int tabcount = 0)
     {
         Header& h = pMe->header();
         ContentType ct = h.contentType();
+        cout << g_entityCount << " ";
         printTabs(tabcount);
         cout << ct.type() << "/" << ct.subtype() << endl;
         if(g_verbose)
@@ -132,12 +130,12 @@ void usage()
     exit(1);
 }
 
-
 int main(int argc, char** argv)
 {
     std::ios_base::sync_with_stdio(false);
     int fidx = 1;
     int iMask = imBody | imPreamble | imEpilogue;
+
     if(argc > 1)
     {    
         g_verbose = 0;
index 6e2c9c8611c7b4324d7998db0a9351209804b770..4b9d425516991cb83a9c4fc075439558e8f32b37 100644 (file)
@@ -9,7 +9,7 @@ includedir=@INCLUDEDIR@
 include_HEADERS= \
  body.h contenttransferencoding.h mimeentity.h tokenizer.h \
  circular_buffer.h contenttype.h mimeentitylist.h tree.h \
- fieldparam.h mimetic.h utils.h config.h \
+ fieldparam.h mimetic.h utils.h \
  contentdescription.h header.h mimeversion.h version.h \
  contentdisposition.h libconfig.h streambufs.h \
  contentid.h message.h strutils.h 
index dc905696d2e4f322d450e08c6e41eaee2d03b593..39da2d053300c1f012133b362b8343c013d8e3a8 100644 (file)
@@ -97,7 +97,7 @@ INCLUDES = -I$(top_srcdir)
 #CPPFLAGS=-Winline
 includedir = @INCLUDEDIR@
 
-include_HEADERS =   body.h contenttransferencoding.h mimeentity.h tokenizer.h  circular_buffer.h contenttype.h mimeentitylist.h tree.h  fieldparam.h mimetic.h utils.h config.h  contentdescription.h header.h mimeversion.h version.h  contentdisposition.h libconfig.h streambufs.h  contentid.h message.h strutils.h 
+include_HEADERS =   body.h contenttransferencoding.h mimeentity.h tokenizer.h  circular_buffer.h contenttype.h mimeentitylist.h tree.h  fieldparam.h mimetic.h utils.h  contentdescription.h header.h mimeversion.h version.h  contentdisposition.h libconfig.h streambufs.h  contentid.h message.h strutils.h 
 
 
 libmimetic_la_SOURCES = body.cxx contenttransferencoding.cxx message.cxx  utils.cxx contentdescription.cxx contenttype.cxx mimeentity.cxx version.cxx  contentdisposition.cxx fieldparam.cxx mimeversion.cxx  contentid.cxx header.cxx strutils.cxx
@@ -394,7 +394,7 @@ body.lo body.o : body.cxx mimeentity.h strutils.h utils.h libconfig.h \
        codec/code.h codec/other_codecs.h os/file.h os/stdfile.h \
        os/fileop.h os/file_iterator.h os/mmfile.h header.h \
        rfc822/header.h rfc822/field.h rfc822/mailbox.h \
-       rfc822/messageid.h config.h os/utils.h rfc822/mailboxlist.h \
+       rfc822/messageid.h os/utils.h rfc822/mailboxlist.h \
        rfc822/addresslist.h rfc822/address.h rfc822/group.h \
        contentid.h contentdescription.h body.h rfc822/body.h \
        parser/itparserdecl.h streambufs.h
@@ -415,7 +415,7 @@ fieldparam.lo fieldparam.o : fieldparam.cxx fieldparam.h strutils.h \
        utils.h libconfig.h config.h
 header.lo header.o : header.cxx header.h rfc822/header.h strutils.h \
        utils.h libconfig.h config.h rfc822/field.h rfc822/fieldvalue.h \
-       rfc822/mailbox.h rfc822/messageid.h config.h os/utils.h \
+       rfc822/mailbox.h rfc822/messageid.h os/utils.h \
        rfc822/mailboxlist.h rfc822/addresslist.h rfc822/address.h \
        rfc822/group.h mimeversion.h version.h contenttype.h \
        fieldparam.h contentid.h contenttransferencoding.h \
@@ -428,11 +428,10 @@ message.lo message.o : message.cxx message.h libconfig.h config.h \
        codec/base64.h circular_buffer.h codec/qp.h codec/code.h \
        codec/other_codecs.h os/file.h os/stdfile.h os/fileop.h \
        os/file_iterator.h os/mmfile.h header.h rfc822/header.h \
-       rfc822/field.h rfc822/mailbox.h rfc822/messageid.h config.h \
-       os/utils.h rfc822/mailboxlist.h rfc822/addresslist.h \
-       rfc822/address.h rfc822/group.h contentid.h \
-       contentdescription.h body.h rfc822/body.h parser/itparserdecl.h \
-       streambufs.h
+       rfc822/field.h rfc822/mailbox.h rfc822/messageid.h os/utils.h \
+       rfc822/mailboxlist.h rfc822/addresslist.h rfc822/address.h \
+       rfc822/group.h contentid.h contentdescription.h body.h \
+       rfc822/body.h parser/itparserdecl.h streambufs.h
 mimeentity.lo mimeentity.o : mimeentity.cxx mimeentity.h strutils.h \
        utils.h libconfig.h config.h contenttype.h rfc822/fieldvalue.h \
        fieldparam.h contenttransferencoding.h contentdisposition.h \
@@ -441,7 +440,7 @@ mimeentity.lo mimeentity.o : mimeentity.cxx mimeentity.h strutils.h \
        circular_buffer.h codec/qp.h codec/code.h codec/other_codecs.h \
        os/file.h os/stdfile.h os/fileop.h os/file_iterator.h \
        os/mmfile.h header.h rfc822/header.h rfc822/field.h \
-       rfc822/mailbox.h rfc822/messageid.h config.h os/utils.h \
+       rfc822/mailbox.h rfc822/messageid.h os/utils.h \
        rfc822/mailboxlist.h rfc822/addresslist.h rfc822/address.h \
        rfc822/group.h contentid.h contentdescription.h body.h \
        rfc822/body.h parser/itparserdecl.h streambufs.h tokenizer.h \
@@ -451,8 +450,8 @@ mimeversion.lo mimeversion.o : mimeversion.cxx mimeversion.h \
        config.h
 strutils.lo strutils.o : strutils.cxx strutils.h
 utils.lo utils.o : utils.cxx utils.h libconfig.h config.h strutils.h
-version.lo version.o : version.cxx version.h utils.h libconfig.h \
-       config.h strutils.h tokenizer.h
+version.lo version.o : version.cxx config.h version.h utils.h \
+       libconfig.h strutils.h tokenizer.h
 
 info-am:
 info: info-recursive
diff --git a/mimetic/config.h b/mimetic/config.h
deleted file mode 100644 (file)
index 9450b04..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/* mimetic/config.h.  Generated by configure.  */
-/* mimetic/config.h.in.  Generated from configure.in by autoheader.  */
-
-/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
-   */
-#define HAVE_DIRENT_H 1
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define to 1 if you have the `getpagesize' function. */
-#define HAVE_GETPAGESIZE 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `madvise' function. */
-#define HAVE_MADVISE 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have a working `mmap' system call. */
-#define HAVE_MMAP 1
-
-/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
-/* #undef HAVE_NDIR_H */
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
-   */
-/* #undef HAVE_SYS_DIR_H */
-
-/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
-   */
-/* #undef HAVE_SYS_NDIR_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Name of package */
-#define PACKAGE "mimetic"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION ""
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Version number of package */
-#define VERSION "0.9.1"
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-/* #undef gid_t */
-
-/* Define to `long' if <sys/types.h> does not define. */
-/* #undef off_t */
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-/* #undef size_t */
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-/* #undef uid_t */
index 8f39c24cab0c5683899de6794f256680128c7418..2fddc74074b606bf0aec59e3b8fe6adb8cfdf195 100644 (file)
@@ -15,4 +15,4 @@
 #define HAVE_SYS_TYPES_H 1\r
 \r
 #define PACKAGE "mimetic"\r
-#define VERSION "0.8.7"\r
+#define VERSION "0.9.2"\r
index 749e3f1dc227c42ddb6299551edb6cc18302bb1e..3ab827ad443b9b99ebbdf8f7a990bbfa465e6d4f 100644 (file)
@@ -2,7 +2,7 @@
     copyright            : (C) by 2002-2004 Stefano Barbato
     email                : stefano@codesink.org
 
-    $Id: libconfig.h,v 1.7 2005/02/23 10:26:14 tat Exp $
+    $Id: libconfig.h,v 1.8 2006/04/18 14:10:52 tat Exp $
  ***************************************************************************/
 
 /***************************************************************************
 #ifndef _MIMETIC_LIB_CONFIG_H_
 #define _MIMETIC_LIB_CONFIG_H_
 #if defined(__unix__) || defined(__linux__) || defined(__unix) || defined(_AIX)
+#ifdef HAVE_MIMETIC_CONFIG
 #include "config.h"
+#endif
 #define CONFIG_UNIX
 #endif
 
 /* Mac OS X */
 #if defined(__APPLE__) && defined(__MACH__)
+#ifdef HAVE_MIMETIC_CONFIG
 #include "config.h"
+#endif
 #define CONFIG_UNIX
 #endif
 
index 1d0ab69ae1ed0a580e5ced8c9452f2d8af6612f5..159bf19419fdd9142148bf289c5176da34400485 100644 (file)
@@ -2,7 +2,7 @@
     copyright            : (C) 2002-2005 by Stefano Barbato
     email                : stefano@codesink.org
 
-    $Id: message.cxx,v 1.2 2005/02/23 10:26:14 tat Exp $
+    $Id: message.cxx,v 1.3 2006/10/09 13:38:30 tat Exp $
  ***************************************************************************/
 
 /***************************************************************************
@@ -25,7 +25,7 @@ namespace mimetic
 using namespace std;
 Attachment::Attachment(const std::string& fqn)
 {
-    set(fqn, ContentType("application","octect-stream"),Base64::Encoder());
+    set(fqn, ContentType("application","octet-stream"),Base64::Encoder());
 }
 
 Attachment::Attachment(const std::string& fqn, const ContentType& ct)
index 830d5d6083815440371290bfafbf4dac88c00738..c7e81369ad8189fe42b05a82494300d1be82f93b 100644 (file)
@@ -2,7 +2,7 @@
     copyright            : (C) 2002-2005 by Stefano Barbato
     email                : stefano@codesink.org
 
-    $Id: message.h,v 1.11 2005/03/07 15:35:08 tat Exp $
+    $Id: message.h,v 1.12 2006/10/09 13:38:30 tat Exp $
  ***************************************************************************/
 
 /***************************************************************************
@@ -108,7 +108,7 @@ struct MultipartDigest: public MultipartEntity
 };
 
 
-/// application/octect-stream entity class
+/// application/octet-stream entity class
 struct ApplicationOctStream: public MimeEntity
 {
     ApplicationOctStream();
@@ -129,7 +129,7 @@ protected:
 struct Attachment: public MimeEntity
 {
     /**
-     * defaults to application/octect-stream
+     * defaults to application/octet-stream
      */
     Attachment(const std::string&);
     Attachment(const std::string&, const ContentType&);
@@ -189,12 +189,12 @@ private:
 
 
 /**
- * defaults to application/octect-stream
+ * defaults to application/octet-stream
  */
 template<typename Codec>
 Attachment::Attachment(const std::string& fqn, const Codec& codec)
 {
-    set(fqn, ContentType("application","octect-stream"), codec);
+    set(fqn, ContentType("application","octet-stream"), codec);
 }
 
 template<typename Codec>
index 9ff86cfcb6f51d802fcf72480221ba147fc391c4..706fffc196fa4325006e78d34e739871aab66a3c 100644 (file)
@@ -2,7 +2,7 @@
 #define _MIMETIC_OS_DIRECTORY_H_
 #include <string>
 #include <iterator>
-#include <mimetic/config.h>
+#include <mimetic/libconfig.h>
 #ifdef HAVE_DIRENT_H
 #include <dirent.h>
 #endif
index 782a70859b5568d2ad71924d5e87bd452a845734..bb67407eba8374c60cb67d1ec5bc4353a5814aa0 100644 (file)
@@ -2,7 +2,7 @@
     copyright            : (C) 2002-2005 by Stefano Barbato
     email                : stefano@codesink.org
 
-    $Id: fileop.cxx,v 1.2 2005/02/23 10:26:15 tat Exp $
+    $Id: fileop.cxx,v 1.4 2007/01/21 14:08:57 tat Exp $
  ***************************************************************************/
 
 /***************************************************************************
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
 
 using namespace std;
 
-
 namespace mimetic
 {
 
index 709a7aed5db35c95238e86016b873c840f320fa0..a4f84240b7ccd7e215a384eec3732dcb8e5fc7ac 100644 (file)
@@ -2,7 +2,7 @@
     copyright            : (C) 2002-2005 by Stefano Barbato
     email                : stefano@codesink.org
 
-    $Id: mmfile.cxx,v 1.4 2006/04/11 10:04:58 tat Exp $
+    $Id: mmfile.cxx,v 1.5 2006/07/13 13:36:25 tat Exp $
  ***************************************************************************/
 
 /***************************************************************************
@@ -45,9 +45,9 @@ MMFile::MMFile(const string& fqn, int mode)
 
 bool MMFile::open(const std::string& fqn, int mode /*= O_RDONLY*/)
 {
+    m_fqn = fqn;
     if(!stat() || !S_ISREG(m_st.st_mode))
         return false;
-    m_fqn = fqn;
     return open(mode);
 }
 
index b2773fae110cd8769955fcd0715c477f6b2c7fbf..abe3ff44e01423e7fe7f2b4076720cba08f8109c 100644 (file)
@@ -444,10 +444,9 @@ protected:
     // std::string because I want to be as fast as possible here
     virtual void copy_until_boundary(ParsingElem pe)
     {
-        size_t pos, lines, eomsz;
+        size_t pos, lines, eomsz = 0;
         register char c;
         enum { nlsz = 1 };
-        char nl[2] = { NL, 0 };
         const char *eom = 0;
 
         enum { blksz = 4096 };
@@ -501,23 +500,28 @@ protected:
                 {
                     // not an empty row, is this a boundary?
                     block[blkpos] = 0;
-                    if(block[sl_off] == '-' &&
-                        sl_off < blkpos &&
+                    if(block[sl_off] == '-' && sl_off < blkpos &&
                          block[sl_off+1] == '-')
                     {
                         std::string Line(block+sl_off, blkpos-sl_off);
                         if(isBoundary(Line))
                         {
                             // trim last newline
-                            int i = sl_off;
-                            char a = block[--i];
-                            char b = block[--i];
-                            if(isnl(a,b))
-                                sl_off -= 2;
-                            else if(isnl(a))
+                            if (sl_off>=2) 
+                            {
+                                int i = sl_off;
+                                char a = block[--i];
+                                char b = block[--i];
+
+                                if(isnl(a,b))
+                                    sl_off -= 2;
+                                else if(isnl(a))
+                                    sl_off--;
+
+                            } else if (sl_off==1 && isnl(block[0])) {
                                 sl_off--;
-                            onBlock(block, sl_off,
-                                pe);
+                            }
+                            onBlock(block, sl_off, pe);
                             return;
                         }
                     }
@@ -675,7 +679,7 @@ private:
                     m_lastBoundary = ClosingBoundary;
                     m_bit = off + 2;
                 }
-                if(m_bit < m_eit && isnl(*m_bit)) 
+                if(m_bit < m_eit-1 && isnl(*m_bit)) 
                 {
                     char c = *m_bit++;
                     char next = *m_bit;
index 2ed72adcd567754e44bc1c1398b1d417557e2e8e..460365ec521d85627b86df690f21b1ab8fb64ab3 100644 (file)
@@ -282,8 +282,8 @@ group.lo group.o : group.cxx group.h mailbox.h fieldvalue.h \
 header.lo header.o : header.cxx header.h ../../mimetic/strutils.h \
        ../../mimetic/utils.h ../../mimetic/libconfig.h \
        ../../mimetic/config.h field.h fieldvalue.h mailbox.h \
-       messageid.h ../../mimetic/config.h ../../mimetic/os/utils.h \
-       mailboxlist.h addresslist.h address.h group.h
+       messageid.h ../../mimetic/os/utils.h mailboxlist.h \
+       addresslist.h address.h group.h
 mailbox.lo mailbox.o : mailbox.cxx mailbox.h fieldvalue.h \
        ../../mimetic/strutils.h
 mailboxlist.lo mailboxlist.o : mailboxlist.cxx mailboxlist.h \
@@ -293,13 +293,12 @@ mailboxlist.lo mailboxlist.o : mailboxlist.cxx mailboxlist.h \
 message.lo message.o : message.cxx message.h header.h \
        ../../mimetic/strutils.h ../../mimetic/utils.h \
        ../../mimetic/libconfig.h ../../mimetic/config.h field.h \
-       fieldvalue.h mailbox.h messageid.h ../../mimetic/config.h \
-       ../../mimetic/os/utils.h mailboxlist.h addresslist.h address.h \
-       group.h body.h
+       fieldvalue.h mailbox.h messageid.h ../../mimetic/os/utils.h \
+       mailboxlist.h addresslist.h address.h group.h body.h
 messageid.lo messageid.o : messageid.cxx messageid.h \
-       ../../mimetic/config.h ../../mimetic/utils.h \
        ../../mimetic/libconfig.h ../../mimetic/config.h \
-       ../../mimetic/strutils.h ../../mimetic/os/utils.h fieldvalue.h
+       ../../mimetic/utils.h ../../mimetic/strutils.h \
+       ../../mimetic/os/utils.h fieldvalue.h
 
 info-am:
 info: info-am
index 3094c5a04dbd00d087baa1bb01aad3701de3178c..06f9367026e1230926af9ad4e56d315d3106328d 100644 (file)
@@ -2,7 +2,7 @@
     copyright            : (C) 2002-2005 by Stefano Barbato
     email                : stefano@codesink.org
 
-    $Id: datetime.cxx,v 1.2 2005/02/23 10:26:15 tat Exp $
+    $Id: datetime.cxx,v 1.3 2007/01/21 14:55:34 tat Exp $
  ***************************************************************************/
 
 /***************************************************************************
@@ -284,18 +284,22 @@ void DateTime::set(const string& input)
     }
     
     // gg mon aa[aa]    
-    for(; i < 3; ++i)
+    while(i < 3)
     {
         if(!stok.next(tok)) return;
+        if(tok.empty())
+            continue; /* there's a ' ' after ',' ("Wed, 23 Nov...") */
         switch(i)
         {
         case 0: m_iDay = utils::str2int(tok); break;
         case 1: m_iMonth = Month(tok).ordinal(); break;
         case 2: m_iYear = utils::str2int(tok); break;
         }
+        ++i;
     }
+
     stok.setDelimList(" :");
-    for(int i = 0; i < 3; ++i)
+    for(i = 0; i < 3; ++i)
     {
         if(!stok.next(tok)) return;
         switch(i)
@@ -394,6 +398,7 @@ FieldValue* DateTime::clone() const
 ostream& operator<<(ostream& os, const DateTime& dt)
 {
     int width = os.width(), fill = os.fill();
+
     os << dt.dayOfWeek().name() << ", "
        << setw(2) << setfill('0') << dt.day() << " "
        << dt.month().name() << " "
@@ -402,6 +407,7 @@ ostream& operator<<(ostream& os, const DateTime& dt)
        << setw(2) << setfill('0') << dt.minute() << ":"
        << setw(2) << setfill('0') << dt.second() << " "
        << dt.zone().name();
+
     os.width(width);
     os.fill(fill);
     return os;
index e2542f749a5d1d1debbf85791fc0fe63d32ae477..fdf047e64ac33d3427ac20566247a049d032f021 100644 (file)
@@ -2,7 +2,7 @@
     copyright            : (C) 2002-2005 by Stefano Barbato
     email                : stefano@codesink.org
 
-    $Id: datetime.h,v 1.11 2005/02/23 10:26:15 tat Exp $
+    $Id: datetime.h,v 1.12 2007/01/21 14:55:34 tat Exp $
  ***************************************************************************/
 
 /***************************************************************************
@@ -106,7 +106,7 @@ struct DateTime: public FieldValue
     short second() const;
     Zone zone() const;
     std::string str() const;
-    //friend std::ostream& operator<<(std::ostream&, const DateTime&);
+    friend std::ostream& operator<<(std::ostream&, const DateTime&);
 protected:
     FieldValue* clone() const;
 private:
index 90784b74d3c4d4c3c33e77362fbd3930a12132a4..469dd9ace28fcbd8c27390ed3e9804767a885e5d 100644 (file)
@@ -2,7 +2,7 @@
     copyright            : (C) 2002-2005 by Stefano Barbato
     email                : stefano@codesink.org
 
-    $Id: messageid.h,v 1.13 2006/04/11 10:04:58 tat Exp $
+    $Id: messageid.h,v 1.14 2006/04/18 14:10:52 tat Exp $
  ***************************************************************************/
 
 /***************************************************************************
@@ -19,7 +19,7 @@
 #include <stdint.h>
 #endif
 #include <string>
-#include <mimetic/config.h>
+#include <mimetic/libconfig.h>
 #ifdef HAVE_INTTYPES_H
 #include <inttypes.h>
 #endif
index ec33e4374acedea2eb30fe6eb84380d297276064..394330929dab64e7341baac3d696901cfd591964 100644 (file)
@@ -2,7 +2,7 @@
     copyright            : (C) 2002-2005 by Stefano Barbato
     email                : stefano@codesink.org
 
-    $Id: version.cxx,v 1.2 2005/02/23 10:26:14 tat Exp $
+    $Id: version.cxx,v 1.3 2007/01/21 11:39:04 tat Exp $
  ***************************************************************************/
 
 /***************************************************************************
@@ -14,6 +14,7 @@
  *                                                                         *
  ***************************************************************************/
 #include <iostream>
+#include <mimetic/config.h>
 #include <mimetic/version.h>
 #include <mimetic/utils.h>
 #include <mimetic/tokenizer.h>
index 4b824baa900e65837efbfd70613d11c72195fb3e..fb2c8656d33780034e561cd98611673a8c682974 100644 (file)
@@ -324,9 +324,8 @@ t.contenttype.o: t.contenttype.cxx ../mimetic/contenttype.h \
        ../mimetic/strutils.h ../mimetic/rfc822/fieldvalue.h \
        ../mimetic/fieldparam.h t.contenttype.h cutee.h
 t.directory.cutee.o: t.directory.cutee.cxx cutee.h t.directory.h \
-       ../mimetic/os/directory.h ../mimetic/config.h \
-       ../mimetic/os/fileop.h ../mimetic/utils.h \
-       ../mimetic/libconfig.h ../mimetic/config.h \
+       ../mimetic/os/directory.h ../mimetic/libconfig.h \
+       ../mimetic/config.h ../mimetic/os/fileop.h ../mimetic/utils.h \
        ../mimetic/strutils.h
 t.fieldparam.cutee.o: t.fieldparam.cutee.cxx cutee.h t.fieldparam.h \
        ../mimetic/fieldparam.h ../mimetic/strutils.h
@@ -357,16 +356,15 @@ t.mimemessage.cutee.o: t.mimemessage.cutee.cxx cutee.h t.mimemessage.h \
        ../mimetic/contenttype.h ../mimetic/header.h \
        ../mimetic/rfc822/header.h ../mimetic/rfc822/field.h \
        ../mimetic/rfc822/mailbox.h ../mimetic/rfc822/messageid.h \
-       ../mimetic/config.h ../mimetic/os/utils.h \
-       ../mimetic/rfc822/mailboxlist.h ../mimetic/rfc822/addresslist.h \
-       ../mimetic/rfc822/address.h ../mimetic/rfc822/group.h \
-       ../mimetic/mimeversion.h ../mimetic/contentid.h \
-       ../mimetic/message.h ../mimetic/mimeentity.h \
-       ../mimetic/codec/codec.h ../mimetic/codec/base64.h \
-       ../mimetic/codec/qp.h ../mimetic/parser/itparserdecl.h \
-       ../mimetic/streambufs.h ../mimetic/tokenizer.h \
-       ../mimetic/os/os.h ../mimetic/parser/itparser.h \
-       ../mimetic/tree.h
+       ../mimetic/os/utils.h ../mimetic/rfc822/mailboxlist.h \
+       ../mimetic/rfc822/addresslist.h ../mimetic/rfc822/address.h \
+       ../mimetic/rfc822/group.h ../mimetic/mimeversion.h \
+       ../mimetic/contentid.h ../mimetic/message.h \
+       ../mimetic/mimeentity.h ../mimetic/codec/codec.h \
+       ../mimetic/codec/base64.h ../mimetic/codec/qp.h \
+       ../mimetic/parser/itparserdecl.h ../mimetic/streambufs.h \
+       ../mimetic/tokenizer.h ../mimetic/os/os.h \
+       ../mimetic/parser/itparser.h ../mimetic/tree.h
 t.parser.cutee.o: t.parser.cutee.cxx cutee.h t.parser.h \
        ../mimetic/mimeentity.h ../mimetic/strutils.h \
        ../mimetic/utils.h ../mimetic/libconfig.h ../mimetic/config.h \
@@ -383,13 +381,13 @@ t.parser.cutee.o: t.parser.cutee.cxx cutee.h t.parser.h \
        ../mimetic/os/mmfile.h ../mimetic/header.h \
        ../mimetic/rfc822/header.h ../mimetic/rfc822/field.h \
        ../mimetic/rfc822/mailbox.h ../mimetic/rfc822/messageid.h \
-       ../mimetic/config.h ../mimetic/os/utils.h \
-       ../mimetic/rfc822/mailboxlist.h ../mimetic/rfc822/addresslist.h \
-       ../mimetic/rfc822/address.h ../mimetic/rfc822/group.h \
-       ../mimetic/contentid.h ../mimetic/contentdescription.h \
-       ../mimetic/body.h ../mimetic/rfc822/body.h \
-       ../mimetic/parser/itparserdecl.h ../mimetic/streambufs.h \
-       ../mimetic/parser/itparser.h ../mimetic/tree.h
+       ../mimetic/os/utils.h ../mimetic/rfc822/mailboxlist.h \
+       ../mimetic/rfc822/addresslist.h ../mimetic/rfc822/address.h \
+       ../mimetic/rfc822/group.h ../mimetic/contentid.h \
+       ../mimetic/contentdescription.h ../mimetic/body.h \
+       ../mimetic/rfc822/body.h ../mimetic/parser/itparserdecl.h \
+       ../mimetic/streambufs.h ../mimetic/parser/itparser.h \
+       ../mimetic/tree.h
 t.qp.cutee.o: t.qp.cutee.cxx cutee.h t.qp.h ../mimetic/codec/codec.h \
        ../mimetic/codec/codec_base.h ../mimetic/codec/codec_chain.h \
        ../mimetic/codec/base64.h ../mimetic/circular_buffer.h \
@@ -408,20 +406,20 @@ t.rfc822.cutee.o: t.rfc822.cutee.cxx cutee.h t.rfc822.h \
        ../mimetic/strutils.h ../mimetic/rfc822/group.h \
        ../mimetic/rfc822/addresslist.h ../mimetic/rfc822/body.h \
        ../mimetic/rfc822/datetime.h ../mimetic/rfc822/messageid.h \
-       ../mimetic/config.h ../mimetic/utils.h ../mimetic/libconfig.h \
-       ../mimetic/config.h ../mimetic/os/utils.h \
-       ../mimetic/rfc822/field.h ../mimetic/rfc822/header.h \
-       ../mimetic/rfc822/mailboxlist.h ../mimetic/rfc822/message.h
+       ../mimetic/libconfig.h ../mimetic/config.h ../mimetic/utils.h \
+       ../mimetic/os/utils.h ../mimetic/rfc822/field.h \
+       ../mimetic/rfc822/header.h ../mimetic/rfc822/mailboxlist.h \
+       ../mimetic/rfc822/message.h
 t.rfc822.o: t.rfc822.cxx t.rfc822.h ../mimetic/rfc822/rfc822.h \
        ../mimetic/rfc822/address.h ../mimetic/rfc822/mailbox.h \
        ../mimetic/rfc822/fieldvalue.h ../mimetic/strutils.h \
        ../mimetic/rfc822/group.h ../mimetic/rfc822/addresslist.h \
        ../mimetic/rfc822/body.h ../mimetic/rfc822/datetime.h \
-       ../mimetic/rfc822/messageid.h ../mimetic/config.h \
-       ../mimetic/utils.h ../mimetic/libconfig.h ../mimetic/config.h \
-       ../mimetic/os/utils.h ../mimetic/rfc822/field.h \
-       ../mimetic/rfc822/header.h ../mimetic/rfc822/mailboxlist.h \
-       ../mimetic/rfc822/message.h cutee.h
+       ../mimetic/rfc822/messageid.h ../mimetic/libconfig.h \
+       ../mimetic/config.h ../mimetic/utils.h ../mimetic/os/utils.h \
+       ../mimetic/rfc822/field.h ../mimetic/rfc822/header.h \
+       ../mimetic/rfc822/mailboxlist.h ../mimetic/rfc822/message.h \
+       cutee.h
 t.strutils.cutee.o: t.strutils.cutee.cxx cutee.h t.strutils.h \
        ../mimetic/strutils.h
 t.tokenizer.cutee.o: t.tokenizer.cutee.cxx cutee.h t.tokenizer.h \