bool ofxAMFHTTPRequest::parseHTTPRequest(IOBuffer& buffer, IOBuffer& amfResultBuffer) { // step 1. parse http headers if(num_bytes_in_header == 0) { num_bytes_in_header = buffer.consumeUntil("\r\n\r\n", raw_headers); } // step 2. parse headers when all received. if(num_bytes_in_header != 0) { if(parseHTTPHeaders()) { num_bytes_in_body = headers["content-length"].getAsUInt32(); } } else { return false; } // step 3. parse body when received content-length. if(num_bytes_in_body != 0) { uint32_t bytes_stored = buffer.getNumBytesStored(); uint32_t bytes_total = num_bytes_in_header + num_bytes_in_body; uint32_t bytes_left = bytes_total - bytes_stored; if(bytes_left == 0) { amfResultBuffer.storeBuffer(buffer, num_bytes_in_body); //cout << headers.toString() << endl; return true; } } return false; }
StateResult ParseHeaders::parse() { // TODO parse HTTP header if (parseHTTPHeaders() == false) return NEED_MORE_DATA; if (parseDOSHeader() == false) return NEED_MORE_DATA; if (parseNTHeaders() == false) return NEED_MORE_DATA; if (parseSectionHeaders() == false) return NEED_MORE_DATA; return PARSED; }