module SvcbRrPatch::SvcParams
Constants
- PARAMETER_REGISTRY
Public Class Methods
decode(octet)
click to toggle source
@param octet [String]
@return [Hash] Integer => SvcbRrPatch::$Object rubocop:disable Metrics/AbcSize
# File lib/svcb_rr_patch/svc_params.rb, line 43 def self.decode(octet) svc_params = {} i = 0 h = Hash[(0..PARAMETER_REGISTRY.size - 1).zip(PARAMETER_REGISTRY)].invert while i < octet.length raise ::Resolv::DNS::DecodeError if i + 4 > octet.length k = octet.slice(i, 2).unpack1('n') # SvcParamKeys SHALL appear in increasing numeric order. raise ::Resolv::DNS::DecodeError \ unless svc_params.keys.find { |already| h[already] >= k }.nil? i += 2 vlen = octet.slice(i, 2).unpack1('n') i += 2 raise ::Resolv::DNS::DecodeError if i + vlen > octet.length v = octet.slice(i, vlen) i += vlen # Values are in a format specific to the SvcParamKey. svc_param_key = PARAMETER_REGISTRY[k] svc_param_values = decode_svc_params(svc_param_key, v) svc_params.store(svc_param_key, svc_param_values) end raise ::Resolv::DNS::DecodeError if i != octet.length svc_params end
encode(svc_params)
click to toggle source
@return [String]
# File lib/svcb_rr_patch/svc_params.rb, line 27 def self.encode(svc_params) h = Hash[(0..PARAMETER_REGISTRY.size - 1).zip(PARAMETER_REGISTRY)].invert svc_params .map { |k, v| [h[k], v] } .sort { |lh, rh| lh.first <=> rh.first } .map do |k, v| [k].pack('n') + v.encode.then { |s| [s.length].pack('n') + s } end .join end