## GMimeFilterYenc

GMimeFilterYenc — yEncode or yDecode

## Synopsis

                        GMimeFilterYenc;
    GMimeFilter*        g_mime_filter_yenc_new              (gboolean encode);
    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);

    #define             GMIME_YENCODE_CRC_INIT
    #define             GMIME_YENCODE_CRC_FINAL             (crc)
    #define             GMIME_YENCODE_STATE_INIT
    #define             GMIME_YDECODE_STATE_INIT
    #define             GMIME_YDECODE_STATE_EOLN
    #define             GMIME_YDECODE_STATE_ESCAPE
    #define             GMIME_YDECODE_STATE_END
    #define             GMIME_YDECODE_STATE_BEGIN
    #define             GMIME_YDECODE_STATE_DECODE
    #define             GMIME_YDECODE_STATE_PART
    size_t              g_mime_ydecode_step                 (unsigned char *inbuf,
                                                             size_t inlen,
                                                             unsigned char *outbuf,
                                                             int *state,
                                                             guint32 *pcrc,
                                                             guint32 *crc);
    size_t              g_mime_yencode_step                 (unsigned char *inbuf,
                                                             size_t inlen,
                                                             unsigned char *outbuf,
                                                             int *state,
                                                             guint32 *pcrc,
                                                             guint32 *crc);
    size_t              g_mime_yencode_close                (unsigned char *inbuf,
                                                             size_t inlen,
                                                             unsigned char *outbuf,
                                                             int *state,
                                                             guint32 *pcrc,
                                                             guint32 *crc);

## Object Hierarchy

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

## Description

A GMimeFilter used to encode or decode the Usenet yEncoding.

## Details

### GMimeFilterYenc

    typedef struct _GMimeFilterYenc GMimeFilterYenc;

A filter for yEncoding or yDecoding a stream.

### g_mime_filter_yenc_new ()

    GMimeFilter*        g_mime_filter_yenc_new              (gboolean encode);

Creates a new yEnc filter.

`encode` : | encode vs decode
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.

### GMIME_YENCODE_CRC_INIT

    #define GMIME_YENCODE_CRC_INIT       (~0)

Initial state for the crc and pcrc state variables.

### GMIME_YENCODE_CRC_FINAL()

    #define GMIME_YENCODE_CRC_FINAL(crc) (~crc)

Gets the final crc value from `crc`.

`crc` : | crc or pcrc state variable

### GMIME_YENCODE_STATE_INIT

    #define GMIME_YENCODE_STATE_INIT     (0)

Initial state for the `g_mime_ydecode_step()` function.

### GMIME_YDECODE_STATE_INIT

    #define GMIME_YDECODE_STATE_INIT     (0)

Initial state for the `g_mime_ydecode_step()` function.

### GMIME_YDECODE_STATE_EOLN

    #define GMIME_YDECODE_STATE_EOLN     (1 << 8)

State bit that denotes the yEnc filter has reached an end-of-line.

This state is for internal use only.

### GMIME_YDECODE_STATE_ESCAPE

    #define GMIME_YDECODE_STATE_ESCAPE   (1 << 9)

State bit that denotes the yEnc filter has reached an escape sequence.

This state is for internal use only.

### GMIME_YDECODE_STATE_END

    #define GMIME_YDECODE_STATE_END      (1 << 15)

State bit that denoates that `g_mime_ydecode_step()` has finished decoding.

### GMIME_YDECODE_STATE_BEGIN

    #define GMIME_YDECODE_STATE_BEGIN    (1 << 12)

State bit that denotes the yEnc filter has found the =ybegin line.

### GMIME_YDECODE_STATE_DECODE

    #define GMIME_YDECODE_STATE_DECODE   (1 << 14)

State bit that denotes yEnc filter has begun decoding the actual yencoded content and will continue to do so until an =yend line is found (or until there is nothing left to decode).

### GMIME_YDECODE_STATE_PART

    #define GMIME_YDECODE_STATE_PART     (1 << 13)

State bit that denotes the yEnc filter has found the =ypart line. (Note: not all yencoded blocks have one)

### g_mime_ydecode_step ()

    size_t              g_mime_ydecode_step                 (unsigned char *inbuf,
                                                             size_t inlen,
                                                             unsigned char *outbuf,
                                                             int *state,
                                                             guint32 *pcrc,
                                                             guint32 *crc);

Performs a 'decode step' on a chunk of yEncoded data of length `inlen` pointed to by `inbuf` and writes to `outbuf`. 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`).

`inbuf` : | input buffer
`inlen` : | input buffer length
`outbuf` : | 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 *inbuf,
                                                             size_t inlen,
                                                             unsigned char *outbuf,
                                                             int *state,
                                                             guint32 *pcrc,
                                                             guint32 *crc);

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

`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.

`inbuf` : | input buffer
`inlen` : | input buffer length
`outbuf` : | 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 *inbuf,
                                                             size_t inlen,
                                                             unsigned char *outbuf,
                                                             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.

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

## See Also

GMimeFilter