Add a 'flushed' state variable to the private struct. (do_read): Set
authorJeffrey Stedfast <fejj@ximian.com>
Thu, 27 Feb 2003 23:35:58 +0000 (23:35 +0000)
committerJeffrey Stedfast <fejj@src.gnome.org>
Thu, 27 Feb 2003 23:35:58 +0000 (23:35 +0000)
2003-02-27  Jeffrey Stedfast  <fejj@ximian.com>

* camel-stream-filter.c: Add a 'flushed' state variable to the
private struct.
(do_read): Set p->flushed to TRUE after we call
camel_mime_filter_complete() on all the filters.
(do_reset): Set p->flushed to FALSE.
(do_eos): Make sure the filters have been flushed before returning
that the stream is at EOS.

* camel-mime-filter-canon.c (complete): Don't add a eol -
otherwise we will fail to verify some mutt signatures that do not
have a blank line before the boundary line (and note that the last
\n before the boundary really belongs to the boundary anyway) so
#if 0 this code out for now.

camel/ChangeLog
camel/camel-mime-filter-canon.c
camel/camel-stream-filter.c

index d9ca59a..1e8bfcc 100644 (file)
@@ -1,3 +1,19 @@
+2003-02-27  Jeffrey Stedfast  <fejj@ximian.com>
+
+       * camel-stream-filter.c: Add a 'flushed' state variable to the
+       private struct.
+       (do_read): Set p->flushed to TRUE after we call
+       camel_mime_filter_complete() on all the filters.
+       (do_reset): Set p->flushed to FALSE.
+       (do_eos): Make sure the filters have been flushed before returning
+       that the stream is at EOS.
+
+       * camel-mime-filter-canon.c (complete): Don't add a eol -
+       otherwise we will fail to verify some mutt signatures that do not
+       have a blank line before the boundary line (and note that the last
+       \n before the boundary really belongs to the boundary anyway) so
+       #if 0 this code out for now.
+
 2003-02-27  Not Zed  <NotZed@Ximian.com>
 
        * camel-multipart-signed.c: Undo jeff's changes.
index a72f01c..43337ae 100644 (file)
@@ -195,6 +195,12 @@ complete(CamelMimeFilter *f, char *in, size_t len, size_t prespace, char **out,
                        while (o>starto && (o[-1] == ' ' || o[-1] == '\t' || o[-1]=='\r'))
                                o--;
                }
+               
+#if 0
+               /* Note: #if 0'd out because we do not want to add a
+                * \r\n for PGP/MIME verification if it isn't there in
+                * the original content stream */
+               
                /* check end of line canonicalisation */
                if (o>starto) {
                        if (flags & CAMEL_MIME_FILTER_CANON_CRLF) {
@@ -208,6 +214,7 @@ complete(CamelMimeFilter *f, char *in, size_t len, size_t prespace, char **out,
                
                /* and always finish with an eol */
                *o++ = '\n';
+#endif
                
                *outlen = o - *out;
                
index febfb04..0e529c0 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
 #include <string.h>
 #include "camel-stream-filter.h"
 
 #define d(x)
-/*#include <stdio.h>*/
 
 /* use my malloc debugger? */
 /*extern void g_check(void *mp);*/
@@ -45,7 +50,8 @@ struct _CamelStreamFilterPrivate {
        char *filtered;         /* the filtered data */
        size_t filteredlen;
 
-       int last_was_read;      /* was the last op read or write? */
+       int last_was_read:1;    /* was the last op read or write? */
+       int flushed:1           /* were the filters flushed? */
 };
 
 #define READ_PAD (128)         /* bytes padded before buffer */
@@ -90,6 +96,7 @@ camel_stream_filter_init (CamelStreamFilter *obj)
        p->realbuffer = g_malloc(READ_SIZE + READ_PAD);
        p->buffer = p->realbuffer + READ_PAD;
        p->last_was_read = TRUE;
+       p->flushed = FALSE;
 }
 
 static void
@@ -234,6 +241,7 @@ do_read (CamelStream *stream, char *buffer, size_t n)
                                        f = f->next;
                                }
                                size = p->filteredlen;
+                               p->flushed = TRUE;
                        }
                        if (size <= 0)
                                return size;
@@ -368,10 +376,13 @@ do_eos (CamelStream *stream)
 {
        CamelStreamFilter *filter = (CamelStreamFilter *)stream;
        struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-
+       
        if (p->filteredlen > 0)
                return FALSE;
-
+       
+       if (!p->flushed)
+               return FALSE;
+       
        return camel_stream_eos(filter->source);
 }
 
@@ -383,7 +394,8 @@ do_reset (CamelStream *stream)
        struct _filter *f;
 
        p->filteredlen = 0;
-
+       p->flushed = FALSE;
+       
        /* and reset filters */
        f = p->filters;
        while (f) {