class TTTLS13::Message::Extension::Alpn
Attributes
extension_type[R]
protocol_name_list[R]
Public Class Methods
deserialize(binary)
click to toggle source
@param binary [String]
@raise [TTTLS13::Error::ErrorAlerts]
@return [TTTLS13::Message::Extension::Alpn, nil] rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/PerceivedComplexity
# File lib/tttls1.3/message/extension/alpn.rb, line 42 def self.deserialize(binary) raise Error::ErrorAlerts, :internal_error if binary.nil? return nil if binary.length < 2 pnlist_len = Convert.bin2i(binary.slice(0, 2)) i = 2 protocol_name_list = [] while i < pnlist_len + 2 return nil if i + 1 > binary.length pn_len = Convert.bin2i(binary.slice(i, 1)) i += 1 return nil if i + pn_len > binary.length protocol_name_list << binary.slice(i, pn_len) i += pn_len end return nil unless i == binary.length && pnlist_len + 2 == binary.length Alpn.new(protocol_name_list) end
new(protocol_name_list)
click to toggle source
@param named_group_list [Array of String]
@raise [TTTLS13::Error::ErrorAlerts]
@example
Alpn.new(['h2', 'http/1.1'])
www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids
# File lib/tttls1.3/message/extension/alpn.rb, line 20 def initialize(protocol_name_list) @extension_type \ = ExtensionType::APPLICATION_LAYER_PROTOCOL_NEGOTIATION @protocol_name_list = protocol_name_list || [] raise Error::ErrorAlerts, :internal_error \ if @protocol_name_list.empty? end
Public Instance Methods
serialize()
click to toggle source
@return [String]
# File lib/tttls1.3/message/extension/alpn.rb, line 29 def serialize binary = @protocol_name_list.map(&:prefix_uint8_length).join @extension_type + binary.prefix_uint16_length.prefix_uint16_length end