Fork of mbed-http
Fork of mbed-http by
Diff: source/http_response.h
- Revision:
- 3:8a6b003e3874
- Parent:
- 0:910f5949759f
- Child:
- 4:539df159e058
--- a/source/http_response.h Thu Feb 16 13:55:05 2017 +0100 +++ b/source/http_response.h Thu Feb 23 13:28:07 2017 +0100 @@ -29,6 +29,8 @@ status_code = 0; concat_header_field = false; concat_header_value = false; + expected_content_length = 0; + body_length = 0; } void set_status(int a_status_code, string a_status_message) { @@ -72,6 +74,16 @@ concat_header_value = true; } + void set_headers_complete() { + // @todo: chunked encoding + for (size_t ix = 0; ix < header_fields.size(); ix++) { + if (strcicmp(header_fields[ix].c_str(), "content-length") == 0) { + expected_content_length = (size_t)atoi(header_values[ix].c_str()); + break; + } + } + } + size_t get_headers_length() { return header_fields.size(); } @@ -92,7 +104,25 @@ return body; } + void increase_body_length(size_t length) { + body_length += length; + } + + bool is_body_complete() { + return body_length == expected_content_length; + } + private: + // from http://stackoverflow.com/questions/5820810/case-insensitive-string-comp-in-c + int strcicmp(char const *a, char const *b) { + for (;; a++, b++) { + int d = tolower(*a) - tolower(*b); + if (d != 0 || !*a) { + return d; + } + } + } + int status_code; string status_message; @@ -102,6 +132,9 @@ bool concat_header_field; bool concat_header_value; + size_t expected_content_length; + string body; + size_t body_length; }; #endif