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

Attributes

request[R]

Public Class Methods

new(*) click to toggle source
# File lib/async/http/protocol/http2/request.rb, line 33
def initialize(*)
        super
        
        @enqueued = false
        @request = Request.new(self)
end

Public Instance Methods

closed(error) click to toggle source
# File lib/async/http/protocol/http2/request.rb, line 97
def closed(error)
        @request = nil
        
        super
end
receive_initial_headers(headers, end_stream) click to toggle source
# File lib/async/http/protocol/http2/request.rb, line 42
def receive_initial_headers(headers, end_stream)
        headers.each do |key, value|
                if key == SCHEME
                        raise ::Protocol::HTTP2::HeaderError, "Request scheme already specified!" if @request.scheme
                        
                        @request.scheme = value
                elsif key == AUTHORITY
                        raise ::Protocol::HTTP2::HeaderError, "Request authority already specified!" if @request.authority
                        
                        @request.authority = value
                elsif key == METHOD
                        raise ::Protocol::HTTP2::HeaderError, "Request method already specified!" if @request.method
                        
                        @request.method = value
                elsif key == PATH
                        raise ::Protocol::HTTP2::HeaderError, "Request path is empty!" if value.empty?
                        raise ::Protocol::HTTP2::HeaderError, "Request path already specified!" if @request.path
                        
                        @request.path = value
                elsif key == PROTOCOL
                        raise ::Protocol::HTTP2::HeaderError, "Request protocol already specified!" if @request.protocol
                        
                        @request.protocol = value
                elsif key == CONTENT_LENGTH
                        raise ::Protocol::HTTP2::HeaderError, "Request content length already specified!" if @length
                        
                        @length = Integer(value)
                elsif key == CONNECTION
                        raise ::Protocol::HTTP2::HeaderError, "Connection header is not allowed!"
                elsif key.start_with? ':'
                        raise ::Protocol::HTTP2::HeaderError, "Invalid pseudo-header #{key}!"
                elsif key =~ /[A-Z]/
                        raise ::Protocol::HTTP2::HeaderError, "Invalid characters in header #{key}!"
                else
                        add_header(key, value)
                end
        end
        
        @request.headers = @headers
        
        unless @request.valid?
                raise ::Protocol::HTTP2::HeaderError, "Request is missing required headers!"
        else
                # We only construct the input/body if data is coming.
                unless end_stream
                        @request.body = prepare_input(@length)
                end
                
                # We are ready for processing:
                @connection.requests.enqueue(@request)
        end
        
        return headers
end