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;
}
Пример #2
0
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;
}