Soup.MessageBody

Fields

Name

Type

Access

Description

data

bytes

r/w

the data

length

int

r/w

length of data

Methods

class

new ()

append (data)

append_bytes (buffer)

complete ()

flatten ()

get_accumulate ()

get_chunk (offset)

got_chunk (chunk)

ref ()

set_accumulate (accumulate)

truncate ()

unref ()

wrote_chunk (chunk)

Details

class Soup.MessageBody

Soup.MessageBody represents the request or response body of a [class`Message`].

Note that while length always reflects the full length of the message body, data is normally None, and will only be filled in after [method`MessageBody`.flatten] is called. For client-side messages, this automatically happens for the response body after it has been fully read. Likewise, for server-side messages, the request body is automatically filled in after being read.

As an added bonus, when data is filled in, it is always terminated with a \0 byte (which is not reflected in length).

classmethod new()
Returns:

a new Soup.MessageBody.

Return type:

Soup.MessageBody

Creates a new Soup.MessageBody.

[class`Message`] uses this internally; you will not normally need to call it yourself.

append(data)
Parameters:

data (bytes) – data to append

Appends length bytes from data to self.

This function is exactly equivalent to [method`MessageBody`.append] with Soup.MemoryUse.TAKE as second argument; it exists mainly for convenience and simplifying language bindings.

append_bytes(buffer)
Parameters:

buffer (GLib.Bytes) – a GLib.Bytes

Appends the data from buffer to self.

complete()

Tags self as being complete.

Call this when using chunked encoding after you have appended the last chunk.

flatten()
Returns:

a GLib.Bytes containing the same data as self. (You must [method`GLib`.Bytes.unref] this if you do not want it.)

Return type:

GLib.Bytes

Fills in self's data field with a buffer containing all of the data in self.

Adds an additional \0 byte not counted by self's length field.

get_accumulate()
Returns:

the accumulate flag for self.

Return type:

bool

Gets the accumulate flag on self.

See [method`MessageBody`.set_accumulate. for details.

get_chunk(offset)
Parameters:

offset (int) – an offset

Returns:

a GLib.Bytes

Return type:

GLib.Bytes or None

Gets a [struct`GLib`.Bytes] containing data from self starting at offset.

The size of the returned chunk is unspecified. You can iterate through the entire body by first calling [method`MessageBody`.get_chunk] with an offset of 0, and then on each successive call, increment the offset by the length of the previously-returned chunk.

If offset is greater than or equal to the total length of self, then the return value depends on whether or not [method`MessageBody`.complete] has been called or not; if it has, then [method`MessageBody`.get_chunk] will return a 0-length chunk (indicating the end of self). If it has not, then [method`MessageBody`.get_chunk] will return None (indicating that self may still potentially have more data, but that data is not currently available).

got_chunk(chunk)
Parameters:

chunk (GLib.Bytes) – a GLib.Bytes received from the network

Handles the Soup.MessageBody part of receiving a chunk of data from the network.

Normally this means appending chunk to self, exactly as with [method`MessageBody`.append_bytes], but if you have set self's accumulate flag to False, then that will not happen.

This is a low-level method which you should not normally need to use.

ref()
Returns:

the passed in Soup.MessageBody

Return type:

Soup.MessageBody

Atomically increments the reference count of self by one.

set_accumulate(accumulate)
Parameters:

accumulate (bool) – whether or not to accumulate body chunks in self

Sets or clears the accumulate flag on self.

(The default value is True.) If set to False, self's data field will not be filled in after the body is fully sent/received, and the chunks that make up self may be discarded when they are no longer needed.

If you set the flag to False on the [class`Message`] request_body of a client-side message, it will block the accumulation of chunks into self's data field, but it will not normally cause the chunks to be discarded after being written like in the server-side [class`Message`] response_body case, because the request body needs to be kept around in case the request needs to be sent a second time due to redirection or authentication.

truncate()

Deletes all of the data in self.

unref()

Atomically decrements the reference count of self by one.

When the reference count reaches zero, the resources allocated by self are freed

wrote_chunk(chunk)
Parameters:

chunk (GLib.Bytes) – a GLib.Bytes returned from [method`MessageBody`.get_chunk]

Handles the Soup.MessageBody part of writing a chunk of data to the network.

Normally this is a no-op, but if you have set self's accumulate flag to False, then this will cause chunk to be discarded to free up memory.

This is a low-level method which you should not need to use, and there are further restrictions on its proper use which are not documented here.