[gmime: 11/21] Added GMimeFilterSmtpData and deleted GMimeFilterCRLF



commit 60a1d88ab320a10cdcb4b357913c0b60ef651cc3
Author: Jeffrey Stedfast <jestedfa microsoft com>
Date:   Fri Mar 24 16:58:12 2017 -0400

    Added GMimeFilterSmtpData and deleted GMimeFilterCRLF

 docs/reference/gmime-docs.sgml    |    4 +-
 docs/reference/gmime-sections.txt |   22 ++--
 docs/reference/gmime.hierarchy    |    2 +-
 gmime/Makefile.am                 |    4 +-
 gmime/gmime-filter-crlf.c         |  240 -------------------------------------
 gmime/gmime-filter-crlf.h         |   74 -----------
 gmime/gmime-filter-smtp-data.c    |  167 ++++++++++++++++++++++++++
 gmime/gmime-filter-smtp-data.h    |   64 ++++++++++
 gmime/gmime.c                     |    2 +-
 gmime/gmime.h                     |    2 +-
 10 files changed, 249 insertions(+), 332 deletions(-)
---
diff --git a/docs/reference/gmime-docs.sgml b/docs/reference/gmime-docs.sgml
index d167a95..e06ef8e 100644
--- a/docs/reference/gmime-docs.sgml
+++ b/docs/reference/gmime-docs.sgml
@@ -45,13 +45,13 @@
 <!ENTITY GMimeFilterBasic SYSTEM "xml/gmime-filter-basic.xml">
 <!ENTITY GMimeFilterBest SYSTEM "xml/gmime-filter-best.xml">
 <!ENTITY GMimeFilterCharset SYSTEM "xml/gmime-filter-charset.xml">
-<!ENTITY GMimeFilterCRLF SYSTEM "xml/gmime-filter-crlf.xml">
 <!ENTITY GMimeFilterDos2Unix SYSTEM "xml/gmime-filter-dos2unix.xml">
 <!ENTITY GMimeFilterEnriched SYSTEM "xml/gmime-filter-enriched.xml">
 <!ENTITY GMimeFilterFrom SYSTEM "xml/gmime-filter-from.xml">
 <!ENTITY GMimeFilterGZip SYSTEM "xml/gmime-filter-gzip.xml">
 <!ENTITY GMimeFilterHTML SYSTEM "xml/gmime-filter-html.xml">
 <!ENTITY GMimeFilterMd5 SYSTEM "xml/gmime-filter-md5.xml">
+<!ENTITY GMimeFilterSmtpData SYSTEM "xml/gmime-filter-smtp-data.xml">
 <!ENTITY GMimeFilterStrip SYSTEM "xml/gmime-filter-strip.xml">
 <!ENTITY GMimeFilterUnix2Dos SYSTEM "xml/gmime-filter-unix2dos.xml">
 <!ENTITY GMimeFilterWindows SYSTEM "xml/gmime-filter-windows.xml">
@@ -209,13 +209,13 @@ string utilities, file utilities, a main loop abstraction, and so on.
       &GMimeFilterBasic;
       &GMimeFilterBest;
       &GMimeFilterCharset;
-      &GMimeFilterCRLF;
       &GMimeFilterDos2Unix;
       &GMimeFilterEnriched;
       &GMimeFilterFrom;
       &GMimeFilterGZip;
       &GMimeFilterHTML;
       &GMimeFilterMd5;
+      &GMimeFilterSmtpData;
       &GMimeFilterStrip;
       &GMimeFilterUnix2Dos;
       &GMimeFilterWindows;
diff --git a/docs/reference/gmime-sections.txt b/docs/reference/gmime-sections.txt
index d6aca74..c2d4ad9 100644
--- a/docs/reference/gmime-sections.txt
+++ b/docs/reference/gmime-sections.txt
@@ -353,21 +353,21 @@ GMIME_FILTER_CHARSET_GET_CLASS
 </SECTION>
 
 <SECTION>
-<FILE>gmime-filter-crlf</FILE>
-GMimeFilterCRLF
-g_mime_filter_crlf_new
+<FILE>gmime-filter-smtp-data</FILE>
+GMimeFilterSmtpData
+g_mime_filter_smtp_data_new
 
 <SUBSECTION Private>
-g_mime_filter_crlf_get_type
+g_mime_filter_smtp_data_get_type
 
 <SUBSECTION Standard>
-GMimeFilterCRLFClass
-GMIME_TYPE_FILTER_CRLF
-GMIME_FILTER_CRLF
-GMIME_IS_FILTER_CRLF
-GMIME_FILTER_CRLF_CLASS
-GMIME_IS_FILTER_CRLF_CLASS
-GMIME_FILTER_CRLF_GET_CLASS
+GMimeFilterSmtpDataClass
+GMIME_TYPE_FILTER_SMTP_DATA
+GMIME_FILTER_SMTP_DATA
+GMIME_IS_FILTER_SMTP_DATA
+GMIME_FILTER_SMTP_DATA_CLASS
+GMIME_IS_FILTER_SMTP_DATA_CLASS
+GMIME_FILTER_SMTP_DATA_GET_CLASS
 </SECTION>
 
 <SECTION>
diff --git a/docs/reference/gmime.hierarchy b/docs/reference/gmime.hierarchy
index cd32079..d92bbf5 100644
--- a/docs/reference/gmime.hierarchy
+++ b/docs/reference/gmime.hierarchy
@@ -32,13 +32,13 @@ GObject
     GMimeFilterBasic
     GMimeFilterBest
     GMimeFilterCharset
-    GMimeFilterCRLF
     GMimeFilterDos2Unix
     GMimeFilterEnriched
     GMimeFilterFrom
     GMimeFilterGZip
     GMimeFilterHTML
     GMimeFilterMd5
+    GMimeFilterSmtpData
     GMimeFilterStrip
     GMimeFilterUnix2Dos
     GMimeFilterWindows
diff --git a/gmime/Makefile.am b/gmime/Makefile.am
index 12bfccc..cb88f0c 100644
--- a/gmime/Makefile.am
+++ b/gmime/Makefile.am
@@ -36,12 +36,12 @@ libgmime_3_0_la_SOURCES =           \
        gmime-filter-best.c             \
        gmime-filter-charset.c          \
        gmime-filter-checksum.c         \
-       gmime-filter-crlf.c             \
        gmime-filter-dos2unix.c         \
        gmime-filter-enriched.c         \
        gmime-filter-from.c             \
        gmime-filter-gzip.c             \
        gmime-filter-html.c             \
+       gmime-filter-smtp-data.c        \
        gmime-filter-strip.c            \
        gmime-filter-unix2dos.c         \
        gmime-filter-windows.c          \
@@ -98,12 +98,12 @@ gmimeinclude_HEADERS =                      \
        gmime-filter-best.h             \
        gmime-filter-charset.h          \
        gmime-filter-checksum.h         \
-       gmime-filter-crlf.h             \
        gmime-filter-dos2unix.h         \
        gmime-filter-enriched.h         \
        gmime-filter-from.h             \
        gmime-filter-gzip.h             \
        gmime-filter-html.h             \
+       gmime-filter-smtp-data.h        \
        gmime-filter-strip.h            \
        gmime-filter-unix2dos.h         \
        gmime-filter-windows.h          \
diff --git a/gmime/gmime-filter-smtp-data.c b/gmime/gmime-filter-smtp-data.c
new file mode 100644
index 0000000..6900d58
--- /dev/null
+++ b/gmime/gmime-filter-smtp-data.c
@@ -0,0 +1,167 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*  GMime
+ *  Copyright (C) 2000-2017 Jeffrey Stedfast
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public License
+ *  as published by the Free Software Foundation; either version 2.1
+ *  of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+ *  02110-1301, USA.
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "gmime-filter-smtp-data.h"
+
+
+/**
+ * SECTION: gmime-filter-smtp_data
+ * @title: GMimeFilterSmtpData
+ * @short_description: Byte-stuffs outgoing SMTP DATA.
+ *
+ * A #GMimeFilter for byte-stuffing outgoing SMTP DATA.
+ **/
+
+
+static void g_mime_filter_smtp_data_class_init (GMimeFilterSmtpDataClass *klass);
+static void g_mime_filter_smtp_data_init (GMimeFilterSmtpData *filter, GMimeFilterSmtpDataClass *klass);
+static void g_mime_filter_smtp_data_finalize (GObject *object);
+
+static GMimeFilter *filter_copy (GMimeFilter *filter);
+static void filter_filter (GMimeFilter *filter, char *in, size_t len, size_t prespace,
+                          char **out, size_t *outlen, size_t *outprespace);
+static void filter_reset (GMimeFilter *filter);
+
+
+static GMimeFilterClass *parent_class = NULL;
+
+
+GType
+g_mime_filter_smtp_data_get_type (void)
+{
+       static GType type = 0;
+       
+       if (!type) {
+               static const GTypeInfo info = {
+                       sizeof (GMimeFilterSmtpDataClass),
+                       NULL, /* base_class_init */
+                       NULL, /* base_class_finalize */
+                       (GClassInitFunc) g_mime_filter_smtp_data_class_init,
+                       NULL, /* class_finalize */
+                       NULL, /* class_data */
+                       sizeof (GMimeFilterSmtpData),
+                       0,    /* n_preallocs */
+                       (GInstanceInitFunc) g_mime_filter_smtp_data_init,
+               };
+               
+               type = g_type_register_static (GMIME_TYPE_FILTER, "GMimeFilterSmtpData", &info, 0);
+       }
+       
+       return type;
+}
+
+
+static void
+g_mime_filter_smtp_data_class_init (GMimeFilterSmtpDataClass *klass)
+{
+       GMimeFilterClass *filter_class = GMIME_FILTER_CLASS (klass);
+       
+       parent_class = g_type_class_ref (GMIME_TYPE_FILTER);
+       
+       filter_class->copy = filter_copy;
+       filter_class->filter = filter_filter;
+       filter_class->complete = filter_filter;
+       filter_class->reset = filter_reset;
+}
+
+static void
+g_mime_filter_smtp_data_init (GMimeFilterSmtpData *filter, GMimeFilterSmtpDataClass *klass)
+{
+       filter->bol = TRUE;
+}
+
+
+static GMimeFilter *
+filter_copy (GMimeFilter *filter)
+{
+       GMimeFilterSmtpData *smtp_data = (GMimeFilterSmtpData *) filter;
+       
+       return g_mime_filter_smtp_data_new ();
+}
+
+static void
+filter_filter (GMimeFilter *filter, char *inbuf, size_t inlen, size_t prespace,
+              char **outbuf, size_t *outlen, size_t *outprespace)
+{
+       GMimeFilterSmtpData *smtp = (GMimeFilterSmtpData *) filter;
+       register const char *inptr = inbuf;
+       const char *inend = inbuf + inlen;
+       gboolean escape = smtp->bol;
+       int ndots = 0;
+       char *outptr;
+       
+       while (inptr < inend) {
+               if (*inptr == '.' && escape) {
+                       escape = FALSE;
+                       ndots++;
+               } else {
+                       escape = *inptr == '\n';
+               }
+               
+               inptr++;
+       }
+       
+       g_mime_filter_set_size (filter, inlen + ndots, FALSE);
+       
+       outptr = filter->outbuf;
+       inptr = inbuf;
+       
+       while (inptr < inend) {
+               if (*inptr == '.' && smtp->bol) {
+                       smtp->bol = FALSE;
+                       *outptr++ = '.';
+               } else {
+                       smtp->bol = *inptr == '\n';
+               }
+               
+               *outptr++ = *inptr++;
+       }
+       
+       *outlen = outptr - filter->outbuf;
+       *outprespace = filter->outpre;
+       *outbuf = filter->outbuf;
+}
+
+static void
+filter_reset (GMimeFilter *filter)
+{
+       GMimeFilterSmtpData *smtp = (GMimeFilterSmtpData *) filter;
+       
+       smtp->bol = TRUE;
+}
+
+
+/**
+ * g_mime_filter_smtp_data_new:
+ *
+ * Creates a new #GMimeFilterSmtpData filter.
+ *
+ * Returns: a new #GMimeFilterSmtpData filter.
+ **/
+GMimeFilter *
+g_mime_filter_smtp_data_new (void)
+{
+       return g_object_newv (GMIME_TYPE_FILTER_SMTP_DATA, 0, NULL);
+}
diff --git a/gmime/gmime-filter-smtp-data.h b/gmime/gmime-filter-smtp-data.h
new file mode 100644
index 0000000..674f772
--- /dev/null
+++ b/gmime/gmime-filter-smtp-data.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*  GMime
+ *  Copyright (C) 2000-2017 Jeffrey Stedfast
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public License
+ *  as published by the Free Software Foundation; either version 2.1
+ *  of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+ *  02110-1301, USA.
+ */
+
+
+#ifndef __GMIME_FILTER_SMTP_DATA_H__
+#define __GMIME_FILTER_SMTP_DATA_H__
+
+#include <gmime/gmime-filter.h>
+
+G_BEGIN_DECLS
+
+#define GMIME_TYPE_FILTER_SMTP_DATA            (g_mime_filter_smtp_data_get_type ())
+#define GMIME_FILTER_SMTP_DATA(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GMIME_TYPE_FILTER_SMTP_DATA, GMimeFilterSmtpData))
+#define GMIME_FILTER_SMTP_DATA_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), 
GMIME_TYPE_FILTER_SMTP_DATA, GMimeFilterSmtpDataClass))
+#define GMIME_IS_FILTER_SMTP_DATA(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GMIME_TYPE_FILTER_SMTP_DATA))
+#define GMIME_IS_FILTER_SMTP_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), 
GMIME_TYPE_FILTER_SMTP_DATA))
+#define GMIME_FILTER_SMTP_DATA_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GMIME_TYPE_FILTER_SMTP_DATA, GMimeFilterSmtpDataClass))
+
+typedef struct _GMimeFilterSmtpData GMimeFilterSmtpData;
+typedef struct _GMimeFilterSmtpDataClass GMimeFilterSmtpDataClass;
+
+/**
+ * GMimeFilterSmtpData:
+ * @parent_object: parent #GMimeFilter
+ * @bol: beginning-of-line state.
+ *
+ * A filter to byte-stuff SMTP DATA.
+ **/
+struct _GMimeFilterSmtpData {
+       GMimeFilter parent_object;
+       
+       gboolean bol;
+};
+
+struct _GMimeFilterSmtpDataClass {
+       GMimeFilterClass parent_class;
+       
+};
+
+
+GType g_mime_filter_smtp_data_get_type (void);
+
+GMimeFilter *g_mime_filter_smtp_data_new (void);
+
+G_END_DECLS
+
+#endif /* __GMIME_FILTER_SMTP_DATA_H__ */
diff --git a/gmime/gmime.c b/gmime/gmime.c
index 2c56af9..5fab5af 100644
--- a/gmime/gmime.c
+++ b/gmime/gmime.c
@@ -143,12 +143,12 @@ g_mime_init (void)
        g_mime_filter_best_get_type ();
        g_mime_filter_charset_get_type ();
        g_mime_filter_checksum_get_type ();
-       g_mime_filter_crlf_get_type ();
        g_mime_filter_dos2unix_get_type ();
        g_mime_filter_enriched_get_type ();
        g_mime_filter_from_get_type ();
        g_mime_filter_gzip_get_type ();
        g_mime_filter_html_get_type ();
+       g_mime_filter_smtp_data_get_type ();
        g_mime_filter_strip_get_type ();
        g_mime_filter_unix2dos_get_type ();
        g_mime_filter_windows_get_type ();
diff --git a/gmime/gmime.h b/gmime/gmime.h
index c86f4b6..5aabfed 100644
--- a/gmime/gmime.h
+++ b/gmime/gmime.h
@@ -65,12 +65,12 @@
 #include <gmime/gmime-filter-best.h>
 #include <gmime/gmime-filter-charset.h>
 #include <gmime/gmime-filter-checksum.h>
-#include <gmime/gmime-filter-crlf.h>
 #include <gmime/gmime-filter-dos2unix.h>
 #include <gmime/gmime-filter-enriched.h>
 #include <gmime/gmime-filter-from.h>
 #include <gmime/gmime-filter-gzip.h>
 #include <gmime/gmime-filter-html.h>
+#include <gmime/gmime-filter-smtp-data.h>
 #include <gmime/gmime-filter-strip.h>
 #include <gmime/gmime-filter-unix2dos.h>
 #include <gmime/gmime-filter-windows.h>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]