Class: Protocol::HTTP2::Client
- Inherits:
-
Connection
- Object
- Connection
- Protocol::HTTP2::Client
- Defined in:
- lib/protocol/http2/client.rb
Instance Attribute Summary
Attributes inherited from Connection
#children, #framer, #local_settings, #local_window, #remote_settings, #remote_stream_id, #remote_window, #state, #streams
Instance Method Summary collapse
- #create_push_promise_stream ⇒ Object
-
#initialize(framer) ⇒ Client
constructor
A new instance of Client.
- #receive_push_promise(frame) ⇒ Object
- #send_connection_preface(settings = []) ⇒ Object
- #valid_remote_stream_id?(stream_id) ⇒ Boolean
Methods inherited from Connection
#[], #accept_push_promise_stream, #accept_stream, #active_streams, #add_child, #close, #close!, #closed?, #create_stream, #decode_headers, #encode_headers, #exclusive_child, #id, #ignore_frame?, #maximum_concurrent_streams, #maximum_frame_size, #next_stream_id, #open!, #parent, #process_settings, #read_frame, #receive_continuation, #receive_data, #receive_frame, #receive_goaway, #receive_headers, #receive_ping, #receive_priority, #receive_reset_stream, #receive_settings, #receive_window_update, #remove_child, #send_goaway, #send_ping, #send_priority, #send_settings, #update_local_settings, #update_remote_settings, #write_frame, #write_frames
Methods included from FlowControl
#available_frame_size, #available_size, #consume_local_window, #consume_remote_window, #consume_window, #receive_window_update, #request_window_update, #send_window_update, #update_local_window, #window_updated
Constructor Details
#initialize(framer) ⇒ Client
Returns a new instance of Client.
26 27 28 |
# File 'lib/protocol/http2/client.rb', line 26 def initialize(framer) super(framer, 1) end |
Instance Method Details
#create_push_promise_stream ⇒ Object
50 51 52 |
# File 'lib/protocol/http2/client.rb', line 50 def create_push_promise_stream raise ProtocolError, "Cannot create push promises from client!" end |
#receive_push_promise(frame) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/protocol/http2/client.rb', line 54 def receive_push_promise(frame) if frame.stream_id == 0 raise ProtocolError, "Cannot receive headers for stream 0!" end if stream = @streams[frame.stream_id] # This is almost certainly invalid: promised_stream, request_headers = stream.receive_push_promise(frame) if stream.closed? @streams.delete(stream.id) end return promised_stream, request_headers end end |
#send_connection_preface(settings = []) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/protocol/http2/client.rb', line 34 def send_connection_preface(settings = []) if @state == :new @framer.write_connection_preface send_settings(settings) yield if block_given? read_frame do |frame| raise ProtocolError, "First frame must be #{SettingsFrame}, but got #{frame.class}" unless frame.is_a? SettingsFrame end else raise ProtocolError, "Cannot send connection preface in state #{@state}" end end |
#valid_remote_stream_id?(stream_id) ⇒ Boolean
30 31 32 |
# File 'lib/protocol/http2/client.rb', line 30 def valid_remote_stream_id?(stream_id) stream_id.even? end |