Class: Dap::Filter::FilterDecodeGquicVersionsResult

Inherits:
Object
  • Object
show all
Includes:
BaseDecoder
Defined in:
lib/dap/filter/gquic.rb

Overview

Decode a Google Quic VersionsRequest probe response

Instance Attribute Summary

Attributes included from Base

#name, #opts

Instance Method Summary collapse

Methods included from BaseDecoder

#process

Methods included from Base

#initialize, #process

Instance Method Details

#decode(data) ⇒ Hash

Decode an GQUIC ( Google Quic) versions probe response

Parameters:

  • data (String)

    Binary string containing raw response from server

Returns:

  • (Hash)

    containing all GQUIC versions supported else nil



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/dap/filter/gquic.rb', line 18

def decode(data)
   return unless data
   # need to skip 9 bytes and assume at least one valid version Q044
   if data.length > 9 + 4 && (data.length - 9) % 4
      versions = []
      i = 9
      step = 4
      while i < data.length 
         version = data[i..i+4-1]
         # Versions start with the letter Q followed by number e.g. 001 - 043
         if version =~ /^Q\d{3}$/
             versions.push(version)
         end
         i = i + step
      end
      if versions.length > 0
         # examples show versions in descending order, but in case its not reverse sort
         info = {'versions' => versions.sort.reverse}
         return info
      end
   end
end