1
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
<title>SoupMessageBody</title>
6
<meta name="generator" content="DocBook XSL Stylesheets V1.74.3">
7
<link rel="home" href="index.html" title="libsoup Reference Manual">
8
<link rel="up" href="ch02.html" title="Core API">
9
<link rel="prev" href="libsoup-2.4-SoupMessageHeaders.html" title="SoupMessageHeaders">
10
<link rel="next" href="libsoup-2.4-soup-method.html" title="soup-method">
11
<meta name="generator" content="GTK-Doc V1.12 (XML mode)">
12
<link rel="stylesheet" href="style.css" type="text/css">
13
<link rel="chapter" href="ch01.html" title="Tutorial">
14
<link rel="chapter" href="ch02.html" title="Core API">
15
<link rel="chapter" href="ch03.html" title="Additional Features">
16
<link rel="chapter" href="ch04.html" title="Web Services APIs">
17
<link rel="chapter" href="ch05.html" title="GNOME integration">
18
<link rel="chapter" href="ch06.html" title="Low-level Networking API">
19
<link rel="index" href="ix01.html" title="Index">
21
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
22
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
24
<td><a accesskey="p" href="libsoup-2.4-SoupMessageHeaders.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
25
<td><a accesskey="u" href="ch02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
26
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
27
<th width="100%" align="center">libsoup Reference Manual</th>
28
<td><a accesskey="n" href="libsoup-2.4-soup-method.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
30
<tr><td colspan="5" class="shortcuts">
31
<a href="#libsoup-2.4-SoupMessageBody.synopsis" class="shortcut">Top</a>
33
<a href="#libsoup-2.4-SoupMessageBody.description" class="shortcut">Description</a>
36
<div class="refentry" lang="en">
37
<a name="libsoup-2.4-SoupMessageBody"></a><div class="titlepage"></div>
38
<div class="refnamediv"><table width="100%"><tr>
40
<h2><span class="refentrytitle"><a name="libsoup-2.4-SoupMessageBody.top_of_page"></a>SoupMessageBody</span></h2>
41
<p>SoupMessageBody — HTTP message body</p>
43
<td valign="top" align="right"></td>
45
<div class="refsynopsisdiv">
46
<a name="libsoup-2.4-SoupMessageBody.synopsis"></a><h2>Synopsis</h2>
47
<pre class="synopsis"> <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a>;
48
enum <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMemoryUse" title="enum SoupMemoryUse">SoupMemoryUse</a>;
49
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-new" title="soup_buffer_new ()">soup_buffer_new</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMemoryUse" title="enum SoupMemoryUse">SoupMemoryUse</a> use,
52
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-new-subbuffer" title="soup_buffer_new_subbuffer ()">soup_buffer_new_subbuffer</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *parent,
55
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-new-with-owner" title="soup_buffer_new_with_owner ()">soup_buffer_new_with_owner</a> (gconstpointer data,
58
GDestroyNotify owner_dnotify);
59
gpointer <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-get-owner" title="soup_buffer_get_owner ()">soup_buffer_get_owner</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *buffer);
60
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-copy" title="soup_buffer_copy ()">soup_buffer_copy</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *buffer);
61
void <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-free" title="soup_buffer_free ()">soup_buffer_free</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *buffer);
63
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a>;
64
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> * <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-new" title="soup_message_body_new ()">soup_message_body_new</a> (void);
65
void <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-free" title="soup_message_body_free ()">soup_message_body_free</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body);
67
void <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-set-accumulate" title="soup_message_body_set_accumulate ()">soup_message_body_set_accumulate</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
69
gboolean <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-get-accumulate" title="soup_message_body_get_accumulate ()">soup_message_body_get_accumulate</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body);
71
void <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-append" title="soup_message_body_append ()">soup_message_body_append</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
72
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMemoryUse" title="enum SoupMemoryUse">SoupMemoryUse</a> use,
75
void <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-append-buffer" title="soup_message_body_append_buffer ()">soup_message_body_append_buffer</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
76
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *buffer);
77
void <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-truncate" title="soup_message_body_truncate ()">soup_message_body_truncate</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body);
78
void <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-complete" title="soup_message_body_complete ()">soup_message_body_complete</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body);
79
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-flatten" title="soup_message_body_flatten ()">soup_message_body_flatten</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body);
80
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-get-chunk" title="soup_message_body_get_chunk ()">soup_message_body_get_chunk</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
83
void <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-got-chunk" title="soup_message_body_got_chunk ()">soup_message_body_got_chunk</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
84
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *chunk);
85
void <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-wrote-chunk" title="soup_message_body_wrote_chunk ()">soup_message_body_wrote_chunk</a> (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
86
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *chunk);
89
<div class="refsect1" lang="en">
90
<a name="libsoup-2.4-SoupMessageBody.description"></a><h2>Description</h2>
92
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a> represents the request or response body of a
93
<a class="link" href="SoupMessage.html" title="SoupMessage"><span class="type">SoupMessage</span></a>.
96
In addition to <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>, libsoup also defines a "smaller"
97
data buffer type, <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>, which is primarily used as a
98
component of <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>. In particular, when using chunked
99
encoding to transmit or receive a message, each chunk is
100
represented as a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>.</p>
104
<div class="refsect1" lang="en">
105
<a name="libsoup-2.4-SoupMessageBody.details"></a><h2>Details</h2>
106
<div class="refsect2" lang="en">
107
<a name="SoupBuffer"></a><h3>SoupBuffer</h3>
108
<pre class="programlisting">typedef struct {
114
A data buffer, generally used to represent a chunk of a
115
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>.
118
<em class="parameter"><code>data</code></em> is a <span class="type">char</span> because that's generally convenient; in some
119
situations you may need to cast it to <span class="type">guchar</span> or another type.</p>
122
<div class="variablelist"><table border="0">
123
<col align="left" valign="top">
126
<td><p><span class="term">const char *<em class="structfield"><code><a name="SoupBuffer.data"></a>data</code></em>;</span></p></td>
131
<td><p><span class="term">gsize <em class="structfield"><code><a name="SoupBuffer.length"></a>length</code></em>;</span></p></td>
132
<td> length of <em class="parameter"><code>data</code></em>
139
<div class="refsect2" lang="en">
140
<a name="SoupMemoryUse"></a><h3>enum SoupMemoryUse</h3>
141
<pre class="programlisting">typedef enum {
145
SOUP_MEMORY_TEMPORARY
149
Describes how <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> should use the data passed in by the
153
See also <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-new-with-owner" title="soup_buffer_new_with_owner ()"><code class="function">soup_buffer_new_with_owner()</code></a>, which allows to you create a
154
buffer containing data which is owned by another object.</p>
157
<div class="variablelist"><table border="0">
158
<col align="left" valign="top">
161
<td><p><a name="SOUP-MEMORY-STATIC:CAPS"></a><span class="term"><code class="literal">SOUP_MEMORY_STATIC</code></span></p></td>
162
<td> The memory is statically allocated and
163
constant; libsoup can use the passed-in buffer directly and not
164
need to worry about it being modified or freed.
168
<td><p><a name="SOUP-MEMORY-TAKE:CAPS"></a><span class="term"><code class="literal">SOUP_MEMORY_TAKE</code></span></p></td>
169
<td> The caller has allocated the memory for the
170
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>'s use; libsoup will assume ownership of it and free it
171
(with <code class="function">g_free()</code>) when it is done with it.
175
<td><p><a name="SOUP-MEMORY-COPY:CAPS"></a><span class="term"><code class="literal">SOUP_MEMORY_COPY</code></span></p></td>
176
<td> The passed-in data belongs to the caller; the
177
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> will copy it into new memory, leaving the caller free
178
to reuse the original memory.
182
<td><p><a name="SOUP-MEMORY-TEMPORARY:CAPS"></a><span class="term"><code class="literal">SOUP_MEMORY_TEMPORARY</code></span></p></td>
183
<td> The passed-in data belongs to the caller,
184
but will remain valid for the lifetime of the <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>. The
185
difference between this and <em class="parameter"><code>SOUP_MEMORY_STATIC</code></em> is that if you copy
186
a <em class="parameter"><code>SOUP_MEMORY_TEMPORARY</code></em> buffer, it will make a copy of the memory
187
as well, rather than reusing the original memory.
194
<div class="refsect2" lang="en">
195
<a name="soup-buffer-new"></a><h3>soup_buffer_new ()</h3>
196
<pre class="programlisting"><a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * soup_buffer_new (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMemoryUse" title="enum SoupMemoryUse">SoupMemoryUse</a> use,
200
Creates a new <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> containing <em class="parameter"><code>length</code></em> bytes from <em class="parameter"><code>data</code></em>.</p>
203
<div class="variablelist"><table border="0">
204
<col align="left" valign="top">
207
<td><p><span class="term"><em class="parameter"><code>use</code></em> :</span></p></td>
208
<td> how <em class="parameter"><code>data</code></em> is to be used by the buffer
212
<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
217
<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
218
<td> length of <em class="parameter"><code>data</code></em>
222
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
223
<td> the new <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>.
230
<div class="refsect2" lang="en">
231
<a name="soup-buffer-new-subbuffer"></a><h3>soup_buffer_new_subbuffer ()</h3>
232
<pre class="programlisting"><a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * soup_buffer_new_subbuffer (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *parent,
236
Creates a new <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> containing <em class="parameter"><code>length</code></em> bytes "copied" from
237
<em class="parameter"><code>parent</code></em> starting at <em class="parameter"><code>offset</code></em>. (Normally this will not actually copy
238
any data, but will instead simply reference the same data as
239
<em class="parameter"><code>parent</code></em> does.)</p>
242
<div class="variablelist"><table border="0">
243
<col align="left" valign="top">
246
<td><p><span class="term"><em class="parameter"><code>parent</code></em> :</span></p></td>
247
<td> the parent <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>
251
<td><p><span class="term"><em class="parameter"><code>offset</code></em> :</span></p></td>
252
<td> offset within <em class="parameter"><code>parent</code></em> to start at
256
<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
257
<td> number of bytes to copy from <em class="parameter"><code>parent</code></em>
261
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
262
<td> the new <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>.
269
<div class="refsect2" lang="en">
270
<a name="soup-buffer-new-with-owner"></a><h3>soup_buffer_new_with_owner ()</h3>
271
<pre class="programlisting"><a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * soup_buffer_new_with_owner (gconstpointer data,
274
GDestroyNotify owner_dnotify);</pre>
276
Creates a new <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> containing <em class="parameter"><code>length</code></em> bytes from <em class="parameter"><code>data</code></em>. When
277
the <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> is freed, it will call <em class="parameter"><code>owner_dnotify</code></em>, passing
278
<em class="parameter"><code>owner</code></em> to it. You must ensure that <em class="parameter"><code>data</code></em> will remain valid until
279
<em class="parameter"><code>owner_dnotify</code></em> is called.
282
For example, you could use this to create a buffer containing data
283
returned from libxml without needing to do an extra copy:
287
<div class="informalexample"><pre class="programlisting">
288
xmlDocDumpMemory (doc, &xmlbody, &len);
289
return soup_buffer_new_with_owner (xmlbody, len, xmlbody,
290
(GDestroyNotify)xmlFree);
295
In this example, <em class="parameter"><code>data</code></em> and <em class="parameter"><code>owner</code></em> are the same, but in other cases
296
they would be different (eg, <em class="parameter"><code>owner</code></em> would be a object, and <em class="parameter"><code>data</code></em>
297
would be a pointer to one of the object's fields).</p>
300
<div class="variablelist"><table border="0">
301
<col align="left" valign="top">
304
<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
309
<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
310
<td> length of <em class="parameter"><code>data</code></em>
314
<td><p><span class="term"><em class="parameter"><code>owner</code></em> :</span></p></td>
315
<td> pointer to an object that owns <em class="parameter"><code>data</code></em>
319
<td><p><span class="term"><em class="parameter"><code>owner_dnotify</code></em> :</span></p></td>
320
<td> a function to free/unref <em class="parameter"><code>owner</code></em> when the buffer is
325
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
326
<td> the new <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>.
333
<div class="refsect2" lang="en">
334
<a name="soup-buffer-get-owner"></a><h3>soup_buffer_get_owner ()</h3>
335
<pre class="programlisting">gpointer soup_buffer_get_owner (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *buffer);</pre>
337
Gets the "owner" object for a buffer created with
338
<a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-new-with-owner" title="soup_buffer_new_with_owner ()"><code class="function">soup_buffer_new_with_owner()</code></a>.</p>
341
<div class="variablelist"><table border="0">
342
<col align="left" valign="top">
345
<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
346
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> created with <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-new-with-owner" title="soup_buffer_new_with_owner ()"><code class="function">soup_buffer_new_with_owner()</code></a>
350
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
351
<td> the owner pointer
358
<div class="refsect2" lang="en">
359
<a name="soup-buffer-copy"></a><h3>soup_buffer_copy ()</h3>
360
<pre class="programlisting"><a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * soup_buffer_copy (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *buffer);</pre>
362
Makes a copy of <em class="parameter"><code>buffer</code></em>. In reality, <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> is a refcounted
363
type, and calling <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-copy" title="soup_buffer_copy ()"><code class="function">soup_buffer_copy()</code></a> will normally just increment
364
the refcount on <em class="parameter"><code>buffer</code></em> and return it. However, if <em class="parameter"><code>buffer</code></em> was
365
created with <a class="link" href="libsoup-2.4-SoupMessageBody.html#SOUP-MEMORY-TEMPORARY:CAPS"><span class="type">SOUP_MEMORY_TEMPORARY</span></a> memory, then <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-copy" title="soup_buffer_copy ()"><code class="function">soup_buffer_copy()</code></a>
366
will actually return a copy of it, so that the data in the copy
367
will remain valid after the temporary buffer is freed.</p>
370
<div class="variablelist"><table border="0">
371
<col align="left" valign="top">
374
<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
375
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>
379
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
380
<td> the new (or newly-reffed) buffer
387
<div class="refsect2" lang="en">
388
<a name="soup-buffer-free"></a><h3>soup_buffer_free ()</h3>
389
<pre class="programlisting">void soup_buffer_free (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *buffer);</pre>
391
Frees <em class="parameter"><code>buffer</code></em>. (In reality, as described in the documentation for
392
<a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-buffer-copy" title="soup_buffer_copy ()"><code class="function">soup_buffer_copy()</code></a>, this is actually an "unref" operation, and may
393
or may not actually free <em class="parameter"><code>buffer</code></em>.)</p>
396
<div class="variablelist"><table border="0">
397
<col align="left" valign="top">
399
<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
400
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>
406
<div class="refsect2" lang="en">
407
<a name="SoupMessageBody"></a><h3>SoupMessageBody</h3>
408
<pre class="programlisting">typedef struct {
414
A <a class="link" href="SoupMessage.html" title="SoupMessage"><span class="type">SoupMessage</span></a> request or response body.
417
Note that while <em class="parameter"><code>length</code></em> always reflects the full length of the
418
message body, <em class="parameter"><code>data</code></em> is normally <a href="/opt/jhbuild/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>, and will only be filled in
419
after <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-flatten" title="soup_message_body_flatten ()"><code class="function">soup_message_body_flatten()</code></a> is called. For client-side
420
messages, this automatically happens for the response body after it
421
has been fully read, unless you set the
422
<a class="link" href="SoupMessage.html#SOUP-MESSAGE-OVERWRITE-CHUNKS:CAPS"><code class="literal">SOUP_MESSAGE_OVERWRITE_CHUNKS</code></a> flags. Likewise, for server-side
423
messages, the request body is automatically filled in after being
427
As an added bonus, when <em class="parameter"><code>data</code></em> is filled in, it is always terminated
428
with a '\0' byte (which is not reflected in <em class="parameter"><code>length</code></em>).</p>
431
<div class="variablelist"><table border="0">
432
<col align="left" valign="top">
435
<td><p><span class="term">const char *<em class="structfield"><code><a name="SoupMessageBody.data"></a>data</code></em>;</span></p></td>
440
<td><p><span class="term">goffset <em class="structfield"><code><a name="SoupMessageBody.length"></a>length</code></em>;</span></p></td>
441
<td> length of <em class="parameter"><code>data</code></em>
448
<div class="refsect2" lang="en">
449
<a name="soup-message-body-new"></a><h3>soup_message_body_new ()</h3>
450
<pre class="programlisting"><a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> * soup_message_body_new (void);</pre>
452
Creates a new <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>. <a class="link" href="SoupMessage.html" title="SoupMessage"><span class="type">SoupMessage</span></a> uses this internally; you
453
will not normally need to call it yourself.</p>
456
<div class="variablelist"><table border="0">
457
<col align="left" valign="top">
459
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
460
<td> a new <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>.
466
<div class="refsect2" lang="en">
467
<a name="soup-message-body-free"></a><h3>soup_message_body_free ()</h3>
468
<pre class="programlisting">void soup_message_body_free (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body);</pre>
470
Frees <em class="parameter"><code>body</code></em>. You will not normally need to use this, as
471
<a class="link" href="SoupMessage.html" title="SoupMessage"><span class="type">SoupMessage</span></a> frees its associated message bodies automatically.</p>
474
<div class="variablelist"><table border="0">
475
<col align="left" valign="top">
477
<td><p><span class="term"><em class="parameter"><code>body</code></em> :</span></p></td>
478
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>
484
<div class="refsect2" lang="en">
485
<a name="soup-message-body-set-accumulate"></a><h3>soup_message_body_set_accumulate ()</h3>
486
<pre class="programlisting">void soup_message_body_set_accumulate (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
487
gboolean accumulate);</pre>
489
Sets or clears the accumulate flag on <em class="parameter"><code>body</code></em>. (The default value is
490
<code class="literal">TRUE</code>.) If set to <code class="literal">FALSE</code>, <em class="parameter"><code>body</code></em>'s <code class="literal">data</code> field will not be filled in
491
after the body is fully sent/received, and the chunks that make up
492
<em class="parameter"><code>body</code></em> may be discarded when they are no longer needed.
495
In particular, if you set this flag to <code class="literal">FALSE</code> on an "incoming"
496
message body (that is, the <code class="literal">response_body</code> of a client-side message,
497
or <code class="literal">request_body</code> of a server-side message), this will cause each
498
chunk of the body to be discarded after its corresponding
499
<a class="link" href="SoupMessage.html#SoupMessage-got-chunk" title='The "got-chunk" signal'><span class="type">"got_chunk"</span></a> signal is emitted. (This is equivalent to
500
setting the deprecated <a class="link" href="SoupMessage.html#SOUP-MESSAGE-OVERWRITE-CHUNKS:CAPS"><code class="literal">SOUP_MESSAGE_OVERWRITE_CHUNKS</code></a> flag on the
504
If you set this flag to <code class="literal">FALSE</code> on the <code class="literal">response_body</code> of a
505
server-side message, it will cause each chunk of the body to be
506
discarded after its corresponding <a class="link" href="SoupMessage.html#SoupMessage-wrote-chunk" title='The "wrote-chunk" signal'><span class="type">"wrote_chunk"</span></a> signal
510
(If you set the flag to <code class="literal">FALSE</code> on the <code class="literal">request_body</code> of a
511
client-side message, it will block the accumulation of chunks into
512
<em class="parameter"><code>body</code></em>'s <code class="literal">data</code> field, but it will not cause the chunks to be
513
discarded after being written like in the server-side
514
<code class="literal">response_body</code> case, because the request body needs to be kept
515
around in case the request needs to be sent a second time due to
516
redirection or authentication.)</p>
519
<div class="variablelist"><table border="0">
520
<col align="left" valign="top">
523
<td><p><span class="term"><em class="parameter"><code>body</code></em> :</span></p></td>
524
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>
528
<td><p><span class="term"><em class="parameter"><code>accumulate</code></em> :</span></p></td>
529
<td> whether or not to accumulate body chunks in <em class="parameter"><code>body</code></em>
534
<p class="since">Since 2.4.1</p>
537
<div class="refsect2" lang="en">
538
<a name="soup-message-body-get-accumulate"></a><h3>soup_message_body_get_accumulate ()</h3>
539
<pre class="programlisting">gboolean soup_message_body_get_accumulate (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body);</pre>
541
Gets the accumulate flag on <em class="parameter"><code>body</code></em>; see
542
<a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-set-accumulate" title="soup_message_body_set_accumulate ()"><code class="function">soup_message_body_set_accumulate()</code></a> for details.</p>
545
<div class="variablelist"><table border="0">
546
<col align="left" valign="top">
549
<td><p><span class="term"><em class="parameter"><code>body</code></em> :</span></p></td>
550
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>
554
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
555
<td> the accumulate flag for <em class="parameter"><code>body</code></em>.
561
<p class="since">Since 2.4.1</p>
564
<div class="refsect2" lang="en">
565
<a name="soup-message-body-append"></a><h3>soup_message_body_append ()</h3>
566
<pre class="programlisting">void soup_message_body_append (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
567
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMemoryUse" title="enum SoupMemoryUse">SoupMemoryUse</a> use,
571
Appends <em class="parameter"><code>length</code></em> bytes from <em class="parameter"><code>data</code></em> to <em class="parameter"><code>body</code></em> according to <em class="parameter"><code>use</code></em>.</p>
574
<div class="variablelist"><table border="0">
575
<col align="left" valign="top">
578
<td><p><span class="term"><em class="parameter"><code>body</code></em> :</span></p></td>
579
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>
583
<td><p><span class="term"><em class="parameter"><code>use</code></em> :</span></p></td>
584
<td> how to use <em class="parameter"><code>data</code></em>
588
<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
593
<td><p><span class="term"><em class="parameter"><code>length</code></em> :</span></p></td>
594
<td> length of <em class="parameter"><code>data</code></em>
601
<div class="refsect2" lang="en">
602
<a name="soup-message-body-append-buffer"></a><h3>soup_message_body_append_buffer ()</h3>
603
<pre class="programlisting">void soup_message_body_append_buffer (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
604
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *buffer);</pre>
606
Appends the data from <em class="parameter"><code>buffer</code></em> to <em class="parameter"><code>body</code></em>. (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a> uses
607
<span class="type">SoupBuffers</span> internally, so this is normally a constant-time
608
operation that doesn't actually require copying the data in
609
<em class="parameter"><code>buffer</code></em>.)</p>
612
<div class="variablelist"><table border="0">
613
<col align="left" valign="top">
616
<td><p><span class="term"><em class="parameter"><code>body</code></em> :</span></p></td>
617
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>
621
<td><p><span class="term"><em class="parameter"><code>buffer</code></em> :</span></p></td>
622
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>
629
<div class="refsect2" lang="en">
630
<a name="soup-message-body-truncate"></a><h3>soup_message_body_truncate ()</h3>
631
<pre class="programlisting">void soup_message_body_truncate (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body);</pre>
633
Deletes all of the data in <em class="parameter"><code>body</code></em>.</p>
636
<div class="variablelist"><table border="0">
637
<col align="left" valign="top">
639
<td><p><span class="term"><em class="parameter"><code>body</code></em> :</span></p></td>
640
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>
646
<div class="refsect2" lang="en">
647
<a name="soup-message-body-complete"></a><h3>soup_message_body_complete ()</h3>
648
<pre class="programlisting">void soup_message_body_complete (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body);</pre>
650
Tags <em class="parameter"><code>body</code></em> as being complete; Call this when using chunked encoding
651
after you have appended the last chunk.</p>
654
<div class="variablelist"><table border="0">
655
<col align="left" valign="top">
657
<td><p><span class="term"><em class="parameter"><code>body</code></em> :</span></p></td>
658
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>
664
<div class="refsect2" lang="en">
665
<a name="soup-message-body-flatten"></a><h3>soup_message_body_flatten ()</h3>
666
<pre class="programlisting"><a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * soup_message_body_flatten (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body);</pre>
668
Fills in <em class="parameter"><code>body</code></em>'s data field with a buffer containing all of the
669
data in <em class="parameter"><code>body</code></em> (plus an additional '\0' byte not counted by <em class="parameter"><code>body</code></em>'s
673
<div class="variablelist"><table border="0">
674
<col align="left" valign="top">
677
<td><p><span class="term"><em class="parameter"><code>body</code></em> :</span></p></td>
678
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>
682
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
683
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> containing the same data as <em class="parameter"><code>body</code></em>.
684
(You must free this buffer if you do not want it.)
691
<div class="refsect2" lang="en">
692
<a name="soup-message-body-get-chunk"></a><h3>soup_message_body_get_chunk ()</h3>
693
<pre class="programlisting"><a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> * soup_message_body_get_chunk (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
694
goffset offset);</pre>
696
Gets a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> containing data from <em class="parameter"><code>body</code></em> starting at <em class="parameter"><code>offset</code></em>.
697
The size of the returned chunk is unspecified. You can iterate
698
through the entire body by first calling
699
<a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-get-chunk" title="soup_message_body_get_chunk ()"><code class="function">soup_message_body_get_chunk()</code></a> with an offset of 0, and then on each
700
successive call, increment the offset by the length of the
701
previously-returned chunk.
704
If <em class="parameter"><code>offset</code></em> is greater than or equal to the total length of <em class="parameter"><code>body</code></em>,
705
then the return value depends on whether or not
706
<a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-complete" title="soup_message_body_complete ()"><code class="function">soup_message_body_complete()</code></a> has been called or not; if it has,
707
then <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-get-chunk" title="soup_message_body_get_chunk ()"><code class="function">soup_message_body_get_chunk()</code></a> will return a 0-length chunk
708
(indicating the end of <em class="parameter"><code>body</code></em>). If it has not, then
709
<a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-get-chunk" title="soup_message_body_get_chunk ()"><code class="function">soup_message_body_get_chunk()</code></a> will return <a href="/opt/jhbuild/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a> (indicating that
710
<em class="parameter"><code>body</code></em> may still potentially have more data, but that data is not
711
currently available).</p>
714
<div class="variablelist"><table border="0">
715
<col align="left" valign="top">
718
<td><p><span class="term"><em class="parameter"><code>body</code></em> :</span></p></td>
719
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>
723
<td><p><span class="term"><em class="parameter"><code>offset</code></em> :</span></p></td>
728
<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
729
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a>, or <a href="/opt/jhbuild/share/gtk-doc/html/liboil/liboil-liboiljunk.html#NULL:CAPS"><code class="literal">NULL</code></a>.
736
<div class="refsect2" lang="en">
737
<a name="soup-message-body-got-chunk"></a><h3>soup_message_body_got_chunk ()</h3>
738
<pre class="programlisting">void soup_message_body_got_chunk (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
739
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *chunk);</pre>
741
Handles the <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a> part of receiving a chunk of data from
742
the network. Normally this means appending <em class="parameter"><code>chunk</code></em> to <em class="parameter"><code>body</code></em>, exactly
743
as with <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-append-buffer" title="soup_message_body_append_buffer ()"><code class="function">soup_message_body_append_buffer()</code></a>, but if you have set
744
<em class="parameter"><code>body</code></em>'s accumulate flag to <code class="literal">FALSE</code>, then that will not happen.
747
This is a low-level method which you should not normally need to
751
<div class="variablelist"><table border="0">
752
<col align="left" valign="top">
755
<td><p><span class="term"><em class="parameter"><code>body</code></em> :</span></p></td>
756
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>
760
<td><p><span class="term"><em class="parameter"><code>chunk</code></em> :</span></p></td>
761
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> received from the network
766
<p class="since">Since 2.4.1</p>
769
<div class="refsect2" lang="en">
770
<a name="soup-message-body-wrote-chunk"></a><h3>soup_message_body_wrote_chunk ()</h3>
771
<pre class="programlisting">void soup_message_body_wrote_chunk (<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody">SoupMessageBody</a> *body,
772
<a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer">SoupBuffer</a> *chunk);</pre>
774
Handles the <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a> part of writing a chunk of data to the
775
network. Normally this is a no-op, but if you have set <em class="parameter"><code>body</code></em>'s
776
accumulate flag to <code class="literal">FALSE</code>, then this will cause <em class="parameter"><code>chunk</code></em> to be
777
discarded to free up memory.
780
This is a low-level method which you should not need to use, and
781
there are further restrictions on its proper use which are not
785
<div class="variablelist"><table border="0">
786
<col align="left" valign="top">
789
<td><p><span class="term"><em class="parameter"><code>body</code></em> :</span></p></td>
790
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupMessageBody" title="SoupMessageBody"><span class="type">SoupMessageBody</span></a>
794
<td><p><span class="term"><em class="parameter"><code>chunk</code></em> :</span></p></td>
795
<td> a <a class="link" href="libsoup-2.4-SoupMessageBody.html#SoupBuffer" title="SoupBuffer"><span class="type">SoupBuffer</span></a> returned from <a class="link" href="libsoup-2.4-SoupMessageBody.html#soup-message-body-get-chunk" title="soup_message_body_get_chunk ()"><code class="function">soup_message_body_get_chunk()</code></a>
800
<p class="since">Since 2.4.1</p>
803
<div class="refsect1" lang="en">
804
<a name="libsoup-2.4-SoupMessageBody.see-also"></a><h2>See Also</h2>
805
<a class="link" href="SoupMessage.html" title="SoupMessage"><span class="type">SoupMessage</span></a>
810
Generated by GTK-Doc V1.12</div>