## CamelMimeFilterYenc

CamelMimeFilterYenc

## Functions

#define | CAMEL_MIME_YENCODE_CRC_FINAL()
CamelMimeFilter * | camel_mime_filter_yenc_new ()
void | camel_mime_filter_yenc_set_state ()
void | camel_mime_filter_yenc_set_crc ()
guint32 | camel_mime_filter_yenc_get_pcrc ()
guint32 | camel_mime_filter_yenc_get_crc ()
gsize | camel_ydecode_step ()
gsize | camel_yencode_step ()
gsize | camel_yencode_close ()

## Types and Values

#define | CAMEL_MIME_YDECODE_STATE_INIT
#define | CAMEL_MIME_YENCODE_STATE_INIT
#define | CAMEL_MIME_YDECODE_STATE_EOLN
#define | CAMEL_MIME_YDECODE_STATE_ESCAPE
#define | CAMEL_MIME_YDECODE_STATE_BEGIN
#define | CAMEL_MIME_YDECODE_STATE_PART
#define | CAMEL_MIME_YDECODE_STATE_DECODE
#define | CAMEL_MIME_YDECODE_STATE_END
#define | CAMEL_MIME_YENCODE_CRC_INIT

## Object Hierarchy

        GObject
        ╰── CamelMimeFilter
            ╰── CamelMimeFilterYenc

## Description

## Functions

### CAMEL_MIME_YENCODE_CRC_FINAL()

    #define CAMEL_MIME_YENCODE_CRC_FINAL(crc) (~crc)

### camel_mime_filter_yenc_new ()

    CamelMimeFilter *
    camel_mime_filter_yenc_new (CamelMimeFilterYencDirection direction);

Create a new CamelMimeFilterYenc filter object.

#### Parameters

direction | encode direction |

#### Returns

a new CamelMimeFilterYenc object

### camel_mime_filter_yenc_set_state ()

    void
    camel_mime_filter_yenc_set_state (CamelMimeFilterYenc *yenc,
                                      gint state);

Sets the current state of the yencoder/ydecoder

#### Parameters

yenc | a CamelMimeFilterYenc object |
state | encode/decode state |

### camel_mime_filter_yenc_set_crc ()

    void
    camel_mime_filter_yenc_set_crc (CamelMimeFilterYenc *yenc,
                                    guint32 crc);

Sets the current crc32 value on the yEnc filter `yenc` to `crc` .

#### Parameters

yenc | a CamelMimeFilterYenc object |
crc | crc32 value |

### camel_mime_filter_yenc_get_pcrc ()

    guint32
    camel_mime_filter_yenc_get_pcrc (CamelMimeFilterYenc *yenc);

Get the computed part crc or (guint32) -1 on fail.

#### Parameters

yenc | a CamelMimeFilterYenc object |

#### Returns

the computed part crc or (guint32) -1 on fail.

### camel_mime_filter_yenc_get_crc ()

    guint32
    camel_mime_filter_yenc_get_crc (CamelMimeFilterYenc *yenc);

Get the computed crc or (guint32) -1 on fail.

#### Parameters

yenc | a CamelMimeFilterYenc object |

#### Returns

the computed crc or (guint32) -1 on fail.

### camel_ydecode_step ()

    gsize
    camel_ydecode_step (const guchar *in,
                        gsize inlen,
                        guchar *out,
                        gint *state,
                        guint32 *pcrc,
                        guint32 *crc);

Performs a 'decode step' on a chunk of yEncoded data of length `inlen` pointed to by `in` and writes to `out` . Assumes the =ybegin and =ypart lines have already been stripped off.

To get the crc32 value of the part, use CAMEL_MIME_YENCODE_CRC_FINAL (`pcrc` ). If there are more parts, you should reuse `crc` without re-initializing. Once all parts have been decoded, you may get the combined crc32 value of all the parts using CAMEL_MIME_YENCODE_CRC_FINAL (`crc` ).

#### Parameters

in | input buffer. | [type guchar][array length=inlen]
inlen | input buffer length |
out | output buffer. | [out][array]
state | ydecode state. | [out]
pcrc | part crc state. | [out]
crc | crc state. | [out]

#### Returns

the number of bytes decoded

### camel_yencode_step ()

    gsize
    camel_yencode_step (const guchar *in,
                        gsize inlen,
                        guchar *out,
                        gint *state,
                        guint32 *pcrc,
                        guint32 *crc);

Performs an yEncode 'encode step' on a chunk of raw data of length `inlen` pointed to by `in` and writes to `out` .

`state` should be initialized to CAMEL_MIME_YENCODE_STATE_INIT before beginning making the first call to this function. Subsequent calls should reuse `state` .

Along the same lines, `pcrc` and `crc` should be initialized to CAMEL_MIME_YENCODE_CRC_INIT before using.

#### Parameters

in | input buffer. | [type guchar][array length=inlen]
inlen | input buffer length |
out | output buffer. | [array][out]
state | yencode state. | [out]
pcrc | part crc state. | [out]
crc | crc state. | [out]

#### Returns

the number of bytes encoded

### camel_yencode_close ()

    gsize
    camel_yencode_close (const guchar *in,
                         gsize inlen,
                         guchar *out,
                         gint *state,
                         guint32 *pcrc,
                         guint32 *crc);

Call this function when finished encoding data with `camel_yencode_step()` to flush off the remaining state.

CAMEL_MIME_YENCODE_CRC_FINAL (`pcrc` ) will give you the crc32 of the encoded "part". If there are more "parts" to encode, you should re-use `crc` when encoding the next "parts" and then use CAMEL_MIME_YENCODE_CRC_FINAL (`crc` ) to get the combined crc32 value of all the parts.

#### Parameters

in | input buffer. | [type guchar][array length=inlen]
inlen | input buffer length |
out | output buffer. | [array][out]
state | yencode state. | [out]
pcrc | part crc state. | [out]
crc | crc state. | [out]

#### Returns

the number of bytes encoded.

## Types and Values

### CAMEL_MIME_YDECODE_STATE_INIT

    #define CAMEL_MIME_YDECODE_STATE_INIT     (0)

### CAMEL_MIME_YENCODE_STATE_INIT

    #define CAMEL_MIME_YENCODE_STATE_INIT     (0)

### CAMEL_MIME_YDECODE_STATE_EOLN

    #define CAMEL_MIME_YDECODE_STATE_EOLN     (1 << 8)

### CAMEL_MIME_YDECODE_STATE_ESCAPE

    #define CAMEL_MIME_YDECODE_STATE_ESCAPE   (1 << 9)

### CAMEL_MIME_YDECODE_STATE_BEGIN

    #define CAMEL_MIME_YDECODE_STATE_BEGIN    (1 << 12)

### CAMEL_MIME_YDECODE_STATE_PART

    #define CAMEL_MIME_YDECODE_STATE_PART     (1 << 13)

### CAMEL_MIME_YDECODE_STATE_DECODE

    #define CAMEL_MIME_YDECODE_STATE_DECODE   (1 << 14)

### CAMEL_MIME_YDECODE_STATE_END

    #define CAMEL_MIME_YDECODE_STATE_END      (1 << 15)

### CAMEL_MIME_YENCODE_CRC_INIT

    #define CAMEL_MIME_YENCODE_CRC_INIT       (~0)