class Async::HTTP::Protocol::HTTP2::Request

def hijack?

def hijack?
	false
end

def initialize(protocol, stream_id)

def initialize(protocol, stream_id)
	super(nil, nil, nil, nil, VERSION, Headers.new)
	
	@input = nil
	@protocol = protocol
	@stream = Stream.new(self, protocol, stream_id)
end

def receive_data(stream, data, end_stream)

def receive_data(stream, data, end_stream)
	unless data.empty?
		@input.write(data)
	end
	
	if end_stream
		@input.close
	end
end

def receive_headers(stream, headers, end_stream)

def receive_headers(stream, headers, end_stream)
	headers.each do |key, value|
		if key == SCHEME
			return @stream.send_failure(400, "Request scheme already specified") if @scheme
			
			@scheme = value
		elsif key == AUTHORITY
			return @stream.send_failure(400, "Request authority already specified") if @authority
			
			@authority = value
		elsif key == METHOD
			return @stream.send_failure(400, "Request method already specified") if @method
			
			@method = value
		elsif key == PATH
			return @stream.send_failure(400, "Request path already specified") if @path
			
			@path = value
		else
			@headers[key] = value
		end
	end
	
	# We only construct the input/body if data is coming.
	unless end_stream
		@body = @input = Body::Writable.new
	end
	
	# We are ready for processing:
	@protocol.requests.enqueue self
end

def receive_reset_stream(stream, error_code)

def receive_reset_stream(stream, error_code)
end

def send_response(response)

def send_response(response)
	if response.nil?
		@stream.send_headers(nil, NO_RESPONSE, ::HTTP::Protocol::HTTP2::END_STREAM)
	elsif response.body?
		pseudo_headers = [
			[STATUS, response.status],
		]
		
		if length = response.body.length
			pseudo_headers << [CONTENT_LENGTH, length]
		end
		
		headers = Headers::Merged.new(
			pseudo_headers,
			response.headers
		)
		
		@stream.send_headers(nil, headers)
		@stream.send_body(response.body)
	else
		headers = Headers::Merged.new([
			[STATUS, response.status],
		], response.headers)
		
		@stream.send_headers(nil, headers, ::HTTP::Protocol::HTTP2::END_STREAM)
	end
end