Class: Async::HTTP::Protocol::HTTP2::Response
- Defined in:
- lib/async/http/protocol/http2/response.rb
Instance Attribute Summary
Attributes inherited from Response
Attributes inherited from Response
#body, #headers, #reason, #status, #version
Instance Method Summary collapse
-
#initialize(protocol, stream_id) ⇒ Response
constructor
A new instance of Response.
- #receive_data(stream, data, end_stream) ⇒ Object
- #receive_headers(stream, headers, end_stream) ⇒ Object
- #receive_reset_stream(stream, error_code) ⇒ Object
- #send_request(request) ⇒ Object
- #wait ⇒ Object
Methods inherited from Response
#hijack?, #peer, #remote_address, #remote_address=
Methods inherited from Response
[], #bad_request?, #continue?, #failure?, for_exception, #partial?, #preserve_method?, #redirection?, #server_failure?, #success?, #to_s
Methods included from Body::Reader
#body?, #close, #each, #finish, #read, #stop
Constructor Details
#initialize(protocol, stream_id) ⇒ Response
Returns a new instance of Response.
28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/async/http/protocol/http2/response.rb', line 28 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 |
Instance Method Details
#receive_data(stream, data, end_stream) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/async/http/protocol/http2/response.rb', line 67 def receive_data(stream, data, end_stream) unless data.empty? @input.write(data) end if end_stream @input.finish end rescue EOFError @stream.send_reset_stream(0) end |
#receive_headers(stream, headers, end_stream) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/async/http/protocol/http2/response.rb', line 48 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 |
#receive_reset_stream(stream, error_code) ⇒ Object
79 80 81 82 83 84 85 |
# File 'lib/async/http/protocol/http2/response.rb', line 79 def receive_reset_stream(stream, error_code) if error_code > 0 @exception = EOFError.new(error_code) end @notification.signal end |
#send_request(request) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/async/http/protocol/http2/response.rb', line 87 def send_request(request) headers = Headers::Merged.new({ SCHEME => HTTPS, METHOD => request.method, PATH => request.path, AUTHORITY => request., }, 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 |
#wait ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/async/http/protocol/http2/response.rb', line 40 def wait @notification.wait if @exception raise @exception end end |