[gmime-devel] Upcoming GMime 3.0 changes
- From: Jeffrey Stedfast <jestedfa microsoft com>
- To: "gmime-devel-list gnome org" <gmime-devel-list gnome org>
- Subject: [gmime-devel] Upcoming GMime 3.0 changes
- Date: Mon, 13 Mar 2017 23:00:52 +0000
Hey all,
I'm sending this email to inform you guys of some upcoming GMime 3.0 features and other changes that I've
implemented.
1. Probably the most import change coming to GMime 3.0 is that each header field/value pair has its own raw
value cache instead of using a cached stream of the entire head block, thus forcing the complete invalidation
of the header cache when anything changed in the headers. In GMime 2.6, once the header cache was
invalidated, each header would get re-folded when written back out to disk. This was obviously not ideal.
2. Next up is the replacement of the old custom GnuPG back-end with GpgMe. Also included with this change is
full support for S/MIME via both multipart/signed and application/pkcs7-mime content-types using gpgsm (via
GpgMe). During this change, I also took the liberty of simplifying the crypto API's a bit and so I was able
to make it such that g_mime_multipart_signed_verify(), for example, no longer requires you to pass it a
GMimeCryptoContext. Instead, GMime parses the Content-Type's protocol parameter and uses that to instantiate
the correct crypto context (GMimeGpgContext for PGP and GMimePkcs7Context for S/MIME). Many of the various
state properties have been replaced with bitflags that can be passed to encrypt() and decrypt(). The sign()
method now also takes a detach argument (might make this into a bitflag instead?) in order to support
encapsulated signing.
3. The GMimeMessage API's have been improved a bit. Gone are the old GMimeMessage API's that return strings
for the From and Reply-To headers. Instead, *all* GMimeMessage API's return an InternetAddressList pointer
which can be used to manipulate the parsed address header. Also improved is the g_mime_message_set_subject()
method which now takes an optional charset parameter (or NULL to use the default).
4. New in GMime 3.0 is the GMimeParserOptions struct which can be passed to GMimeParser and other parser
functions exposed in the lower-level API's. This structure helps define how strict/forgiving the various
parsing routines should be with the input. This replaces the need for g_mime_init()'s flags so you can change
these settings on the fly now.
5. Another new feature is GMimeTextPart which makes getting/setting text on a GMimePart simpler.
GMimeTextPart is a subclass of GMimePart, so all of the GMimePart API's that you are used to still work but
now you also have access to convenient functions like g_mime_text_part_get_text() and
g_mime_text_part_set_text() which removes the need for creating streams, data wrappers, and setting them on
the part.
6. Brand new rfc822 address parser which is more tolerant than the previous generation parser. What's not to
love?
7. And finally we get to a nifty feature that I just hacked up while waiting for some other code to compile
(hey, it takes an hour to compile... I needed something to do!) which is that GMimeParser now scans for
-----BEGIN PGP MESSAGE-----/-----END PGP MESSAGE----- and -----BEGIN PGP SIGNED MESSAGE-----/-----END PGP
SIGNED MESSAGE----- markers while looking for MIME boundaries and sets some state on the corresponding
GMimePart that you can use to quickly decide if the part contains encapsulated OpenPGP data.
Note: for the full list of API changes made, see https://github.com/jstedfast/gmime/blob/master/PORTING
Jeff
[Date Prev][
Date Next] [Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]