# `./fio-stl/004 multipart.h`

3 public symbols.

### Types

#### `fio_multipart_parser_callbacks_s`

```c
typedef struct {
/**
* Called for each regular form field (no filename).
* Returns user-defined context (can be NULL).
*
* Note: If on_field_start is provided, this callback is ignored and the
* streaming field callbacks (on_field_start/on_field_data/on_field_end)
* are used instead.
*/
void *(*on_field)(void *udata,
fio_buf_info_s name,
fio_buf_info_s value,
fio_buf_info_s content_type);
/**
* Called when a large field starts (optional).
* If NULL but on_field exists, on_field is used instead (backward
* compatible). Returns context for this field (passed to
* on_field_data/on_field_end).
*/
void *(*on_field_start)(void *udata,
fio_buf_info_s name,
fio_buf_info_s content_type);
/**
* Called with field data chunk.
* May be called multiple times per field for streaming.
* Returns non-zero to abort parsing.
*/
int (*on_field_data)(void *udata, void *field_ctx, fio_buf_info_s data);
/**
* Called when field ends.
*/
void (*on_field_end)(void *udata, void *field_ctx);
/**
* Called when a file upload starts.
* Returns context for this file (passed to on_file_data/on_file_end).
*/
void *(*on_file_start)(void *udata,
fio_buf_info_s name,
fio_buf_info_s filename,
fio_buf_info_s content_type);
/**
* Called with file data chunk.
* May be called multiple times per file for streaming.
* Returns non-zero to abort parsing.
*/
int (*on_file_data)(void *udata, void *file_ctx, fio_buf_info_s data);
/**
* Called when file upload ends.
*/
void (*on_file_end)(void *udata, void *file_ctx);
/**
* Called on parse error (optional).
*/
void (*on_error)(void *udata);
} fio_multipart_parser_callbacks_s
```

The MIME multipart parser callbacks.

_Symbol type:_ `type`

#### `fio_multipart_result_s`

```c
typedef struct {
/** Number of bytes consumed from the input buffer. */
size_t consumed;
/** Number of form fields parsed. */
size_t field_count;
/** Number of files parsed. */
size_t file_count;
/** Error code: 0 = success, -1 = error, -2 = need more data. */
int err;
} fio_multipart_result_s
```

The MIME multipart parse result type.

_Symbol type:_ `type`

### Functions

#### `fio_multipart_parse`

```c
fio_multipart_result_s fio_multipart_parse(const fio_multipart_parser_callbacks_s *callbacks, void *udata, fio_buf_info_s boundary, const char *data, size_t len)
```

Parse MIME multipart data.

`callbacks` contains the callback functions (should be static const).
`udata` is user data passed to all callbacks.
`boundary` is the multipart boundary string (without leading "--").
`data` is the data to parse.
`len` is the length of the data.

Returns a result struct containing:
- `consumed`: Number of bytes consumed from the buffer
- `field_count`: Number of form fields parsed
- `file_count`: Number of files parsed
- `err`: 0 = success, -1 = error, -2 = need more data

For streaming, call again with remaining data appended to unconsumed data.

_Symbol type:_ `function`

-----------------------------------------------------
