class Ip2location

Constants

FIELD_NOT_SUPPORTED
INVALID_BIN_DATABASE
INVALID_IP_ADDRESS
IPV6_ADDRESS_IN_IPV4_BIN
VERSION

Attributes

base_addr[RW]
columns[RW]
count[RW]
database[RW]
databaseday[RW]
databasemonth[RW]
databaseyear[RW]
db_index[RW]
file[RW]
ip_version[RW]
ipno[RW]
ipv4databaseaddr[RW]
ipv4databasecount[RW]
ipv4indexbaseaddr[RW]
ipv6databaseaddr[RW]
ipv6databasecount[RW]
ipv6indexbaseaddr[RW]
last_err_msg[RW]
record[RW]
record_class4[RW]
record_class6[RW]
v4[RW]

Public Instance Methods

close() click to toggle source
# File lib/ip2location_ruby.rb, line 63
def close()
  self.file.close
end
get_addresstype(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 597
def get_addresstype(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          addresstype = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          addresstype = (defined?(rec.addresstype) && rec.addresstype != '') ? rec.addresstype : FIELD_NOT_SUPPORTED
      else
          addresstype = INVALID_IP_ADDRESS
      end
  else
      addresstype = INVALID_IP_ADDRESS
  end
  return addresstype
end
get_all(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 118
def get_all(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          country_short = IPV6_ADDRESS_IN_IPV4_BIN
          country_long = IPV6_ADDRESS_IN_IPV4_BIN
          region = IPV6_ADDRESS_IN_IPV4_BIN
          city = IPV6_ADDRESS_IN_IPV4_BIN
          latitude = IPV6_ADDRESS_IN_IPV4_BIN
          longitude = IPV6_ADDRESS_IN_IPV4_BIN
          isp = IPV6_ADDRESS_IN_IPV4_BIN
          domain = IPV6_ADDRESS_IN_IPV4_BIN
          netspeed = IPV6_ADDRESS_IN_IPV4_BIN
          areacode = IPV6_ADDRESS_IN_IPV4_BIN
          iddcode = IPV6_ADDRESS_IN_IPV4_BIN
          timezone = IPV6_ADDRESS_IN_IPV4_BIN
          zipcode = IPV6_ADDRESS_IN_IPV4_BIN
          weatherstationname = IPV6_ADDRESS_IN_IPV4_BIN
          weatherstationcode = IPV6_ADDRESS_IN_IPV4_BIN
          mcc = IPV6_ADDRESS_IN_IPV4_BIN
          mnc = IPV6_ADDRESS_IN_IPV4_BIN
          mobilebrand = IPV6_ADDRESS_IN_IPV4_BIN
          elevation = IPV6_ADDRESS_IN_IPV4_BIN
          usagetype = IPV6_ADDRESS_IN_IPV4_BIN
          addresstype = IPV6_ADDRESS_IN_IPV4_BIN
          category = IPV6_ADDRESS_IN_IPV4_BIN
          district = IPV6_ADDRESS_IN_IPV4_BIN
          asn = IPV6_ADDRESS_IN_IPV4_BIN
          as = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          country_short = (defined?(rec.country_short) && rec.country_short != '') ? rec.country_short : FIELD_NOT_SUPPORTED
          country_long = (defined?(rec.country_long) && rec.country_long != '') ? rec.country_long : FIELD_NOT_SUPPORTED
          region = (defined?(rec.region) && rec.region != '') ? rec.region : FIELD_NOT_SUPPORTED
          city = (defined?(rec.city) && rec.city != '') ? rec.city : FIELD_NOT_SUPPORTED
          latitude = (defined?(rec.latitude) && rec.latitude != '') ? rec.latitude : FIELD_NOT_SUPPORTED
          longitude = (defined?(rec.longitude) && rec.longitude != '') ? rec.longitude : FIELD_NOT_SUPPORTED
          isp = (defined?(rec.isp) && rec.isp != '') ? rec.isp : FIELD_NOT_SUPPORTED
          domain = (defined?(rec.domain) && rec.domain != '') ? rec.domain : FIELD_NOT_SUPPORTED
          netspeed = (defined?(rec.netspeed) && rec.netspeed != '') ? rec.netspeed : FIELD_NOT_SUPPORTED
          areacode = (defined?(rec.areacode) && rec.areacode != '') ? rec.areacode : FIELD_NOT_SUPPORTED
          iddcode = (defined?(rec.iddcode) && rec.iddcode != '') ? rec.iddcode : FIELD_NOT_SUPPORTED
          timezone = (defined?(rec.timezone) && rec.timezone != '') ? rec.timezone : FIELD_NOT_SUPPORTED
          zipcode = (defined?(rec.zipcode) && rec.zipcode != '') ? rec.zipcode : FIELD_NOT_SUPPORTED
          weatherstationname = (defined?(rec.weatherstationname) && rec.weatherstationname != '') ? rec.weatherstationname : FIELD_NOT_SUPPORTED
          weatherstationcode = (defined?(rec.weatherstationcode) && rec.weatherstationcode != '') ? rec.weatherstationcode : FIELD_NOT_SUPPORTED
          mcc = (defined?(rec.mcc) && rec.mcc != '') ? rec.mcc : FIELD_NOT_SUPPORTED
          mnc = (defined?(rec.mnc) && rec.mnc != '') ? rec.mnc : FIELD_NOT_SUPPORTED
          mobilebrand = (defined?(rec.mobilebrand) && rec.mobilebrand != '') ? rec.mobilebrand : FIELD_NOT_SUPPORTED
          elevation = (defined?(rec.elevation) && rec.elevation != '') ? rec.elevation : FIELD_NOT_SUPPORTED
          usagetype = (defined?(rec.usagetype) && rec.usagetype != '') ? rec.usagetype : FIELD_NOT_SUPPORTED
          addresstype = (defined?(rec.addresstype) && rec.addresstype != '') ? rec.addresstype : FIELD_NOT_SUPPORTED
          category = (defined?(rec.category) && rec.category != '') ? rec.category : FIELD_NOT_SUPPORTED
          district = (defined?(rec.district) && rec.district != '') ? rec.district : FIELD_NOT_SUPPORTED
          asn = (defined?(rec.asn) && rec.asn != '') ? rec.asn : FIELD_NOT_SUPPORTED
          as = (defined?(rec.as) && rec.as != '') ? rec.as : FIELD_NOT_SUPPORTED
      else
          country_short = INVALID_IP_ADDRESS
          country_long = INVALID_IP_ADDRESS
          region = INVALID_IP_ADDRESS
          city = INVALID_IP_ADDRESS
          latitude = INVALID_IP_ADDRESS
          longitude = INVALID_IP_ADDRESS
          isp = INVALID_IP_ADDRESS
          domain = INVALID_IP_ADDRESS
          netspeed = INVALID_IP_ADDRESS
          areacode = INVALID_IP_ADDRESS
          iddcode = INVALID_IP_ADDRESS
          timezone = INVALID_IP_ADDRESS
          zipcode = INVALID_IP_ADDRESS
          weatherstationname = INVALID_IP_ADDRESS
          weatherstationcode = INVALID_IP_ADDRESS
          mcc = INVALID_IP_ADDRESS
          mnc = INVALID_IP_ADDRESS
          mobilebrand = INVALID_IP_ADDRESS
          elevation = INVALID_IP_ADDRESS
          usagetype = INVALID_IP_ADDRESS
          addresstype = INVALID_IP_ADDRESS
          category = INVALID_IP_ADDRESS
          district = INVALID_IP_ADDRESS
          asn = INVALID_IP_ADDRESS
          as = INVALID_IP_ADDRESS
      end
  else
      country_short = INVALID_IP_ADDRESS
      country_long = INVALID_IP_ADDRESS
      region = INVALID_IP_ADDRESS
      city = INVALID_IP_ADDRESS
      latitude = INVALID_IP_ADDRESS
      longitude = INVALID_IP_ADDRESS
      isp = INVALID_IP_ADDRESS
      domain = INVALID_IP_ADDRESS
      netspeed = INVALID_IP_ADDRESS
      areacode = INVALID_IP_ADDRESS
      iddcode = INVALID_IP_ADDRESS
      timezone = INVALID_IP_ADDRESS
      zipcode = INVALID_IP_ADDRESS
      weatherstationname = INVALID_IP_ADDRESS
      weatherstationcode = INVALID_IP_ADDRESS
      mcc = INVALID_IP_ADDRESS
      mnc = INVALID_IP_ADDRESS
      mobilebrand = INVALID_IP_ADDRESS
      elevation = INVALID_IP_ADDRESS
      usagetype = INVALID_IP_ADDRESS
      addresstype = INVALID_IP_ADDRESS
      category = INVALID_IP_ADDRESS
      district = INVALID_IP_ADDRESS
      asn = INVALID_IP_ADDRESS
      as = INVALID_IP_ADDRESS
  end
  results = {}
  results['country_short'] = country_short
  results['country_long'] = country_long
  results['region'] = region
  results['city'] = city
  results['latitude'] = latitude
  results['longitude'] = longitude
  results['isp'] = isp
  results['domain'] = domain
  results['netspeed'] = netspeed
  results['areacode'] = areacode
  results['iddcode'] = iddcode
  results['timezone'] = timezone
  results['zipcode'] = zipcode
  results['weatherstationname'] = weatherstationname
  results['weatherstationcode'] = weatherstationcode
  results['mcc'] = mcc
  results['mnc'] = mnc
  results['mobilebrand'] = mobilebrand
  results['elevation'] = elevation
  results['usagetype'] = usagetype
  results['addresstype'] = addresstype
  results['category'] = category
  results['district'] = district
  results['asn'] = asn
  results['as'] = as
  return results
end
get_areacode(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 461
def get_areacode(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          areacode = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          areacode = (defined?(rec.areacode) && rec.areacode != '') ? rec.areacode : FIELD_NOT_SUPPORTED
      else
          areacode = INVALID_IP_ADDRESS
      end
  else
      areacode = INVALID_IP_ADDRESS
  end
  return areacode
end
get_as(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 665
def get_as(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
        as = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
        as = (defined?(rec.as) && rec.as != '') ? rec.as : FIELD_NOT_SUPPORTED
      else
        as = INVALID_IP_ADDRESS
      end
  else
    as = INVALID_IP_ADDRESS
  end
  return as
end
get_asn(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 648
def get_asn(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
        asn = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
        asn = (defined?(rec.asn) && rec.asn != '') ? rec.asn : FIELD_NOT_SUPPORTED
      else
        asn = INVALID_IP_ADDRESS
      end
  else
    asn = INVALID_IP_ADDRESS
  end
  return asn
end
get_category(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 614
def get_category(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          category = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          category = (defined?(rec.category) && rec.category != '') ? rec.category : FIELD_NOT_SUPPORTED
      else
          category = INVALID_IP_ADDRESS
      end
  else
      category = INVALID_IP_ADDRESS
  end
  return category
end
get_city(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 308
def get_city(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          city = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          city = (defined?(rec.city) && rec.city != '') ? rec.city : FIELD_NOT_SUPPORTED
      else
          city = INVALID_IP_ADDRESS
      end
  else
      city = INVALID_IP_ADDRESS
  end
  return city
end
get_country_long(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 274
def get_country_long(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          country_long = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          country_long = (defined?(rec.country_long) && rec.country_long != '') ? rec.country_long : FIELD_NOT_SUPPORTED
      else
          country_long = INVALID_IP_ADDRESS
      end
  else
      country_long = INVALID_IP_ADDRESS
  end
  return country_long
end
get_country_short(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 257
def get_country_short(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          country_short = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          country_short = (defined?(rec.country_short) && rec.country_short != '') ? rec.country_short : FIELD_NOT_SUPPORTED
      else
          country_short = INVALID_IP_ADDRESS
      end
  else
      country_short = INVALID_IP_ADDRESS
  end
  return country_short
end
get_database_version() click to toggle source
# File lib/ip2location_ruby.rb, line 79
def get_database_version()
  return (self.databaseyear).to_s + "." + (self.databasemonth).to_s + "." + (self.databaseday).to_s
end
get_district(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 631
def get_district(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
        district = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
        district = (defined?(rec.district) && rec.district != '') ? rec.district : FIELD_NOT_SUPPORTED
      else
        district = INVALID_IP_ADDRESS
      end
  else
    district = INVALID_IP_ADDRESS
  end
  return district
end
get_domain(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 376
def get_domain(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          domain = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          domain = (defined?(rec.domain) && rec.domain != '') ? rec.domain : FIELD_NOT_SUPPORTED
      else
          domain = INVALID_IP_ADDRESS
      end
  else
      domain = INVALID_IP_ADDRESS
  end
  return domain
end
get_elevation(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 563
def get_elevation(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          elevation = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          elevation = (defined?(rec.elevation) && rec.elevation != '') ? rec.elevation : FIELD_NOT_SUPPORTED
      else
          elevation = INVALID_IP_ADDRESS
      end
  else
      elevation = INVALID_IP_ADDRESS
  end
  return elevation
end
get_iddcode(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 444
def get_iddcode(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          iddcode = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          iddcode = (defined?(rec.iddcode) && rec.iddcode != '') ? rec.iddcode : FIELD_NOT_SUPPORTED
      else
          iddcode = INVALID_IP_ADDRESS
      end
  else
      iddcode = INVALID_IP_ADDRESS
  end
  return iddcode
end
get_isp(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 359
def get_isp(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          isp = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          isp = (defined?(rec.isp) && rec.isp != '') ? rec.isp : FIELD_NOT_SUPPORTED
      else
          isp = INVALID_IP_ADDRESS
      end
  else
      isp = INVALID_IP_ADDRESS
  end
  return isp
end
get_last_error_message() click to toggle source
# File lib/ip2location_ruby.rb, line 67
def get_last_error_message()
  return self.last_err_msg
end
get_latitude(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 325
def get_latitude(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          latitude = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          latitude = (defined?(rec.latitude) && rec.latitude != '') ? rec.latitude : FIELD_NOT_SUPPORTED
      else
          latitude = INVALID_IP_ADDRESS
      end
  else
      latitude = INVALID_IP_ADDRESS
  end
  return latitude
end
get_longitude(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 342
def get_longitude(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          longitude = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          longitude = (defined?(rec.longitude) && rec.longitude != '') ? rec.longitude : FIELD_NOT_SUPPORTED
      else
          longitude = INVALID_IP_ADDRESS
      end
  else
      longitude = INVALID_IP_ADDRESS
  end
  return longitude
end
get_mcc(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 512
def get_mcc(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          mcc = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          mcc = (defined?(rec.mcc) && rec.mcc != '') ? rec.mcc : FIELD_NOT_SUPPORTED
      else
          mcc = INVALID_IP_ADDRESS
      end
  else
      mcc = INVALID_IP_ADDRESS
  end
  return mcc
end
get_mnc(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 529
def get_mnc(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          mnc = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          mnc = (defined?(rec.mnc) && rec.mnc != '') ? rec.mnc : FIELD_NOT_SUPPORTED
      else
          mnc = INVALID_IP_ADDRESS
      end
  else
      mnc = INVALID_IP_ADDRESS
  end
  return mnc
end
get_mobilebrand(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 546
def get_mobilebrand(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          mobilebrand = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          mobilebrand = (defined?(rec.mobilebrand) && rec.mobilebrand != '') ? rec.mobilebrand : FIELD_NOT_SUPPORTED
      else
          mobilebrand = INVALID_IP_ADDRESS
      end
  else
      mobilebrand = INVALID_IP_ADDRESS
  end
  return mobilebrand
end
get_module_version() click to toggle source
# File lib/ip2location_ruby.rb, line 71
def get_module_version()
  return VERSION
end
get_netspeed(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 427
def get_netspeed(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          netspeed = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          netspeed = (defined?(rec.netspeed) && rec.netspeed != '') ? rec.netspeed : FIELD_NOT_SUPPORTED
      else
          netspeed = INVALID_IP_ADDRESS
      end
  else
      netspeed = INVALID_IP_ADDRESS
  end
  return netspeed
end
get_package_version() click to toggle source
# File lib/ip2location_ruby.rb, line 75
def get_package_version()
  return (self.db_index).to_s
end
get_region(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 291
def get_region(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          region = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          region = (defined?(rec.region) && rec.region != '') ? rec.region : FIELD_NOT_SUPPORTED
      else
          region = INVALID_IP_ADDRESS
      end
  else
      region = INVALID_IP_ADDRESS
  end
  return region
end
get_timezone(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 410
def get_timezone(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          timezone = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          timezone = (defined?(rec.timezone) && rec.timezone != '') ? rec.timezone : FIELD_NOT_SUPPORTED
      else
          timezone = INVALID_IP_ADDRESS
      end
  else
      timezone = INVALID_IP_ADDRESS
  end
  return timezone
end
get_usagetype(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 580
def get_usagetype(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          usagetype = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          usagetype = (defined?(rec.usagetype) && rec.usagetype != '') ? rec.usagetype : FIELD_NOT_SUPPORTED
      else
          usagetype = INVALID_IP_ADDRESS
      end
  else
      usagetype = INVALID_IP_ADDRESS
  end
  return usagetype
end
get_weatherstationcode(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 478
def get_weatherstationcode(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          weatherstationcode = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          weatherstationcode = (defined?(rec.weatherstationcode) && rec.weatherstationcode != '') ? rec.weatherstationcode : FIELD_NOT_SUPPORTED
      else
          weatherstationcode = INVALID_IP_ADDRESS
      end
  else
      weatherstationcode = INVALID_IP_ADDRESS
  end
  return weatherstationcode
end
get_weatherstationname(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 495
def get_weatherstationname(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          weatherstationname = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          weatherstationname = (defined?(rec.weatherstationname) && rec.weatherstationname != '') ? rec.weatherstationname : FIELD_NOT_SUPPORTED
      else
          weatherstationname = INVALID_IP_ADDRESS
      end
  else
      weatherstationname = INVALID_IP_ADDRESS
  end
  return weatherstationname
end
get_zipcode(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 393
def get_zipcode(ip)
  valid = !(IPAddr.new(ip) rescue nil).nil?
  if valid
      rec = get_record(ip)
      if rec == IPV6_ADDRESS_IN_IPV4_BIN
          zipcode = IPV6_ADDRESS_IN_IPV4_BIN
      elsif !(rec.nil?)
          zipcode = (defined?(rec.zipcode) && rec.zipcode != '') ? rec.zipcode : FIELD_NOT_SUPPORTED
      else
          zipcode = INVALID_IP_ADDRESS
      end
  else
      zipcode = INVALID_IP_ADDRESS
  end
  return zipcode
end
open(url) click to toggle source
# File lib/ip2location_ruby.rb, line 23
def open(url)
  if url == ''
      self.last_err_msg = 'Ip2location.new.open() requires a database path name.'
      abort('Ip2location.new.open() requires a database path name.')
  end

  begin
      self.file = File.open(File.expand_path url, 'rb')
  rescue
      self.last_err_msg = 'Ip2location.new.open() error in opening ' + url + '.'
      abort('Ip2location.new.open() error in opening ' + url + '. No such file in the /your_ip2location_ruby_library_path/rb/ folder.')
  else
  end
  i2l = Ip2locationConfig.read(file)
  if i2l.productcode == 1
  else
      if i2l.databaseyear <= 20 && i2l.productcode == 0
      else
          self.file.close
          self.last_err_msg = INVALID_BIN_DATABASE
          abort(INVALID_BIN_DATABASE)
      end
  end
  self.db_index = i2l.databasetype
  self.columns = i2l.databasecolumn + 0
  self.databaseyear = 2000 + i2l.databaseyear
  self.databasemonth = i2l.databasemonth
  self.databaseday = i2l.databaseday
  self.database = DbConfig.setup_database(self.db_index)
  self.ipv4databasecount = i2l.ipv4databasecount
  self.ipv4databaseaddr = i2l.ipv4databaseaddr
  self.ipv6databasecount = i2l.ipv6databasecount
  self.ipv6databaseaddr = i2l.ipv6databaseaddr
  self.ipv4indexbaseaddr = i2l.ipv4indexbaseaddr
  self.ipv6indexbaseaddr = i2l.ipv6indexbaseaddr
  self.record_class4 = (Ip2LocationRecord.init database, 4)
  self.record_class6 = (Ip2LocationRecord.init database, 6)
  self
end
validateip(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 714
def validateip(ip)
  if ip.ipv4?
      ipv = 4
      ipnum = ip.to_i + 0
  else
      ipv = 6
      ipnum = ip.to_i + 0
      #reformat ipv4 address in ipv6
      if ipnum >= 281470681743360 && ipnum <= 281474976710655
          ipv = 4
          ipnum = ipnum - 281470681743360
      end
      #reformat 6to4 address to ipv4 address 2002:: to 2002:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
      if ipnum >= 42545680458834377588178886921629466624 && ipnum <= 42550872755692912415807417417958686719
          ipv = 4
          #bitshift right 80 bits
          ipnum = ipnum >> 80
          #bitwise modulus to get the last 32 bit
          ipnum = ipnum % 4294967296
      end
      #reformat Teredo address to ipv4 address 2001:0000:: to 2001:0000:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:
      if ipnum >= 42540488161975842760550356425300246528 && ipnum <= 42540488241204005274814694018844196863
          ipv = 4
          #bitwise not to invert binary
          ipnum = ~ipnum
          #bitwise modulus to get the last 32 bit
          ipnum = ipnum % 4294967296
      end
  end
  [ipv, ipnum]
end

Private Instance Methods

bsearch(low, high, ipnum, base_addr, col_length) click to toggle source
# File lib/ip2location_ruby.rb, line 682
def bsearch(low, high, ipnum, base_addr, col_length)
  while low <= high do
      mid = (low + high) >> 1
      ip_from, ip_to = get_from_to(mid, base_addr, col_length)
      if ipnum >= ip_from && ipnum < ip_to
          from_base = (base_addr + mid * (col_length + (self.v4 ? 0 : 12)))
          file.seek(from_base)
          if v4
              return self.record_class4.read(file)
          else
              return self.record_class6.read(file)
          end
      else
          if ipnum < ip_from
              high = mid - 1
          else
              low = mid + 1
          end
      end
  end    
end
get_from_to(mid, base_addr, col_length) click to toggle source
# File lib/ip2location_ruby.rb, line 704
def get_from_to(mid, base_addr, col_length)
  from_base = (base_addr + mid * (col_length + (v4 ? 0 : 12)))
  data_length = col_length + (v4 ? 4 : (12 + 16))
  file.seek(from_base)
  data_read = file.read(data_length)
  ip_from = v4 ? data_read[0..3].unpack('V').first : readipv6(data_read[0..15].unpack('V*'))
  ip_to = v4 ? data_read[(data_length - 4)..(data_length - 1)].unpack('V').first : readipv6(data_read[(data_length - 16)..(data_length - 1)].unpack('V*'))
  [ip_from, ip_to]
end
get_record(ip) click to toggle source
# File lib/ip2location_ruby.rb, line 83
def get_record(ip)
  ipno = IPAddr.new(ip, Socket::AF_UNSPEC)
  self.ip_version, ipnum = validateip(ipno)
  self.v4 = ip_version == 4 ? true : false
  self.count = v4 ? self.ipv4databasecount + 0 : self.ipv6databasecount + 0
  self.base_addr = (v4 ? self.ipv4databaseaddr - 1 : self.ipv6databaseaddr - 1)
  if ip_version == 6 && self.ipv6databasecount == 0
      return IPV6_ADDRESS_IN_IPV4_BIN
  end
  col_length = self.columns * 4
  if ipv4indexbaseaddr > 0 || ipv6indexbaseaddr > 0
      indexpos = 0
      case ip_version
      when 4
          indexpos = ipv4indexbaseaddr + ((ipnum >> 16) << 3)
          realipno = ipnum
          # if ipnum reach MAX_IPV4_RANGE
          if realipno == 4294967295
              ipnum = realipno - 1
          end
      when 6
          indexpos = ipv6indexbaseaddr + ((ipnum >> 112) << 3)
          realipno = ipnum
          # if ipnum reach MAX_IPV6_RANGE
          if realipno == 340282366920938463463374607431768211455
              ipnum = realipno - 1
          end
      end
      low, high = read32x2(indexpos)
      return self.record = bsearch(low, high, ipnum, self.base_addr, col_length)
  else
      return self.record = bsearch(0, self.count, ipnum, self.base_addr, col_length)
  end
end
read32x2(indexp) click to toggle source
# File lib/ip2location_ruby.rb, line 746
def read32x2(indexp)
  file.seek(indexp - 1)
  data_read = file.read(8)
  data1 = data_read[0..3].unpack('V').first
  data2 = data_read[4..7].unpack('V').first
  return [data1, data2]
end
readipv6(parts) click to toggle source
# File lib/ip2location_ruby.rb, line 754
def readipv6(parts)
  return parts[0] + parts[1] * 4294967296 + parts[2] * 4294967296**2 + parts[3] * 4294967296**3
end