Контекст логгера
typedef struct logger {
FILE *file;
logger_callback callback;
logger_log_level level;
void *attachment;
} logger;
fileУказатель на структуру FILE открытого логфайлаcallbackУказатель на коллбэк (если он ненулевой, тоfileне используется)levelУровень логгирования
Уровень логгирования
enum logger_log_level {
LOG_LEVEL_ERROR = 0,
LOG_LEVEL_WARN,
LOG_LEVEL_INFO,
LOG_LEVEL_DEBUG,
LOG_LEVEL_TRACE
};
Уровни соответствуют общепринятым.
Контекст HTTP-парсера
struct http_session {
void *attachment;
union {
struct http1_session http1;
struct http2_session http2;
}
};
attachment- параметр для использования в коллбэках, переданный при инициализации парсера
Контекст парсера HTTP/1 содержит контекст единственного потока данных.
struct http1_session {
http_stream *stream;
};
Контекст парсера HTTP/2 содержит контекст настройки nghttp2-сессии и карту контекстов для каждого потока.
struct http2_session {
nghttp2_session session;
// int -> http_stream *
hash_t() stream_id_to_stream;
};
Контекст одного потока HTTP, содержит заголовки текущего запроса или ответа.
struct http_stream {
void *attachment;
// PRIVATE FIELDS
...
};
attachment- параметр для использования в коллбэках, переданный при инициализации парсера
Тип парсера - HTTP-запрос, HTTP-ответ, HTTP/2
enum http_session_type {
HTTP_REQUEST,
HTTP_RESPONSE,
HTTP2
};
Открывает лог
logger *logger_open(const char *filename, logger_log_level_t log_level, logger_callback_t callback, void *attachment);
filename- имя лог-файлаlog_level- уровень логгированияcallback- коллбэк логгированияattachment- параметр коллбэка логгирования- возвращаемое значение - контекст логгера
Записывает сообщение в лог
void logger_log(logger *log, logger_log_level_t log_level, const char *fmt, ...);
log- контекст логгераlog_level- уровень логгированияfmt- строка формата...- параметры строки формата
Закрывает лог
logger_close(logger_t *ctx);
ctx- контекст логгера
Инициализирует парсер
int init(logger *log, session_type type, session_callbacks *callbacks, void *attachment, session **p);
log- контекст логгераtype- Тип парсераcallbacks- Коллбэкиattachment- Параметр коллбэковp- поинтер на переменную поинтера на контекстreturn value- код ошибки
Передает на обработку полученные данные
int input(http_session *session, const char *buffer, int length);
session- Контекст парсераbuffer- Буфер с даннымиlength- Размер буфераreturn value- код ошибки
Передает на обработку значение заголовка HTTP2-Settings при апгрейде с HTTP/1.1
int input_settings(http_session *context, const char *base64_http2_settings, int length);
context- Контекст парсераbase64_http2_settings- Значение заголовка HTTP2-Settings при апгрейде с HTTP/1.1length- Длина заголовкаreturn value- код ошибки
Освобождает ресурсы парсера
int close(http_session *session);
id- ID соединенияreturn value- код ошибки
Сигнализирует о получении всех заголовков
void h1_headers(http_stream *stream, struct http_headers headers);
stream- контекст потока (единственного)headers- заголовки после распаковки
Сигнализирует о начале передачи данных
bool h1_data_started(http_stream *stream);
stream- контекст потока (единственного)- возвращаемое значение - нужно ли применять zlib-декомпрессию данных потока
Сигнализирует о получении данных
void h1_data(http_stream *stream, const char *data, size_t length);
stream- контекст потока (единственного)stream_id- идентификатор потокаdata- массив байт с даннымиlength- длина массива байт с данными
Сигнализирует о завершении получения данных
void h1_data_finished(http_stream *stream, rst_stream_flag rst_stream);
stream- контекст потока (единственного)rst_stream- сигнал о том, что поток сброшен с помощью фрейма RST_STREAM, а не окончен с флагом END_STREAM
Сигнализирует о получении HTTP/2 фрейма
void h2_frame(http_stream *stream, unsigned int stream_id, enum h2_frame_type type,
struct frame_any frame);
stream- контекст потокаstream_id- идентификатор потокаtype- тип фреймаframe- структура фрейма
Сигнализирует о получении всех заголовков в данном потоке
void h2_headers(http_stream *stream, unsigned int stream_id, struct http_headers headers);
stream- контекст потокаstream_id- идентификатор потокаheaders- заголовки после распаковки
Сигнализирует о начале передачи данных в данном потоке
bool h2_data_started(http_stream *stream, unsigned int stream_id);
stream- контекст потокаstream_id- идентификатор потока- возвращаемое значение - нужно ли применять zlib-декомпрессию данных потока
Сигнализирует о получении фрейма с данными в данном потоке
void h2_data(http_stream *stream, unsigned int stream_id, struct frame_data data);
stream- контекст потокаstream_id- идентификатор потокаdata- структура фрейма с данными
Сигнализирует о завершении получения данных в данном потоке
void h2_data_finished(http_stream *stream, unsigned int stream_id, rst_stream_flag rst_stream);
stream- контекст потокаstream_id- идентификатор потокаrst_stream- сигнал о том, что поток сброшен с помощью фрейма RST_STREAM, а не окончен с флагом END_STREAM
Создание, клонирование, модифицирование структур библиотеки.