## CamelDataWrapper

CamelDataWrapper

## Synopsis

                        CamelDataWrapper;
    CamelDataWrapper *  camel_data_wrapper_new              (void);
    gssize              camel_data_wrapper_write_to_stream  (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream);
    gssize              camel_data_wrapper_decode_to_stream (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream);
    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);
    gint                camel_data_wrapper_construct_from_stream
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream);
    gboolean            camel_data_wrapper_is_offline       (CamelDataWrapper *data_wrapper);
    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

### CamelDataWrapper

    typedef struct _CamelDataWrapper CamelDataWrapper;

### camel_data_wrapper_new ()

    CamelDataWrapper *  camel_data_wrapper_new              (void);

Create a new CamelDataWrapper object.

Returns : | a new CamelDataWrapper object

### camel_data_wrapper_write_to_stream ()

    gssize              camel_data_wrapper_write_to_stream  (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream);

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.

`data_wrapper` : | a CamelDataWrapper object
`stream` : | a CamelStream for output
Returns : | the number of bytes written, or `-1` on fail

### camel_data_wrapper_decode_to_stream ()

    gssize              camel_data_wrapper_decode_to_stream (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream);

Writes the decoded data content to `stream`.

`data_wrapper` : | a CamelDataWrapper object
`stream` : | a CamelStream for decoded data to be written to
Returns : | the number of bytes written, or `-1` on fail

### 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 object
`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 object
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 object
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 object
`mime_type` : | a CamelContentType

### camel_data_wrapper_construct_from_stream ()

    gint                camel_data_wrapper_construct_from_stream
                                                            (CamelDataWrapper *data_wrapper,
                                                             CamelStream *stream);

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

`data_wrapper` : | a CamelDataWrapper object
`stream` : | an input CamelStream
Returns : | `0` on success or `-1` on fail

### camel_data_wrapper_is_offline ()

    gboolean            camel_data_wrapper_is_offline       (CamelDataWrapper *data_wrapper);

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

### enum CamelDataWrapperLock

    typedef enum {
    	CAMEL_DATA_WRAPPER_STREAM_LOCK
    } CamelDataWrapperLock;

Since 3.0

### 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 3.0

### 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 3.0