gi-soup-3.0.2: Libsoup bindings
CopyrightWill Thompson and Iñaki García Etxebarria
LicenseLGPL-2.1
MaintainerIñaki García Etxebarria
Safe HaskellSafe-Inferred
LanguageHaskell2010

GI.Soup.Structs.MessageBody

Description

MessageBody represents the request or response body of a [classmessage].

Note that while length always reflects the full length of the message body, data is normally Nothing, and will only be filled in after [methodmessageBody.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).

Synopsis

Exported types

newtype MessageBody Source #

Memory-managed wrapper type.

Constructors

MessageBody (ManagedPtr MessageBody) 

Instances

Instances details
Eq MessageBody Source # 
Instance details

Defined in GI.Soup.Structs.MessageBody

GBoxed MessageBody Source # 
Instance details

Defined in GI.Soup.Structs.MessageBody

ManagedPtrNewtype MessageBody Source # 
Instance details

Defined in GI.Soup.Structs.MessageBody

Methods

toManagedPtr :: MessageBody -> ManagedPtr MessageBody

TypedObject MessageBody Source # 
Instance details

Defined in GI.Soup.Structs.MessageBody

Methods

glibType :: IO GType

HasParentTypes MessageBody Source # 
Instance details

Defined in GI.Soup.Structs.MessageBody

tag ~ 'AttrSet => Constructible MessageBody tag Source # 
Instance details

Defined in GI.Soup.Structs.MessageBody

Methods

new :: MonadIO m => (ManagedPtr MessageBody -> MessageBody) -> [AttrOp MessageBody tag] -> m MessageBody

IsGValue (Maybe MessageBody) Source #

Convert MessageBody to and from GValue. See toGValue and fromGValue.

Instance details

Defined in GI.Soup.Structs.MessageBody

Methods

gvalueGType_ :: IO GType

gvalueSet_ :: Ptr GValue -> Maybe MessageBody -> IO ()

gvalueGet_ :: Ptr GValue -> IO (Maybe MessageBody)

type ParentTypes MessageBody Source # 
Instance details

Defined in GI.Soup.Structs.MessageBody

type ParentTypes MessageBody = '[] :: [Type]

newZeroMessageBody :: MonadIO m => m MessageBody Source #

Construct a MessageBody struct initialized to zero.

Methods

Click to display all available methods, including inherited ones

Expand

Methods

appendBytes, append, complete, flatten, gotChunk, ref, truncate, unref, wroteChunk.

Getters

getAccumulate, getChunk.

Setters

setAccumulate.

append

messageBodyAppend Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> ByteString

data: data to append

-> m () 

Appends length bytes from data to body.

This function is exactly equivalent to [methodmessageBody.append] with MemoryUseTake as second argument; it exists mainly for convenience and simplifying language bindings.

appendBytes

messageBodyAppendBytes Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> Bytes

buffer: a Bytes

-> m () 

Appends the data from buffer to body.

complete

messageBodyComplete Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> m () 

Tags body as being complete.

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

flatten

messageBodyFlatten Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> m Bytes

Returns: a Bytes containing the same data as body. (You must bytesUnref this if you do not want it.)

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

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

getAccumulate

messageBodyGetAccumulate Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> m Bool

Returns: the accumulate flag for body.

Gets the accumulate flag on body.

See [methodmessageBody.set_accumulate. for details.

getChunk

messageBodyGetChunk Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> Int64

offset: an offset

-> m (Maybe Bytes)

Returns: a Bytes

Gets a [structgLib.Bytes] containing data from body starting at offset.

The size of the returned chunk is unspecified. You can iterate through the entire body by first calling [methodmessageBody.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 body, then the return value depends on whether or not [methodmessageBody.complete] has been called or not; if it has, then [methodmessageBody.get_chunk] will return a 0-length chunk (indicating the end of body). If it has not, then [methodmessageBody.get_chunk] will return Nothing (indicating that body may still potentially have more data, but that data is not currently available).

gotChunk

messageBodyGotChunk Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> Bytes

chunk: a Bytes received from the network

-> m () 

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

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

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

new

messageBodyNew Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> m MessageBody

Returns: a new MessageBody.

Creates a new MessageBody.

classmessage
uses this internally; you will not normally need to call it yourself.

ref

messageBodyRef Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> m MessageBody

Returns: the passed in MessageBody

Atomically increments the reference count of body by one.

setAccumulate

messageBodySetAccumulate Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> Bool

accumulate: whether or not to accumulate body chunks in body

-> m () 

Sets or clears the accumulate flag on body.

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

If you set the flag to False on the [classmessage] request_body of a client-side message, it will block the accumulation of chunks into body's data field, but it will not normally cause the chunks to be discarded after being written like in the server-side [classmessage] 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

messageBodyTruncate Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> m () 

Deletes all of the data in body.

unref

messageBodyUnref Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> m () 

Atomically decrements the reference count of body by one.

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

wroteChunk

messageBodyWroteChunk Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MessageBody

body: a MessageBody

-> Bytes

chunk: a Bytes returned from [methodmessageBody.get_chunk]

-> m () 

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

Normally this is a no-op, but if you have set body'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.

Properties

length

length of data

getMessageBodyLength :: MonadIO m => MessageBody -> m Int64 Source #

Get the value of the “length” field. When overloading is enabled, this is equivalent to

get messageBody #length

setMessageBodyLength :: MonadIO m => MessageBody -> Int64 -> m () Source #

Set the value of the “length” field. When overloading is enabled, this is equivalent to

set messageBody [ #length := value ]