## CamelDataWrapper CamelDataWrapper |

## Synopsis

    struct              CamelDataWrapper;
    CamelDataWrapper *  camel_data_wrapper_new              (void);
    GByteArray *        camel_data_wrapper_get_byte_array   (CamelDataWrapper *data_wrapper);
    void                camel_data_wrapper_set_mime_type    (CamelDataWrapper *data_wrapper,
                                                             const gchar *mime_type);
    gchar *             camel_data_wrapper_get_mime_type    (CamelDataWrapper *data_wrapper);
    CamelContentType *  camel_data_wrapper_get_mime_type_field
                                                            (CamelDataWrapper *data_wrapper);
    void                camel_data_wrapper_set_mime_type_field
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelContentType *mime_type);
    gboolean            camel_data_wrapper_is_offline       (CamelDataWrapper *data_wrapper);
    gssize              camel_data_wrapper_write_to_stream_sync
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             GCancellable *cancellable,
                                                             GError **error);
    void                camel_data_wrapper_write_to_stream  (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             gint io_priority,
                                                             GCancellable *cancellable,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);
    gssize              camel_data_wrapper_write_to_stream_finish
                                                            (CamelDataWrapper *data_wrapper,
                                                             GAsyncResult *result,
                                                             GError **error);
    gssize              camel_data_wrapper_decode_to_stream_sync
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             GCancellable *cancellable,
                                                             GError **error);
    void                camel_data_wrapper_decode_to_stream (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             gint io_priority,
                                                             GCancellable *cancellable,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);
    gssize              camel_data_wrapper_decode_to_stream_finish
                                                            (CamelDataWrapper *data_wrapper,
                                                             GAsyncResult *result,
                                                             GError **error);
    gboolean            camel_data_wrapper_construct_from_stream_sync
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             GCancellable *cancellable,
                                                             GError **error);
    void                camel_data_wrapper_construct_from_stream
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             gint io_priority,
                                                             GCancellable *cancellable,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);
    gboolean            camel_data_wrapper_construct_from_stream_finish
                                                            (CamelDataWrapper *data_wrapper,
                                                             GAsyncResult *result,
                                                             GError **error);
    enum                CamelDataWrapperLock;
    void                camel_data_wrapper_lock             (CamelDataWrapper *data_wrapper,
                                                             CamelDataWrapperLock lock);
    void                camel_data_wrapper_unlock           (CamelDataWrapper *data_wrapper,
                                                             CamelDataWrapperLock lock);

## Object Hierarchy

      GObject
       +----CamelObject
             +----CamelDataWrapper
                   +----CamelMedium
                   +----CamelMultipart

## Description

## Details

### struct CamelDataWrapper

    struct CamelDataWrapper;

### camel_data_wrapper_new ()

    CamelDataWrapper *  camel_data_wrapper_new              (void);

Create a new CamelDataWrapper object.

Returns : | a new CamelDataWrapper object

### camel_data_wrapper_get_byte_array ()

    GByteArray *        camel_data_wrapper_get_byte_array   (CamelDataWrapper *data_wrapper);

Returns the GByteArray being used to hold the contents of `data_wrapper`.

Note, it's up to the caller to use this in a thread-safe manner.

`data_wrapper` : | a CamelDataWrapper
Returns : | the GByteArray for `data_wrapper`

Since 3.2

### camel_data_wrapper_set_mime_type ()

    void                camel_data_wrapper_set_mime_type    (CamelDataWrapper *data_wrapper,
                                                             const gchar *mime_type);

This sets the data wrapper's MIME type.

It might fail, but you won't know. It will allow you to set Content-Type parameters on the data wrapper, which are meaningless. You should not be allowed to change the MIME type of a data wrapper that contains data, or at least, if you do, it should invalidate the data.

`data_wrapper` : | a CamelDataWrapper
`mime_type` : | a MIME type

### camel_data_wrapper_get_mime_type ()

    gchar *             camel_data_wrapper_get_mime_type    (CamelDataWrapper *data_wrapper);

`data_wrapper` : | a CamelDataWrapper
Returns : | the MIME type which must be freed by the caller

### camel_data_wrapper_get_mime_type_field ()

    CamelContentType *  camel_data_wrapper_get_mime_type_field
                                                            (CamelDataWrapper *data_wrapper);

`data_wrapper` : | a CamelDataWrapper
Returns : | the parsed form of the data wrapper's MIME type

### camel_data_wrapper_set_mime_type_field ()

    void                camel_data_wrapper_set_mime_type_field
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelContentType *mime_type);

This sets the data wrapper's MIME type. It suffers from the same flaws as `camel_data_wrapper_set_mime_type()`.

`data_wrapper` : | a CamelDataWrapper
`mime_type` : | a CamelContentType

### camel_data_wrapper_is_offline ()

    gboolean            camel_data_wrapper_is_offline       (CamelDataWrapper *data_wrapper);

`data_wrapper` : | a CamelDataWrapper
Returns : | whether `data_wrapper` is "offline" (data stored remotely) or not. Some optional code paths may choose to not operate on offline data.

### camel_data_wrapper_write_to_stream_sync ()

    gssize              camel_data_wrapper_write_to_stream_sync
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             GCancellable *cancellable,
                                                             GError **error);

Writes the content of `data_wrapper` to `stream` in a machine-independent format appropriate for the data. It should be possible to construct an equivalent data wrapper object later by passing this stream to `camel_data_wrapper_construct_from_stream_sync()`.

### Note

This function may block even if the given output stream does not. For example, the content may have to be fetched across a network before it can be written to `stream`.

`data_wrapper` : | a CamelDataWrapper
`stream` : | a CamelStream for output
`cancellable` : | optional GCancellable object, or `NULL`
`error` : | return location for a GError, or `NULL`
Returns : | the number of bytes written, or `-1` on error

Since 3.0

### camel_data_wrapper_write_to_stream ()

    void                camel_data_wrapper_write_to_stream  (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             gint io_priority,
                                                             GCancellable *cancellable,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);

Asynchronously writes the content of `data_wrapper` to `stream` in a machine-independent format appropriate for the data. It should be possible to construct an equivalent data wrapper object later by passing this stream to `camel_data_wrapper_construct_from_stream()`.

When the operation is finished, `callback` will be called. You can then call `camel_data_wrapper_write_to_stream_finish()` to get the result of the operation.

`data_wrapper` : | a CamelDataWrapper
`stream` : | a CamelStream for writed data to be written to
`io_priority` : | the I/O priority of the request
`cancellable` : | optional GCancellable object, or `NULL`
`callback` : | a GAsyncReadyCallback to call when the request is satisfied
`user_data` : | data to pass to the callback function

Since 3.0

### camel_data_wrapper_write_to_stream_finish ()

    gssize              camel_data_wrapper_write_to_stream_finish
                                                            (CamelDataWrapper *data_wrapper,
                                                             GAsyncResult *result,
                                                             GError **error);

Finishes the operation started with `camel_data_wrapper_write_to_stream()`.

`data_wrapper` : | a CamelDataWrapper
`result` : | a GAsyncResult
`error` : | return location for a GError, or `NULL`
Returns : | the number of bytes written, or `-1` or error

Since 3.0

### camel_data_wrapper_decode_to_stream_sync ()

    gssize              camel_data_wrapper_decode_to_stream_sync
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             GCancellable *cancellable,
                                                             GError **error);

Writes the decoded data content to `stream`.

### Note

This function may block even if the given output stream does not. For example, the content may have to be fetched across a network before it can be written to `stream`.

`data_wrapper` : | a CamelDataWrapper
`stream` : | a CamelStream for decoded data to be written to
`cancellable` : | optional GCancellable object, or `NULL`
`error` : | return location for a GError, or `NULL`
Returns : | the number of bytes written, or `-1` on error

Since 3.0

### camel_data_wrapper_decode_to_stream ()

    void                camel_data_wrapper_decode_to_stream (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             gint io_priority,
                                                             GCancellable *cancellable,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);

Asynchronously writes the decoded data content to `stream`.

When the operation is finished, `callback` will be called. You can then call `camel_data_wrapper_decode_to_stream_finish()` to get the result of the operation.

`data_wrapper` : | a CamelDataWrapper
`stream` : | a CamelStream for decoded data to be written to
`io_priority` : | the I/O priority of the request
`cancellable` : | optional GCancellable object, or `NULL`
`callback` : | a GAsyncReadyCallback to call when the request is satisfied
`user_data` : | data to pass to the callback function

Since 3.0

### camel_data_wrapper_decode_to_stream_finish ()

    gssize              camel_data_wrapper_decode_to_stream_finish
                                                            (CamelDataWrapper *data_wrapper,
                                                             GAsyncResult *result,
                                                             GError **error);

Finishes the operation started with `camel_data_wrapper_decode_to_stream()`.

`data_wrapper` : | a CamelDataWrapper
`result` : | a GAsyncResult
`error` : | return location for a GError, or `NULL`
Returns : | the number of bytes written, or `-1` on error

Since 3.0

### camel_data_wrapper_construct_from_stream_sync ()

    gboolean            camel_data_wrapper_construct_from_stream_sync
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             GCancellable *cancellable,
                                                             GError **error);

Constructs the content of `data_wrapper` from the given `stream`.

`data_wrapper` : | a CamelDataWrapper
`stream` : | an input CamelStream
`cancellable` : | optional GCancellable object, or `NULL`
`error` : | return location for a GError, or `NULL`
Returns : | `TRUE` on success, `FALSE` on error

Since 3.0

### camel_data_wrapper_construct_from_stream ()

    void                camel_data_wrapper_construct_from_stream
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream,
                                                             gint io_priority,
                                                             GCancellable *cancellable,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);

Asynchronously constructs the content of `data_wrapper` from the given `stream`.

When the operation is finished, `callback` will be called. You can then call `camel_data_wrapper_construct_from_stream_finish()` to get the result of the operation.

`data_wrapper` : | a CamelDataWrapper
`stream` : | an input CamelStream
`io_priority` : | the I/O priority of the request
`cancellable` : | optional GCancellable object, or `NULL`
`callback` : | a GAsyncReadyCallback to call when the request is satisfied
`user_data` : | data to pass to the callback function

Since 3.0

### camel_data_wrapper_construct_from_stream_finish ()

    gboolean            camel_data_wrapper_construct_from_stream_finish
                                                            (CamelDataWrapper *data_wrapper,
                                                             GAsyncResult *result,
                                                             GError **error);

Finishes the operation started with `camel_data_wrapper_construct_from_stream()`.

`data_wrapper` : | a CamelDataWrapper
`result` : | a GAsyncResult
`error` : | return location for a GError, or `NULL`
Returns : | `TRUE` on success, `FALSE` on error

Since 3.0

### enum CamelDataWrapperLock

    typedef enum {
    	CAMEL_DATA_WRAPPER_STREAM_LOCK
    } CamelDataWrapperLock;

Since 2.32

### camel_data_wrapper_lock ()

    void                camel_data_wrapper_lock             (CamelDataWrapper *data_wrapper,
                                                             CamelDataWrapperLock lock);

Locks `data_wrapper`'s `lock`. Unlock it with `camel_data_wrapper_unlock()`.

`data_wrapper` : | a CamelDataWrapper
`lock` : | lock type to lock

Since 2.32

### camel_data_wrapper_unlock ()

    void                camel_data_wrapper_unlock           (CamelDataWrapper *data_wrapper,
                                                             CamelDataWrapperLock lock);

Unlocks `data_wrapper`'s `lock`, previously locked with `camel_data_wrapper_lock()`.

`data_wrapper` : | a CamelDataWrapper
`lock` : | lock type to unlock

Since 2.32