diff --git a/server_http.hpp b/server_http.hpp index 47e1963..fc96b9b 100644 --- a/server_http.hpp +++ b/server_http.hpp @@ -59,7 +59,8 @@ namespace SimpleWeb { class Request { friend class ServerBase; public: - std::string method, path, http_version; + std::string method, path, protocol, http_version; + bool con_close; Content content; @@ -282,10 +283,19 @@ namespace SimpleWeb { if((path_end=line.find(' ', method_end+1))!=std::string::npos) { request->method=line.substr(0, method_end); request->path=line.substr(method_end+1, path_end-method_end-1); - if((path_end+6)http_version=line.substr(path_end+6, line.size()-(path_end+6)-1); + + request->con_close = false; + request->protocol.clear(); + request->http_version.clear(); + + size_t proto_end; + if((proto_end=line.find('/', path_end+1))!=std::string::npos) { + request->protocol=line.substr(path_end+1, proto_end-path_end-1); + request->http_version=line.substr(proto_end+1, line.size()-(proto_end)-1); + } else - request->http_version="1.0"; + request->http_version="1.0"; + getline(stream, line); size_t param_end; @@ -294,8 +304,15 @@ namespace SimpleWeb { if((value_start)header.insert(std::make_pair(line.substr(0, param_end), line.substr(value_start, line.size()-value_start-1))); + if(value_startheader.insert(std::make_pair(key, value)); + + if(boost::iequals(key, "Connection") && boost::iequals(value, "close")) + request->con_close = true; + } } getline(stream, line); @@ -358,7 +375,7 @@ namespace SimpleWeb { catch(const std::exception &e) { return; } - if(http_version>1.05) + if(http_version>1.05 && !request->con_close) read_request_and_content(socket); }); }