mirror of
https://github.com/HerculesWS/Hercules
synced 2026-08-15 12:23:13 -04:00
55 lines
1.4 KiB
C
55 lines
1.4 KiB
C
#ifndef MULTIPARTPARSER_H
|
|
#define MULTIPARTPARSER_H
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <sys/types.h>
|
|
|
|
#ifndef MAX_BOUNDARY_SIZE
|
|
#define MAX_BOUNDARY_SIZE 50
|
|
#endif
|
|
|
|
typedef struct multipartparser multipartparser;
|
|
typedef struct multipartparser_callbacks multipartparser_callbacks;
|
|
|
|
typedef int (*multipart_cb) (multipartparser*);
|
|
typedef int (*multipart_data_cb) (multipartparser*, const char* data, size_t size);
|
|
|
|
struct multipartparser {
|
|
/** PRIVATE **/
|
|
char boundary[MAX_BOUNDARY_SIZE + 1];
|
|
int boundary_length;
|
|
int index;
|
|
uint16_t state;
|
|
|
|
/** PUBLIC **/
|
|
void* data;
|
|
};
|
|
|
|
struct multipartparser_callbacks {
|
|
multipart_cb on_body_begin;
|
|
multipart_cb on_part_begin;
|
|
multipart_data_cb on_header_field;
|
|
multipart_data_cb on_header_value;
|
|
multipart_cb on_headers_complete;
|
|
multipart_data_cb on_data;
|
|
multipart_cb on_part_end;
|
|
multipart_cb on_body_end;
|
|
};
|
|
|
|
void multipartparser_init(multipartparser* parser, const char* boundary);
|
|
|
|
void multipartparser_callbacks_init(multipartparser_callbacks* callbacks);
|
|
|
|
size_t multipartparser_execute(multipartparser* parser,
|
|
multipartparser_callbacks* callbacks,
|
|
const char* data,
|
|
size_t size);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif // MULTIPARTPARSER_H
|