http-response-parser.h revision 7384b4e78eaab44693c985192276e31322155e32
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste#ifndef HTTP_RESPONSE_PARSER_H
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste#define HTTP_RESPONSE_PARSER_H
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste
62639ee1329be2d687701dfa01fc006314440bf7Jaco Joostestruct http_response_header {
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste const char *key;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste const char *value;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste size_t size;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste};
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste
62639ee1329be2d687701dfa01fc006314440bf7Jaco Joostestruct http_response {
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste unsigned char version_major;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste unsigned char version_minor;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste unsigned int status;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste const char *reason;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste const char *location;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste time_t date;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste struct istream *payload;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste ARRAY(struct http_response_header) headers;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste unsigned int connection_close:1;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste};
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste
62639ee1329be2d687701dfa01fc006314440bf7Jaco Joostestruct http_response_parser;
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste
62639ee1329be2d687701dfa01fc006314440bf7Jaco Joostestruct http_response_parser *
62639ee1329be2d687701dfa01fc006314440bf7Jaco Joostehttp_response_parser_init(struct istream *input);
62639ee1329be2d687701dfa01fc006314440bf7Jaco Joostevoid http_response_parser_deinit(struct http_response_parser **_parser);
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste
62639ee1329be2d687701dfa01fc006314440bf7Jaco Joosteint http_response_parse_next(struct http_response_parser *parser,
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste bool no_payload, struct http_response **response_r,
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste const char **error_r);
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste#endif
62639ee1329be2d687701dfa01fc006314440bf7Jaco Jooste