Module: SDN::Message::Helpers
- Included in:
- SDN::Message
- Defined in:
- lib/sdn/messages/helpers.rb
Instance Method Summary collapse
- #checksum(bytes) ⇒ Object
- #from_number(number, bytes) ⇒ Object
- #from_string(string, bytes) ⇒ Object
- #is_group_address?(addr_bytes) ⇒ Boolean
- #parse_address(addr_string) ⇒ Object
- #print_address(addr_bytes) ⇒ Object
- #to_number(param, nillable: false) ⇒ Object
- #to_string(param) ⇒ Object
- #transform_param(param) ⇒ Object
Instance Method Details
#checksum(bytes) ⇒ Object
45 46 47 48 |
# File 'lib/sdn/messages/helpers.rb', line 45 def checksum(bytes) result = bytes.inject(&:+) [result >> 8, result & 0xff] end |
#from_number(number, bytes) ⇒ Object
26 27 28 29 30 31 32 |
# File 'lib/sdn/messages/helpers.rb', line 26 def from_number(number, bytes) bytes.times.inject([]) do |res, _| res << (0xff - number & 0xff) number >>= 8 res end end |
#from_string(string, bytes) ⇒ Object
39 40 41 42 43 |
# File 'lib/sdn/messages/helpers.rb', line 39 def from_string(string, bytes) chars = string.bytes chars = chars[0...16].fill(0, chars.length, bytes - chars.length) chars.map { |b| 0xff - b } end |
#is_group_address?(addr_bytes) ⇒ Boolean
12 13 14 |
# File 'lib/sdn/messages/helpers.rb', line 12 def is_group_address?(addr_bytes) addr_bytes[0..1] == [1, 1] end |
#parse_address(addr_string) ⇒ Object
4 5 6 |
# File 'lib/sdn/messages/helpers.rb', line 4 def parse_address(addr_string) addr_string.match(/^(\h{2})[:.]?(\h{2})[:.]?(\h{2})$/).captures.map { |byte| byte.to_i(16) } end |
#print_address(addr_bytes) ⇒ Object
8 9 10 |
# File 'lib/sdn/messages/helpers.rb', line 8 def print_address(addr_bytes) "%02X.%02X.%02X" % addr_bytes end |
#to_number(param, nillable: false) ⇒ Object
20 21 22 23 24 |
# File 'lib/sdn/messages/helpers.rb', line 20 def to_number(param, nillable: false) result = Array(param).reverse.inject(0) { |sum, byte| (sum << 8) + 0xff - byte } result = nil if nillable && result == (1 << (8 * Array(param).length)) - 1 result end |
#to_string(param) ⇒ Object
34 35 36 37 |
# File 'lib/sdn/messages/helpers.rb', line 34 def to_string(param) chars = param.map { |b| 0xff - b } chars[0..-1].pack("C*").sub(/\0+$/, '') end |
#transform_param(param) ⇒ Object
16 17 18 |
# File 'lib/sdn/messages/helpers.rb', line 16 def transform_param(param) Array(param).reverse.map { |byte| 0xff - byte } end |