## gmime-filter-yenc

gmime-filter-yenc —

## Synopsis

    #define     GMIME_YENCODE_CRC_INIT
    #define     GMIME_YENCODE_CRC_FINAL         (crc)
    size_t      g_mime_ydecode_step             (unsigned char *in,
                                                 size_t inlen,
                                                 unsigned char *out,
                                                 int *state,
                                                 guint32 *pcrc,
                                                 guint32 *crc);
    size_t      g_mime_yencode_step             (unsigned char *in,
                                                 size_t inlen,
                                                 unsigned char *out,
                                                 int *state,
                                                 guint32 *pcrc,
                                                 guint32 *crc);
    size_t      g_mime_yencode_close            (unsigned char *in,
                                                 size_t inlen,
                                                 unsigned char *out,
                                                 int *state,
                                                 guint32 *pcrc,
                                                 guint32 *crc);
    struct      GMimeFilterYenc;
    enum        GMimeFilterYencDirection;
    #define     GMIME_YENCODE_STATE_INIT
    #define     GMIME_YDECODE_STATE_INIT
    #define     GMIME_YDECODE_STATE_EOLN
    #define     GMIME_YDECODE_STATE_ESCAPE
    #define     GMIME_YDECODE_STATE_BEGIN
    #define     GMIME_YDECODE_STATE_PART
    #define     GMIME_YDECODE_STATE_DECODE
    #define     GMIME_YDECODE_STATE_END
    GMimeFilter* g_mime_filter_yenc_new         (GMimeFilterYencDirection direction);
    void        g_mime_filter_yenc_set_state    (GMimeFilterYenc *yenc,
                                                 int state);
    void        g_mime_filter_yenc_set_crc      (GMimeFilterYenc *yenc,
                                                 guint32 crc);
    guint32     g_mime_filter_yenc_get_crc      (GMimeFilterYenc *yenc);
    guint32     g_mime_filter_yenc_get_pcrc     (GMimeFilterYenc *yenc);

## Object Hierarchy

      GObject
       +----GMimeFilter
             +----GMimeFilterYenc

## Description

## Details

### GMIME_YENCODE_CRC_INIT

    #define GMIME_YENCODE_CRC_INIT       (~0)

### GMIME_YENCODE_CRC_FINAL()

    #define GMIME_YENCODE_CRC_FINAL(crc) (~crc)

`crc` : |

### g_mime_ydecode_step ()

    size_t      g_mime_ydecode_step             (unsigned char *in,
                                                 size_t inlen,
                                                 unsigned char *out,
                                                 int *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 GMIME_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 GMIME_YENCODE_CRC_FINAL (`crc`).

`in` : | input buffer
`inlen` : | input buffer length
`out` : | output buffer
`state` : | ydecode state
`pcrc` : | part crc state
`crc` : | crc state
Returns : | the number of bytes decoded.

### g_mime_yencode_step ()

    size_t      g_mime_yencode_step             (unsigned char *in,
                                                 size_t inlen,
                                                 unsigned char *out,
                                                 int *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 GMIME_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 GMIME_YENCODE_CRC_INIT before using.

`in` : | input buffer
`inlen` : | input buffer length
`out` : | output buffer
`state` : | yencode state
`pcrc` : | part crc state
`crc` : | crc state
Returns : | the number of bytes encoded.

### g_mime_yencode_close ()

    size_t      g_mime_yencode_close            (unsigned char *in,
                                                 size_t inlen,
                                                 unsigned char *out,
                                                 int *state,
                                                 guint32 *pcrc,
                                                 guint32 *crc);

Call this function when finished encoding data with g_mime_yencode_step to flush off the remaining state.

GMIME_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 GMIME_YENCODE_CRC_FINAL (`crc`) to get the combined crc32 value of all the parts.

`in` : | input buffer
`inlen` : | input buffer length
`out` : | output buffer
`state` : | yencode state
`pcrc` : | part crc state
`crc` : | crc state
Returns : | the number of bytes encoded.

### struct GMimeFilterYenc

    struct GMimeFilterYenc;

### enum GMimeFilterYencDirection

    typedef enum {
    	GMIME_FILTER_YENC_DIRECTION_ENCODE,
    	GMIME_FILTER_YENC_DIRECTION_DECODE
    } GMimeFilterYencDirection;

### GMIME_YENCODE_STATE_INIT

    #define GMIME_YENCODE_STATE_INIT     (0)

### GMIME_YDECODE_STATE_INIT

    #define GMIME_YDECODE_STATE_INIT     (0)

### GMIME_YDECODE_STATE_EOLN

    #define GMIME_YDECODE_STATE_EOLN     (1 << 8)

### GMIME_YDECODE_STATE_ESCAPE

    #define GMIME_YDECODE_STATE_ESCAPE   (1 << 9)

### GMIME_YDECODE_STATE_BEGIN

    #define GMIME_YDECODE_STATE_BEGIN    (1 << 12)

### GMIME_YDECODE_STATE_PART

    #define GMIME_YDECODE_STATE_PART     (1 << 13)

### GMIME_YDECODE_STATE_DECODE

    #define GMIME_YDECODE_STATE_DECODE   (1 << 14)

### GMIME_YDECODE_STATE_END

    #define GMIME_YDECODE_STATE_END      (1 << 15)

### g_mime_filter_yenc_new ()

    GMimeFilter* g_mime_filter_yenc_new         (GMimeFilterYencDirection direction);

Creates a new yEnc filter.

`direction` : | encode direction
Returns : | a new yEnc filter.

### g_mime_filter_yenc_set_state ()

    void        g_mime_filter_yenc_set_state    (GMimeFilterYenc *yenc,
                                                 int state);

Sets the current state of the yencoder/ydecoder

`yenc` : | yEnc filter
`state` : | encode/decode state

### g_mime_filter_yenc_set_crc ()

    void        g_mime_filter_yenc_set_crc      (GMimeFilterYenc *yenc,
                                                 guint32 crc);

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

`yenc` : | yEnc filter
`crc` : | crc32

### g_mime_filter_yenc_get_crc ()

    guint32     g_mime_filter_yenc_get_crc      (GMimeFilterYenc *yenc);

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

`yenc` : | yEnc filter
Returns : | the computed crc or (guint32) -1 on fail.

### g_mime_filter_yenc_get_pcrc ()

    guint32     g_mime_filter_yenc_get_pcrc     (GMimeFilterYenc *yenc);

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

`yenc` : | yEnc filter
Returns : | the computed part crc or (guint32) -1 on fail.