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

Typically used on the server side to represent an incoming request, and write the response.

def connection

def connection
	@stream.connection
end

def hijack?

def hijack?
	false
end

def initialize(stream)

def initialize(stream)
	super(nil, nil, nil, nil, VERSION, nil)
	
	@stream = stream
end

def push(path, headers = nil, scheme = @scheme, authority = @authority)

Returns:
  • (Stream) - the promised stream, on which to send data.
def push(path, headers = nil, scheme = @scheme, authority = @authority)
	raise ArgumentError, "Missing scheme!" unless scheme
	raise ArgumentError, "Missing authority!" unless authority
	
	push_headers = [
		[SCHEME, scheme],
		[METHOD, ::Protocol::HTTP::Methods::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?
	@stream.connection.enable_push?
end

def send_response(response)

def send_response(response)
	if response.nil?
		return @stream.send_headers(nil, NO_RESPONSE, ::Protocol::HTTP2::END_STREAM)
	end
	
	protocol_headers = [
		[STATUS, response.status],
	]
	
	if protocol = response.protocol
		protocol_headers << [PROTOCOL, protocol]
	end
	
	if length = response.body&.length
		protocol_headers << [CONTENT_LENGTH, length]
	end
	
	headers = ::Protocol::HTTP::Headers::Merged.new(protocol_headers, response.headers)
	
	if body = response.body and !self.head?
		# This function informs the headers object that any subsequent headers are going to be trailers. Therefore, it must be called *before* sending the headers, to avoid any race conditions.
		trailers = response.headers.trailers!
		
		@stream.send_headers(nil, headers)
		
		@stream.send_body(body, trailers)
	else
		# Ensure the response body is closed if we are ending the stream:
		response.close
		
		@stream.send_headers(nil, headers, ::Protocol::HTTP2::END_STREAM)
	end
end

def valid?

def valid?
	@scheme and @method and @path
end