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)
-
(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