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
This should be invoked from the background reader, and notifies the task waiting for the headers that we are done.
- #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, #save
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
74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/async/http/protocol/http2/response.rb', line 74 def receive_data(stream, data, end_stream) unless data.empty? @input.write(data) end if end_stream @input.close end rescue @stream.send_reset_stream(0) end |
#receive_headers(stream, headers, end_stream) ⇒ Object
This should be invoked from the background reader, and notifies the task waiting for the headers that we are done.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/async/http/protocol/http2/response.rb', line 52 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: if @notification @notification.signal @notification = nil end end |
#receive_reset_stream(stream, error_code) ⇒ Object
86 87 88 89 90 91 92 |
# File 'lib/async/http/protocol/http2/response.rb', line 86 def receive_reset_stream(stream, error_code) if error_code > 0 @exception = EOFError.new(error_code) end @notification.signal end |
#send_request(request) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/async/http/protocol/http2/response.rb', line 94 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 47 48 49 |
# File 'lib/async/http/protocol/http2/response.rb', line 40 def wait # If you call wait after the headers were already received, it should return immediately. if @notification @notification.wait end if @exception raise @exception end end |