aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-mime-filter-crlf.c
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@helixcode.com>2000-06-13 06:32:54 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2000-06-13 06:32:54 +0800
commitd6291ddc1fcf2537953b54c674f96ce651a16cd3 (patch)
tree1df8dff1c715655384ae88e5b6a589ff5d5e3df3 /camel/camel-mime-filter-crlf.c
parent94eda6b11d51fefeff3761a34ac9e1cdd19371ab (diff)
downloadgsoc2013-evolution-d6291ddc1fcf2537953b54c674f96ce651a16cd3.tar
gsoc2013-evolution-d6291ddc1fcf2537953b54c674f96ce651a16cd3.tar.gz
gsoc2013-evolution-d6291ddc1fcf2537953b54c674f96ce651a16cd3.tar.bz2
gsoc2013-evolution-d6291ddc1fcf2537953b54c674f96ce651a16cd3.tar.lz
gsoc2013-evolution-d6291ddc1fcf2537953b54c674f96ce651a16cd3.tar.xz
gsoc2013-evolution-d6291ddc1fcf2537953b54c674f96ce651a16cd3.tar.zst
gsoc2013-evolution-d6291ddc1fcf2537953b54c674f96ce651a16cd3.zip
Deprecated.
2000-06-12 Jeffrey Stedfast <fejj@helixcode.com> * camel-mime-filter-smtp.c: Deprecated. * providers/smtp/camel-smtp-transport.c (smtp_data): Updated to use camel-mime-filter-crlf with my 'dot' extension in place of camel-mime-filter-smtp * camel-mime-part.c (write_to_stream): Updated to reflect changes made to camel-mime-filter-crlf.c * camel-mime-filter-crlf.c (filter): Modified to be able to encode/decode dots ("\n.\n"<->"\n..\n"). Also fixed the decoder so that it should no longer get caught in an infinite loop. svn path=/trunk/; revision=3536
Diffstat (limited to 'camel/camel-mime-filter-crlf.c')
-rw-r--r--camel/camel-mime-filter-crlf.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/camel/camel-mime-filter-crlf.c b/camel/camel-mime-filter-crlf.c
index d39d00887f..63ebfca62b 100644
--- a/camel/camel-mime-filter-crlf.c
+++ b/camel/camel-mime-filter-crlf.c
@@ -1,7 +1,9 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2000 Helix Code, Inc.
*
* Authors: Dan Winship <danw@helixcode.com>
+ * Jeffrey Stedfast <fejj@helixcode.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License
@@ -68,8 +70,11 @@ filter (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
char **out, size_t *outlen, size_t *outprespace)
{
CamelMimeFilterCRLF *crlf = (CamelMimeFilterCRLF *)f;
+ gboolean do_dots;
char *p, *q;
+ do_dots = crlf->mode == CAMEL_MIME_FILTER_CRLF_MODE_CRLF_DOTS;
+
if (crlf->direction == CAMEL_MIME_FILTER_CRLF_ENCODE) {
camel_mime_filter_set_size (f, 2 * len, FALSE);
@@ -78,6 +83,9 @@ filter (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
while (p < in + len) {
if (*p == '\n')
*q++ = '\r';
+ else
+ if (do_dots && *(p - 1) == '\n' && *p == '.' && *(p + 1) != '.')
+ *q++ = '.';
*q++ = *p++;
}
} else {
@@ -86,9 +94,10 @@ filter (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
p = in;
q = f->outbuf;
while (p < in + len) {
- if (*p == '\r')
+ if (*p == '\r') {
crlf->saw_cr = TRUE;
- else {
+ p++;
+ } else {
if (crlf->saw_cr) {
if (*p != '\n')
*q++ = '\r';
@@ -96,6 +105,20 @@ filter (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
}
*q++ = *p++;
}
+
+ if (do_dots) {
+ if (*p == '.' && *(p - 1) == '\n') {
+ crlf->saw_dot = TRUE;
+ p++;
+ } else {
+ if (crlf->saw_dot) {
+ if (*p == '.')
+ p++;
+ crlf->saw_dot = FALSE;
+ }
+ *q++ = *p++;
+ }
+ }
}
}
@@ -121,11 +144,12 @@ reset (CamelMimeFilter *f)
}
CamelMimeFilter *
-camel_mime_filter_crlf_new (CamelMimeFilterCRLFDirection direction)
+camel_mime_filter_crlf_new (CamelMimeFilterCRLFDirection direction, CamelMimeFilterCRLFMode mode)
{
CamelMimeFilterCRLF *crlf = gtk_type_new (CAMEL_MIME_FILTER_CRLF_TYPE);
crlf->direction = direction;
+ crlf->mode = mode;
crlf->saw_cr = FALSE;
return (CamelMimeFilter *)crlf;