Sha256: 911814538ea355e5cbbec071e7b1ecb2fddd1e6b90379ca6c55fd241f2262a96

Contents?: true

Size: 1.25 KB

Versions: 3

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2018-2024, by Samuel Williams.
# Copyright, 2023, by Josh Huber.

require_relative '../response'

module Async
	module HTTP
		module Protocol
			module HTTP1
				class Response < Protocol::Response
					def self.read(connection, request)
						while parts = connection.read_response(request.method)
							response = self.new(connection, *parts)
							
							if response.final?
								return response
							end
						end
					end
					
					UPGRADE = 'upgrade'
					
					# @attribute [String] The HTTP response line reason.
					attr :reason
					
					# @parameter reason [String] HTTP response line reason phrase.
					def initialize(connection, version, status, reason, headers, body)
						@connection = connection
						@reason = reason
						
						# Technically, there should never be more than one value for the upgrade header, but we'll just take the first one to avoid complexity.
						protocol = headers.delete(UPGRADE)&.first
						
						super(version, status, headers, body, protocol)
					end
					
					def connection
						@connection
					end
					
					def hijack?
						@body.nil?
					end
					
					def hijack!
						@connection.hijack!
					end
				end
			end
		end
	end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
async-http-0.72.0 lib/async/http/protocol/http1/response.rb
async-http-0.71.0 lib/async/http/protocol/http1/response.rb
async-http-0.70.0 lib/async/http/protocol/http1/response.rb