1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /*
3  * Copyright (C) 2000-2003, Ximian, Inc.
4  */
5 
6 #ifndef __SOUP_MESSAGE_BODY_H__
7 #define __SOUP_MESSAGE_BODY_H__ 1
8 
9 #include <libsoup/soup-types.h>
10 
11 G_BEGIN_DECLS
12 
13 typedef enum {
14 	SOUP_MEMORY_STATIC,
15 	SOUP_MEMORY_TAKE,
16 	SOUP_MEMORY_COPY,
17 	SOUP_MEMORY_TEMPORARY
18 } SoupMemoryUse;
19 
20 typedef struct {
21 	const char *data;
22 	gsize       length;
23 } SoupBuffer;
24 
25 SOUP_AVAILABLE_IN_2_4
26 GType soup_buffer_get_type (void);
27 #define SOUP_TYPE_BUFFER (soup_buffer_get_type ())
28 
29 SOUP_AVAILABLE_IN_2_4
30 SoupBuffer *soup_buffer_new            (SoupMemoryUse   use,
31 					gconstpointer   data,
32 					gsize           length);
33 SOUP_AVAILABLE_IN_2_32
34 SoupBuffer *soup_buffer_new_take       (guchar         *data,
35 					gsize           length);
36 SOUP_AVAILABLE_IN_2_4
37 SoupBuffer *soup_buffer_new_subbuffer  (SoupBuffer     *parent,
38 					gsize           offset,
39 					gsize           length);
40 
41 SOUP_AVAILABLE_IN_2_4
42 SoupBuffer *soup_buffer_new_with_owner (gconstpointer   data,
43 					gsize           length,
44 					gpointer        owner,
45 					GDestroyNotify  owner_dnotify);
46 SOUP_AVAILABLE_IN_2_4
47 gpointer    soup_buffer_get_owner      (SoupBuffer     *buffer);
48 SOUP_AVAILABLE_IN_2_32
49 void        soup_buffer_get_data       (SoupBuffer     *buffer,
50 					const guint8  **data,
51 					gsize          *length);
52 SOUP_AVAILABLE_IN_2_40
53 GBytes     *soup_buffer_get_as_bytes   (SoupBuffer *buffer);
54 
55 SOUP_AVAILABLE_IN_2_4
56 SoupBuffer *soup_buffer_copy           (SoupBuffer     *buffer);
57 SOUP_AVAILABLE_IN_2_4
58 void        soup_buffer_free           (SoupBuffer     *buffer);
59 
60 typedef struct {
61 	const char *data;
62 	goffset     length;
63 } SoupMessageBody;
64 
65 SOUP_AVAILABLE_IN_2_4
66 GType soup_message_body_get_type (void);
67 #define SOUP_TYPE_MESSAGE_BODY (soup_message_body_get_type ())
68 
69 SOUP_AVAILABLE_IN_2_4
70 SoupMessageBody *soup_message_body_new           (void);
71 
72 SOUP_AVAILABLE_IN_2_24
73 void             soup_message_body_set_accumulate(SoupMessageBody *body,
74 						  gboolean         accumulate);
75 SOUP_AVAILABLE_IN_2_24
76 gboolean         soup_message_body_get_accumulate(SoupMessageBody *body);
77 
78 SOUP_AVAILABLE_IN_2_4
79 void             soup_message_body_append        (SoupMessageBody *body,
80 						  SoupMemoryUse    use,
81 						  gconstpointer    data,
82 						  gsize            length);
83 SOUP_AVAILABLE_IN_2_32
84 void             soup_message_body_append_take   (SoupMessageBody *body,
85 						  guchar          *data,
86 						  gsize            length);
87 SOUP_AVAILABLE_IN_2_4
88 void             soup_message_body_append_buffer (SoupMessageBody *body,
89 						  SoupBuffer      *buffer);
90 SOUP_AVAILABLE_IN_2_4
91 void             soup_message_body_truncate      (SoupMessageBody *body);
92 SOUP_AVAILABLE_IN_2_4
93 void             soup_message_body_complete      (SoupMessageBody *body);
94 
95 SOUP_AVAILABLE_IN_2_4
96 SoupBuffer      *soup_message_body_flatten       (SoupMessageBody *body);
97 
98 SOUP_AVAILABLE_IN_2_4
99 SoupBuffer      *soup_message_body_get_chunk     (SoupMessageBody *body,
100 						  goffset          offset);
101 
102 SOUP_AVAILABLE_IN_2_24
103 void             soup_message_body_got_chunk     (SoupMessageBody *body,
104 						  SoupBuffer      *chunk);
105 SOUP_AVAILABLE_IN_2_24
106 void             soup_message_body_wrote_chunk   (SoupMessageBody *body,
107 						  SoupBuffer      *chunk);
108 
109 SOUP_AVAILABLE_IN_2_4
110 void             soup_message_body_free          (SoupMessageBody *body);
111 
112 G_END_DECLS
113 
114 #endif /* __SOUP_MESSAGE_BODY_H__ */
115