1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /*
3  * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
4  *
5  * This library is free software: you can redistribute it and/or modify it
6  * under the terms of the GNU Lesser General Public License as published by
7  * the Free Software Foundation.
8  *
9  * This library is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
12  * for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with this library. If not, see <http://www.gnu.org/licenses/>.
16  *
17  * Authors: Bertrand Guiheneuf <bertrand@helixcode.com>
18  *          Michael Zucchi <notzed@ximian.com>
19  *          Jeffrey Stedfast <fejj@ximian.com>
20  */
21 
22 #if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION)
23 #error "Only <camel/camel.h> can be included directly."
24 #endif
25 
26 #ifndef CAMEL_DATA_WRAPPER_H
27 #define CAMEL_DATA_WRAPPER_H
28 
29 #include <sys/types.h>
30 
31 #include <camel/camel-mime-utils.h>
32 #include <camel/camel-stream.h>
33 
34 /* Standard GObject macros */
35 #define CAMEL_TYPE_DATA_WRAPPER \
36 	(camel_data_wrapper_get_type ())
37 #define CAMEL_DATA_WRAPPER(obj) \
38 	(G_TYPE_CHECK_INSTANCE_CAST \
39 	((obj), CAMEL_TYPE_DATA_WRAPPER, CamelDataWrapper))
40 #define CAMEL_DATA_WRAPPER_CLASS(cls) \
41 	(G_TYPE_CHECK_CLASS_CAST \
42 	((cls), CAMEL_TYPE_DATA_WRAPPER, CamelDataWrapperClass))
43 #define CAMEL_IS_DATA_WRAPPER(obj) \
44 	(G_TYPE_CHECK_INSTANCE_TYPE \
45 	((obj), CAMEL_TYPE_DATA_WRAPPER))
46 #define CAMEL_IS_DATA_WRAPPER_CLASS(cls) \
47 	(G_TYPE_CHECK_CLASS_TYPE \
48 	((cls), CAMEL_TYPE_DATA_WRAPPER))
49 #define CAMEL_DATA_WRAPPER_GET_CLASS(obj) \
50 	(G_TYPE_INSTANCE_GET_CLASS \
51 	((obj), CAMEL_TYPE_DATA_WRAPPER, CamelDataWrapperClass))
52 
53 G_BEGIN_DECLS
54 
55 typedef struct _CamelDataWrapper CamelDataWrapper;
56 typedef struct _CamelDataWrapperClass CamelDataWrapperClass;
57 typedef struct _CamelDataWrapperPrivate CamelDataWrapperPrivate;
58 
59 struct _CamelDataWrapper {
60 	GObject parent;
61 	CamelDataWrapperPrivate *priv;
62 };
63 
64 struct _CamelDataWrapperClass {
65 	GObjectClass parent_class;
66 
67 	/* Non-Blocking Methods */
68 	void		(*set_mime_type)	(CamelDataWrapper *data_wrapper,
69 						 const gchar *mime_type);
70 	gchar *		(*get_mime_type)	(CamelDataWrapper *data_wrapper);
71 	CamelContentType *
72 			(*get_mime_type_field)	(CamelDataWrapper *data_wrapper);
73 	void		(*set_mime_type_field)	(CamelDataWrapper *data_wrapper,
74 						 CamelContentType *mime_type);
75 	gboolean	(*is_offline)		(CamelDataWrapper *data_wrapper);
76 
77 	/* Synchronous I/O Methods */
78 	gssize		(*write_to_stream_sync)	(CamelDataWrapper *data_wrapper,
79 						 CamelStream *stream,
80 						 GCancellable *cancellable,
81 						 GError **error);
82 	gssize		(*decode_to_stream_sync)(CamelDataWrapper *data_wrapper,
83 						 CamelStream *stream,
84 						 GCancellable *cancellable,
85 						 GError **error);
86 	gboolean	(*construct_from_stream_sync)
87 						(CamelDataWrapper *data_wrapper,
88 						 CamelStream *stream,
89 						 GCancellable *cancellable,
90 						 GError **error);
91 	gssize		(*write_to_output_stream_sync)
92 						(CamelDataWrapper *data_wrapper,
93 						 GOutputStream *output_stream,
94 						 GCancellable *cancellable,
95 						 GError **error);
96 	gssize		(*decode_to_output_stream_sync)
97 						(CamelDataWrapper *data_wrapper,
98 						 GOutputStream *output_stream,
99 						 GCancellable *cancellable,
100 						 GError **error);
101 	gboolean	(*construct_from_input_stream_sync)
102 						(CamelDataWrapper *data_wrapper,
103 						 GInputStream *input_stream,
104 						 GCancellable *cancellable,
105 						 GError **error);
106 
107 	/* Padding for future expansion */
108 	gpointer reserved[20];
109 };
110 
111 GType		camel_data_wrapper_get_type	(void);
112 CamelDataWrapper *
113 		camel_data_wrapper_new		(void);
114 GByteArray *	camel_data_wrapper_get_byte_array
115 						(CamelDataWrapper *data_wrapper);
116 CamelTransferEncoding
117 		camel_data_wrapper_get_encoding	(CamelDataWrapper *data_wrapper);
118 void		camel_data_wrapper_set_encoding	(CamelDataWrapper *data_wrapper,
119 						 CamelTransferEncoding encoding);
120 void		camel_data_wrapper_set_mime_type
121 						(CamelDataWrapper *data_wrapper,
122 						 const gchar *mime_type);
123 gchar *		camel_data_wrapper_get_mime_type
124 						(CamelDataWrapper *data_wrapper);
125 CamelContentType *
126 		camel_data_wrapper_get_mime_type_field
127 						(CamelDataWrapper *data_wrapper);
128 void		camel_data_wrapper_set_mime_type_field
129 						(CamelDataWrapper *data_wrapper,
130 						 CamelContentType *mime_type);
131 void		camel_data_wrapper_take_mime_type_field
132 						(CamelDataWrapper *data_wrapper,
133 						 CamelContentType *mime_type);
134 gboolean	camel_data_wrapper_is_offline	(CamelDataWrapper *data_wrapper);
135 void		camel_data_wrapper_set_offline	(CamelDataWrapper *data_wrapper,
136 						 gboolean offline);
137 
138 gssize		camel_data_wrapper_write_to_stream_sync
139 						(CamelDataWrapper *data_wrapper,
140 						 CamelStream *stream,
141 						 GCancellable *cancellable,
142 						 GError **error);
143 void		camel_data_wrapper_write_to_stream
144 						(CamelDataWrapper *data_wrapper,
145 						 CamelStream *stream,
146 						 gint io_priority,
147 						 GCancellable *cancellable,
148 						 GAsyncReadyCallback callback,
149 						 gpointer user_data);
150 gssize		camel_data_wrapper_write_to_stream_finish
151 						(CamelDataWrapper *data_wrapper,
152 						 GAsyncResult *result,
153 						 GError **error);
154 gssize		camel_data_wrapper_decode_to_stream_sync
155 						(CamelDataWrapper *data_wrapper,
156 						 CamelStream *stream,
157 						 GCancellable *cancellable,
158 						 GError **error);
159 void		camel_data_wrapper_decode_to_stream
160 						(CamelDataWrapper *data_wrapper,
161 						 CamelStream *stream,
162 						 gint io_priority,
163 						 GCancellable *cancellable,
164 						 GAsyncReadyCallback callback,
165 						 gpointer user_data);
166 gssize		camel_data_wrapper_decode_to_stream_finish
167 						(CamelDataWrapper *data_wrapper,
168 						 GAsyncResult *result,
169 						 GError **error);
170 gboolean	camel_data_wrapper_construct_from_stream_sync
171 						(CamelDataWrapper *data_wrapper,
172 						 CamelStream *stream,
173 						 GCancellable *cancellable,
174 						 GError **error);
175 void		camel_data_wrapper_construct_from_stream
176 						(CamelDataWrapper *data_wrapper,
177 						 CamelStream *stream,
178 						 gint io_priority,
179 						 GCancellable *cancellable,
180 						 GAsyncReadyCallback callback,
181 						 gpointer user_data);
182 gboolean	camel_data_wrapper_construct_from_stream_finish
183 						(CamelDataWrapper *data_wrapper,
184 						 GAsyncResult *result,
185 						 GError **error);
186 gssize		camel_data_wrapper_write_to_output_stream_sync
187 						(CamelDataWrapper *data_wrapper,
188 						 GOutputStream *output_stream,
189 						 GCancellable *cancellable,
190 						 GError **error);
191 void		camel_data_wrapper_write_to_output_stream
192 						(CamelDataWrapper *data_wrapper,
193 						 GOutputStream *output_stream,
194 						 gint io_priority,
195 						 GCancellable *cancellable,
196 						 GAsyncReadyCallback callback,
197 						 gpointer user_data);
198 gssize		camel_data_wrapper_write_to_output_stream_finish
199 						(CamelDataWrapper *data_wrapper,
200 						 GAsyncResult *result,
201 						 GError **error);
202 gssize		camel_data_wrapper_decode_to_output_stream_sync
203 						(CamelDataWrapper *data_wrapper,
204 						 GOutputStream *output_stream,
205 						 GCancellable *cancellable,
206 						 GError **error);
207 void		camel_data_wrapper_decode_to_output_stream
208 						(CamelDataWrapper *data_wrapper,
209 						 GOutputStream *output_stream,
210 						 gint io_priority,
211 						 GCancellable *cancellable,
212 						 GAsyncReadyCallback callback,
213 						 gpointer user_data);
214 gssize		camel_data_wrapper_decode_to_output_stream_finish
215 						(CamelDataWrapper *data_wrapper,
216 						 GAsyncResult *result,
217 						 GError **error);
218 gboolean	camel_data_wrapper_construct_from_input_stream_sync
219 						(CamelDataWrapper *data_wrapper,
220 						 GInputStream *input_stream,
221 						 GCancellable *cancellable,
222 						 GError **error);
223 void		camel_data_wrapper_construct_from_input_stream
224 						(CamelDataWrapper *data_wrapper,
225 						 GInputStream *input_stream,
226 						 gint io_priority,
227 						 GCancellable *cancellable,
228 						 GAsyncReadyCallback callback,
229 						 gpointer user_data);
230 gboolean	camel_data_wrapper_construct_from_input_stream_finish
231 						(CamelDataWrapper *data_wrapper,
232 						 GAsyncResult *result,
233 						 GError **error);
234 gsize		camel_data_wrapper_calculate_size_sync
235 						(CamelDataWrapper *data_wrapper,
236 						 GCancellable *cancellable,
237 						 GError **error);
238 gsize		camel_data_wrapper_calculate_decoded_size_sync
239 						(CamelDataWrapper *data_wrapper,
240 						 GCancellable *cancellable,
241 						 GError **error);
242 
243 G_END_DECLS
244 
245 #endif /* CAMEL_DATA_WRAPPER_H */
246