X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=parse.h;h=5d56bd14d38b33575a1d3f32f0751bd4cb1a6248;hp=83c5d2a8998dff2832b879b78db04c4467608696;hb=9b565a9e6e66f076abb7266b2c2f015f585fa9cb;hpb=17d773d2d45d495704e974b9246eccb21faa8635 diff --git a/parse.h b/parse.h index 83c5d2a..5d56bd1 100644 --- a/parse.h +++ b/parse.h @@ -25,4 +25,19 @@ std::vector parse_config(const std::string &filename); // Note: Limits are inclusive. int fetch_config_int(const std::vector &config, const std::string &keyword, int min_limit, int max_limit); +// Add the new data to an existing string, looking for \r\n\r\n +// (typical of HTTP requests and/or responses). Will return one +// of the given statuses. +// +// Note that if you give too much data in new_data_size, you could +// get an RP_OUT_OF_SPACE even if you expected RP_EXTRA_DATA. +// Be careful about how large reads you give in. +enum RequestParseStatus { + RP_OUT_OF_SPACE, // If larger than 16 kB. + RP_NOT_FINISHED_YET, // Did not get \r\n\r\n yet. + RP_EXTRA_DATA, // Got \r\n\r\n, but there was extra data behind it. + RP_FINISHED, // Ended exactly in \r\n\r\n. +}; +RequestParseStatus wait_for_double_newline(std::string *existing_data, const char *new_data, size_t new_data_size); + #endif // !defined(_PARSE_H)