
MIME++ Change Log
=================

September 1, 1997

o Convenience member functions added to DwMediaType to access the name
  parameter

o Added configuration option to typedef DwBool to bool

o Compiles as a DLL under Borland C++ 5.0 (as well as VC++ 4 and 5).  I am
  not completely convinced that I got the correct command line switches for
  BCC32.  If you use Borland, you might want to double check the makefile.

o Will handle multipart boundary parameters from nonstandard MIME
  implementations that quote the boundary parameters with single quotes.
  (This is in violation of the MIME++ standard.)

o Fixed a bug where CRLF would be included in the full name part of a
  mailbox if the name was quoted and split across two lines

o DwBinhex class for performing conversion to and from Binhex 4.0 format
  for Macintosh files.

o Much of the documentation has been rewritten or brought up to date.

o Minor changes to DwUuencode.

o The deprecated member functions in DwString are no longer available.


July 26, 1997

o New classes in this release:
  DwUuencode       - for uuencode and uudecode operations
  DwBoyerMoore     - for BoyerMoore algorithm in string searches
  DwProtocolClient - Base class for SMTP, NNTP, and POP protocol classes
  DwSmtpClient     - Implements client side of SMTP session
  DwNntpClient     - Implements client side of NNTP session
  DwPopClient      - Implements client side of POP session

o Full support for Win32 with MS Visual C++ 4 or 5, and Borland C++.

o DwHeader renamed to DwHeaders to eliminate confusion, since people usually
  use the term header to refer to a single header field.

o Compiles as a DLL under Visual C++ (default option)

o There is a config.h file for establishing configuration options at
  compile time. This is safer than requiring you to specify options as
  defines in a makefile.

o Support for namespaces. Alternatively, global enums are encapsulated
  in a class declaration.

Mar 29, 1997

o The class DwString has been rewritten almost from scratch and is much
  closer to the specification for the ANSI string class.  Eventually, it
  should be possible to typedef DwString to the ANSI string class, thereby
  making MIME++ entirely compatible with the standard C++ library.  (I did
  actually do this successfully a few weeks ago, but I have not tried it
  again since the new DwString was completed.)  Most of the old member
  functions are now obsolete.  You can still compile them if you define
  the right macro (see the makefile).

o The implementations of many classes were changed to permit them to be
  used with the new DwString class.  (They should also work with the
  ANSI string class, if DwString is typedef-ed.)

o The documentation is more complete.  Utility functions for content
  transfer encoding, end-of-line marker conversion, etc. are now included
  in the HTML documentation.  New <FONT> tags in HTML 3.2 are used to
  add color.  The idea is not so much to make the man pages look snazzy;
  I chose colors to make them more readable.

Feb 6, 1997

o Added new class DwDispositionType, which represents a disposition-type
  as described in RFC-1806.
  
o Changed the name of DwContentType to DwMediaType, which conforms to usage
  in RFC-2068 (HTTP) and is not incompatible with RFC-2045 and RFC-2046.

o Changed the name of DwContentTransferEncoding to DwMechanism, which
  conforms to the BNF term "mechanism" in RFC-2045.

Jan 28, 1997

o Added utility functions for doing end-of-line marker conversions:

    int DwToCrLfEol(const DwString& aSrcStr, DwString& aDestStr);
    int DwToLfEol(const DwString& aSrcStr, DwString& aDestStr);
    int DwToCrEol(const DwString& aSrcStr, DwString& aDestStr);
    int DwToLocalEol(const DwString& aSrcStr, DwString& aDestStr);

Jan 25, 1997

o Parsers for entities (entity.cpp) and bodies (body.cpp) changed to handle
  CR LF end-of-line (DOS and MIME) in addition to LF end-of-line (UNIX
  and C).

o Changed multipart body parser to correctly parse boundaries that have
  white space at end of line (transport-padding, in the BNF of RFC-2046).
  With this change, any line that starts with the dash-boundary will be
  recognized as a boundary, even if the extraneous characters are not
  white space (transport-padding).  This should be okay because the MIME
  spec says that the boundary should not appear in the entity.

Jan 14, 1997

o The library may be compiled as a production version, a development
  version, or a debug version.  The production version tries to recover
  from errors whenever possible: this could mean just returning silently
  from a function with a bad argument value.  The development version has
  assert statements enabled to detect bad argument values or other
  exceptional conditions.  It will dump core so that you can examine
  the state after termination by using a debugger.  The debug version is
  intended to be used when you know a bug exists and you have to find it.
  In the debug version, virtually all classes have a CheckInvariants()
  member function that will abort if one of the invariants in an object
  is violated.  The development version and production version are
  link compatible -- you don't have to recompile your source, just relink
  with the library.  The debug version is not guaranteed to be link
  compatible.
 
o Added a mechanism to detect objects that are deleted more than once.

o Some bugs were fixed.

o Rewrote the makefile, which now includes an 'install' target to copy files
  to /usr/local/include/mimepp and /usr/local/lib.

o Removed the 'dw' prefix from most of the files.  The include files are
  installed into a mimepp directory.  The include preprocessor lines in
  the source code have the directory prefixed
  (e.g. #include <mimepp/mimepp.h>).

o Created a mimepp.h file that includes all header files required for using
  the library.  You can just put #include <mimepp/mimepp.h> at the top of
  your source code.

Nov 17, 1996

o DwMessageComponent has new protected data member mClassName and new
  member function ClassName().

o DwContentType has new convenience member function CreateBoundary(), which
  applies to multipart entities only.

o DwMessageId is now DwMsgId, which conforms to the RFC-822 BNF grammar.

o Lots of changes to DwHeader.

  + DwHeader::Interpret() is gone.  It's been replaced by
    DwField::CreateFieldBody().

  + Access to all RFC-822, RFC-1036, and RFC-1521 header fields via
    member functions (DwHeader::To(), DwHeader::From(), ...).

  + New member functions to test for the presence of standard header fields.
    (DwHeader::HasTo(), DwHeader::HasFrom(), ...).

  + Various other changes to DwHeader's interface, mostly dealing with
    adding or removing fields.  (Advanced functions.)

o Added member function CreateFieldBody() to DwField.

o Improvements to the wrapper classes used in the examples.

o New wrapper class MessageWithAttachments, used in Example 5 (exampl05.cpp).

o The documentation now includes a tutorial.

o All *.h files have been extensively commented.  These files will serve
  as a poor man's reference manual until the real reference manual is
  completed.

