+
+ hbegin = hend + 2;
+ continue;
+ }
+
+ std::string cheader = reqbuffer.substr(hbegin, hend - hbegin);
+
+ std::string::size_type fieldsep = cheader.find(':');
+ if ((fieldsep == std::string::npos) || (fieldsep == 0) || (fieldsep == cheader.length() - 1))
+ {
+ SendHTTPError(400);
+ SetWrite();
+ return;
+ }
+
+ headers.SetHeader(cheader.substr(0, fieldsep), cheader.substr(fieldsep + 2));
+
+ hbegin = hend + 2;
+ }
+
+ reqbuffer.erase(0, reqend + 4);
+
+ std::transform(request_type.begin(), request_type.end(), request_type.begin(), ::toupper);
+ std::transform(http_version.begin(), http_version.end(), http_version.begin(), ::toupper);
+
+ if ((http_version != "HTTP/1.1") && (http_version != "HTTP/1.0"))
+ {
+ SendHTTPError(505);
+ SetWrite();
+ return;
+ }
+
+ if (headers.IsSet("Content-Length") && (postsize = atoi(headers.GetHeader("Content-Length").c_str())) != 0)
+ {
+ InternalState = HTTP_SERVE_RECV_POSTDATA;
+
+ if (reqbuffer.length() >= postsize)
+ {
+ postdata = reqbuffer.substr(0, postsize);
+ reqbuffer.erase(0, postsize);