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
44 45 46 |
# File 'lib/protocol/http2/framer.rb', line 44 def close @stream.close end |
#closed? ⇒ Boolean
48 49 50 |
# File 'lib/protocol/http2/framer.rb', line 48 def closed? @stream.closed? end |
#read_connection_preface ⇒ Object
56 57 58 59 60 61 62 63 64 |
# File 'lib/protocol/http2/framer.rb', line 56 def read_connection_preface string = @stream.read(CONNECTION_PREFACE.bytesize) unless string == CONNECTION_PREFACE 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.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/protocol/http2/framer.rb', line 68 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
97 98 99 100 101 102 103 104 105 |
# File 'lib/protocol/http2/framer.rb', line 97 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
52 53 54 |
# File 'lib/protocol/http2/framer.rb', line 52 def write_connection_preface @stream.write(CONNECTION_PREFACE) end |
#write_frame(frame) ⇒ Object
86 87 88 89 90 91 92 93 94 95 |
# File 'lib/protocol/http2/framer.rb', line 86 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 |