[gmime: 11/21] Added GMimeFilterSmtpData and deleted GMimeFilterCRLF
- From: Jeffrey Stedfast <fejj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gmime: 11/21] Added GMimeFilterSmtpData and deleted GMimeFilterCRLF
- Date: Sun, 26 Mar 2017 19:41:34 +0000 (UTC)
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]