Sha256: 62f7c2cb74fe37635d1c878c6e4f18d0953cf16e9dd08e86779fbab1f7cf24eb

Contents?: true

Size: 1.01 KB

Versions: 10

Compression:

Stored size: 1.01 KB

Contents

# typed: ignore

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.com/terms.html

require 'ipaddr'

# TODO: move to Sqreen::IP

module Sqreen
  Prefix = Struct.new(:family, :bitlen, :address, :data) do # addr is integer
    def initialize(*args)
      super
      raise ArgumentError, 'no family given' unless family
      raise ArgumentError, 'no bitlen given' unless bitlen
      raise ArgumentError, 'no address given' unless address
    end

    def matches?(address, family)
      raise 'family mismatch' unless family == self.family
      shift_amount = (family == Socket::AF_INET ? 32 : 128) - bitlen
      (address ^ self.address) >> shift_amount == 0
    end
  end

  def Prefix.from_str(str, data = nil)
    ip_addr = IPAddr.new(str)
    bitlen = if str =~ /\/(\d+)$/
               $~[1].to_i
             else
               ip_addr.family == Socket::AF_INET6 ? 128 : 32
             end
    Prefix.new(ip_addr.family, bitlen, ip_addr.to_i, data)
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
sqreen-1.25.1 lib/sqreen/prefix.rb
sqreen-1.25.0 lib/sqreen/prefix.rb
sqreen-1.24.3 lib/sqreen/prefix.rb
sqreen-1.24.2 lib/sqreen/prefix.rb
sqreen-1.24.1 lib/sqreen/prefix.rb
sqreen-1.24.0 lib/sqreen/prefix.rb
sqreen-1.23.2 lib/sqreen/prefix.rb
sqreen-1.23.1 lib/sqreen/prefix.rb
sqreen-1.23.0 lib/sqreen/prefix.rb
sqreen-1.22.1 lib/sqreen/prefix.rb