class Async::HTTP::Protocol::HTTP2::Response

def initialize(protocol, stream_id)

def initialize(protocol, stream_id)
	@input = nil
	
	super(protocol.version, nil, nil, Headers.new, nil)
	
	@protocol = protocol
	@stream = Stream.new(self, protocol, stream_id)
	
	@notification = Async::Notification.new
	@exception = nil
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
rescue
	@stream.send_reset_stream(0)
end

def receive_headers(stream, headers, end_stream)

def receive_headers(stream, headers, end_stream)
	headers.each do |key, value|
		if key == STATUS
			@status = value.to_i
		elsif key == REASON
			@reason = value
		else
			@headers[key] = value
		end
	end
	
	unless end_stream
		@body = @input = Body::Writable.new
	end
	
	# We are ready for processing:
	@notification.signal
end

def receive_reset_stream(stream, error_code)

def receive_reset_stream(stream, error_code)
	if error_code > 0
		@exception = EOFError.new(error_code)
	end
	
	@notification.signal
end

def send_request(request)

def send_request(request)
	headers = Headers::Merged.new({
		SCHEME => HTTPS,
		METHOD => request.method,
		PATH => request.path,
		AUTHORITY => request.authority,
	}, request.headers)
	
	if request.body.nil?
		@stream.send_headers(nil, headers, ::HTTP::Protocol::HTTP2::END_STREAM)
	else
		begin
			@stream.send_headers(nil, headers)
		rescue
			raise RequestFailed
		end
		
		@stream.send_body(request.body)
	end
end

def wait

def wait
	@notification.wait
	
	if @exception
		raise @exception
	end
end