1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 * Authors: Jeffrey Stedfast <fejj@ximian.com>
5 * Copyright 2002 Ximian, Inc. (www.ximian.com)
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
28 #include "camel-mime-filter-save.h"
29 #include "camel-stream-mem.h"
31 static void filter (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
32 char **out, size_t *outlen, size_t *outprespace);
33 static void complete (CamelMimeFilter *f, char *in, size_t len,
34 size_t prespace, char **out, size_t *outlen,
36 static void reset (CamelMimeFilter *f);
40 camel_mime_filter_save_class_init (CamelMimeFilterSaveClass *klass)
42 CamelMimeFilterClass *mime_filter_class =
43 (CamelMimeFilterClass *) klass;
45 mime_filter_class->filter = filter;
46 mime_filter_class->complete = complete;
47 mime_filter_class->reset = reset;
51 camel_mime_filter_save_get_type (void)
53 static CamelType type = CAMEL_INVALID_TYPE;
55 if (type == CAMEL_INVALID_TYPE) {
56 type = camel_type_register (camel_mime_filter_get_type(), "CamelMimeFilterSave",
57 sizeof (CamelMimeFilterSave),
58 sizeof (CamelMimeFilterSaveClass),
59 (CamelObjectClassInitFunc) camel_mime_filter_save_class_init,
69 filter (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
70 char **out, size_t *outlen, size_t *outprespace)
72 CamelMimeFilterSave *save = (CamelMimeFilterSave *) f;
75 camel_stream_write (save->stream, in, len);
79 *outprespace = f->outpre;
83 complete (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
84 char **out, size_t *outlen, size_t *outprespace)
87 filter (f, in, len, prespace, out, outlen, outprespace);
91 reset (CamelMimeFilter *f)
98 * camel_mime_filter_save_new:
100 * Create a new #CamelMimeFilterSave filter object.
102 * Returns a new #CamelMimeFilterSave object
105 camel_mime_filter_save_new (void)
107 CamelMimeFilterSave *save = CAMEL_MIME_FILTER_SAVE (camel_object_new (CAMEL_MIME_FILTER_SAVE_TYPE));
109 save->stream = camel_stream_mem_new ();
111 return (CamelMimeFilter *) save;
116 * camel_mime_filter_save_new_with_stream:
117 * @stream: a #CamelStream object
119 * Create a new #CamelMimeFilterSave filter object that will save a
120 * copy of all filtered data to @stream.
122 * Returns a new #CamelMimeFilterSave object
125 camel_mime_filter_save_new_with_stream (CamelStream *stream)
127 CamelMimeFilterSave *save = CAMEL_MIME_FILTER_SAVE (camel_object_new (CAMEL_MIME_FILTER_SAVE_TYPE));
129 save->stream = stream;
130 camel_object_ref (stream);
132 return (CamelMimeFilter *) save;