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

def close!(state)

def close!(state)
end

def create_promise_stream(headers, stream_id)

def create_promise_stream(headers, stream_id)
	request = self.class.new(@protocol, stream_id)
	request.receive_headers(self, headers, false)
	
	return request.stream
end

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 push(path, headers = nil)

Returns:
  • (Stream) - the promised stream, on which to send data.
def push(path, headers = nil)
	push_headers = [
		[SCHEME, @scheme],
		[METHOD, GET],
		[PATH, path],
		[AUTHORITY, @authority]
	]
	
	if headers
		push_headers = Headers::Merged.new(
			push_headers,
			headers
		)
	end
	
	@stream.send_push_promise(push_headers)
end

def push?

def push?
	@protocol.enable_push?
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, ::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, ::Protocol::HTTP2::END_STREAM)
	end
end

def stop_connection(error)

def stop_connection(error)
end