File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -119,6 +119,7 @@ def initialize(local_max_frame_size = DEFAULT_MAX_FRAME_SIZE,
119119 remote_max_frame_size = DEFAULT_MAX_FRAME_SIZE )
120120 @local_max_frame_size = local_max_frame_size
121121 @remote_max_frame_size = remote_max_frame_size
122+ @frames = [ ]
122123 end
123124
124125 # Generates common 9-byte frame header.
@@ -371,6 +372,21 @@ def generate(frame)
371372 #
372373 # @param buf [Buffer]
373374 def parse ( buf )
375+ while ( frame = decode_frame ( buf ) )
376+ if frame [ :type ] == :ping
377+ # PING responses SHOULD be given higher priority than any other frame.
378+ @frames . unshift ( frame )
379+ else
380+ @frames << frame
381+ end
382+ end
383+
384+ @frames . shift
385+ end
386+
387+ private
388+
389+ def decode_frame ( buf )
374390 return if buf . size < 9
375391
376392 frame = read_common_header ( buf )
@@ -491,8 +507,6 @@ def parse(buf)
491507 frame
492508 end
493509
494- private
495-
496510 def pack_error ( error , buffer :)
497511 unless error . is_a? Integer
498512 error = DEFINED_ERRORS [ error ]
Original file line number Diff line number Diff line change @@ -34,6 +34,7 @@ module HTTP2
3434
3535 @local_max_frame_size: Integer
3636 @remote_max_frame_size: Integer
37+ @streams: Hash[Integer, Stream]
3738
3839 attr_accessor local_max_frame_size: Integer
3940
@@ -47,12 +48,14 @@ module HTTP2
4748
4849 def generate : (frame) -> String
4950
50- def parse : (String) -> frame?
51+ def parse : (String buf ) -> frame?
5152
5253 private
5354
5455 def initialize : (?Integer local_max_frame_size, ?Integer remote_max_frame_size) -> untyped
5556
57+ def decode_frame : (String buf) -> frame?
58+
5659 def pack_error : (Integer | Symbol error, buffer: String) -> String
5760
5861 def unpack_error : (Integer) -> (Symbol | Integer)
You can’t perform that action at this time.
0 commit comments