## GMimeFilterYenc GMimeFilterYenc — yEncode or yDecode |

## Functions

GMimeFilter * | g_mime_filter_yenc_new ()
void | g_mime_filter_yenc_set_state ()
void | g_mime_filter_yenc_set_crc ()
guint32 | g_mime_filter_yenc_get_crc ()
guint32 | g_mime_filter_yenc_get_pcrc ()
#define | GMIME_YENCODE_CRC_FINAL()
size_t | g_mime_ydecode_step ()
size_t | g_mime_yencode_step ()
size_t | g_mime_yencode_close ()

## Types and Values

struct | GMimeFilterYenc
#define | GMIME_YENCODE_CRC_INIT
#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

## Description

A GMimeFilter used to encode or decode the Usenet yEncoding.

## Functions

### g_mime_filter_yenc_new ()

    GMimeFilter *
    g_mime_filter_yenc_new (gboolean encode);

Creates a new yEnc filter.

#### Parameters

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

#### Parameters

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

#### Parameters

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.

#### Parameters

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.

#### Parameters

yenc | yEnc filter |

#### Returns

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

### GMIME_YENCODE_CRC_FINAL()

    #define GMIME_YENCODE_CRC_FINAL(crc) (~crc)

Gets the final crc value from `crc` .

#### Parameters

crc | crc or pcrc state variable |

### g_mime_ydecode_step ()

    size_t
    g_mime_ydecode_step (const 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` ).

#### Parameters

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 (const 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.

#### Parameters

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 (const 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.

#### Parameters

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.

## Types and Values

### struct GMimeFilterYenc

    struct GMimeFilterYenc {
    	GMimeFilter parent_object;

    	gboolean encode;

    	int part;

    	int state;
    	guint32 pcrc;
    	guint32 crc;
    };

A filter for yEncoding or yDecoding a stream.

#### Members

GMimeFilter `parent_object`; | parent GMimeFilter |
gboolean `encode`; | encode vs decode |
int `part`; | part id |
int `state`; | encode/decode state |
guint32 `pcrc`; | part crc |
guint32 `crc`; | full crc |

### GMIME_YENCODE_CRC_INIT

    #define GMIME_YENCODE_CRC_INIT       (~0)

Initial state for the crc and pcrc state variables.

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

## See Also

GMimeFilter