Class: Protocol::HTTP2::Framer
- Inherits:
-
Object
- Object
- Protocol::HTTP2::Framer
- Defined in:
- lib/protocol/http2/framer.rb
Instance Method Summary collapse
- #close ⇒ Object
- #closed? ⇒ Boolean
-
#initialize(stream, frames = FRAMES) ⇒ Framer
constructor
A new instance of Framer.
- #read_connection_preface ⇒ Object
-
#read_frame(maximum_frame_size = MAXIMUM_ALLOWED_FRAME_SIZE) ⇒ Frame
The frame that has been read from the underlying IO.
- #read_header ⇒ Object
- #write_connection_preface ⇒ Object
- #write_frame(frame) ⇒ Object
Constructor Details
Instance Method Details
#close ⇒ Object
60 61 62 |
# File 'lib/protocol/http2/framer.rb', line 60 def close @stream.close end |
#closed? ⇒ Boolean
64 65 66 |
# File 'lib/protocol/http2/framer.rb', line 64 def closed? @stream.closed? end |
#read_connection_preface ⇒ Object
72 73 74 75 76 77 78 79 80 |
# File 'lib/protocol/http2/framer.rb', line 72 def read_connection_preface string = @stream.read(CONNECTION_PREFACE_MAGIC.bytesize) unless string == CONNECTION_PREFACE_MAGIC raise HandshakeError, "Invalid connection preface: #{string.inspect}" end return string end |
#read_frame(maximum_frame_size = MAXIMUM_ALLOWED_FRAME_SIZE) ⇒ Frame
Returns the frame that has been read from the underlying IO.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/protocol/http2/framer.rb', line 84 def read_frame(maximum_frame_size = MAXIMUM_ALLOWED_FRAME_SIZE) # Read the header: length, type, flags, stream_id = read_header # Async.logger.debug(self) {"read_frame: length=#{length} type=#{type} flags=#{flags} stream_id=#{stream_id} -> klass=#{@frames[type].inspect}"} # Allocate the frame: klass = @frames[type] || Frame frame = klass.new(stream_id, flags, type, length) # Read the payload: frame.read(@stream, maximum_frame_size) # Async.logger.debug(self, name: "read") {frame.inspect} return frame end |
#read_header ⇒ Object
113 114 115 116 117 118 119 120 121 |
# File 'lib/protocol/http2/framer.rb', line 113 def read_header if buffer = @stream.read(9) if buffer.bytesize == 9 return Frame.parse_header(buffer) end end raise EOFError, "Could not read frame header!" end |
#write_connection_preface ⇒ Object
68 69 70 |
# File 'lib/protocol/http2/framer.rb', line 68 def write_connection_preface @stream.write(CONNECTION_PREFACE_MAGIC) end |
#write_frame(frame) ⇒ Object
102 103 104 105 106 107 108 109 110 111 |
# File 'lib/protocol/http2/framer.rb', line 102 def write_frame(frame) # Async.logger.debug(self, name: "write") {frame.inspect} frame.write(@stream) # Don't call @stream.flush here because it can cause significant contention if there is a semaphore around this method. # @stream.flush return frame end |