-// Parse the configuration file.
-std::vector<ConfigLine> parse_config(const std::string &filename);
-
-// Note: Limits are inclusive.
-int fetch_config_int(const std::vector<ConfigLine> &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);