class SvcbRrPatch::SvcParams::Ech::ECHConfigContents
Attributes
extensions[R]
key_config[R]
maximum_name_length[R]
public_name[R]
Public Class Methods
decode(octet)
click to toggle source
:nodoc rubocop:disable Metrics/AbcSize
# File lib/svcb_rr_patch/svc_params/ech/echconfig_contents.rb, line 40 def self.decode(octet) key_config, octet = HpkeKeyConfig.decode(octet) raise ::Resolv::DNS::DecodeError if octet.length < 2 maximum_name_length = octet.slice(0, 1).unpack1('C') pn_len = octet.slice(1, 1).unpack1('C') i = 2 raise ::Resolv::DNS::DecodeError if i + pn_len > octet.length public_name = octet.slice(i, pn_len) i += pn_len raise ::Resolv::DNS::DecodeError if i + 2 > octet.length ex_len = octet.slice(i, 2).unpack1('n') i += 2 raise ::Resolv::DNS::DecodeError if i + ex_len > octet.length extensions = Extension.decode_vectors(octet.slice(i, ex_len)) i += ex_len raise ::Resolv::DNS::DecodeError if i != octet.length new( key_config, maximum_name_length, public_name, extensions ) end
new(key_config, maximum_name_length, public_name, extensions)
click to toggle source
@param key_config
[HpkeKeyConfig] @param maximum_name_length
[Integer] @param public_name
[String] @param extensions [Array of Extension]
# File lib/svcb_rr_patch/svc_params/ech/echconfig_contents.rb, line 20 def initialize(key_config, maximum_name_length, public_name, extensions) @key_config = key_config @maximum_name_length = maximum_name_length @public_name = public_name @extensions = extensions end
Public Instance Methods
encode()
click to toggle source
@return [String]
# File lib/svcb_rr_patch/svc_params/ech/echconfig_contents.rb, line 31 def encode @key_config.encode \ + [@maximum_name_length].pack('C') \ + @public_name.then { |s| [s.length].pack('C') + s } \ + @extensions.map(&:encode).join.then { |s| [s.length].pack('n') + s } end