def initialize(filename, flags = 0)
@mutex = Mutex.new
@flags = flags
@databaseType = GEOIP_COUNTRY_EDITION
@record_length = STANDARD_RECORD_LENGTH
@file = File.open(filename, 'rb')
@file.seek(-3, IO::SEEK_END)
0.upto(STRUCTURE_INFO_MAX_SIZE-1) { |i|
if @file.read(3) == "\xFF\xFF\xFF"
@databaseType = @file.getc
@databaseType -= 105 if @databaseType >= 106
if (@databaseType == GEOIP_REGION_EDITION_REV0)
@databaseSegments = [ STATE_BEGIN_REV0 ]
elsif (@databaseType == GEOIP_REGION_EDITION_REV1)
@databaseSegments = [ STATE_BEGIN_REV1 ]
elsif (@databaseType == GEOIP_CITY_EDITION_REV0 ||
@databaseType == GEOIP_CITY_EDITION_REV1 ||
@databaseType == GEOIP_ORG_EDITION ||
@databaseType == GEOIP_ISP_EDITION ||
@databaseType == GEOIP_ASNUM_EDITION)
@databaseSegments = [ 0 ]
sr = @file.read(3).unpack("C*")
@databaseSegments[0] += le_to_ui(sr)
if (@databaseType == GEOIP_ORG_EDITION ||
@databaseType == GEOIP_ISP_EDITION)
@record_length = 4
end
end
break
else
@file.seek(-4, IO::SEEK_CUR)
end
}
if (@databaseType == GEOIP_COUNTRY_EDITION ||
@databaseType == GEOIP_PROXY_EDITION ||
@databaseType == GEOIP_NETSPEED_EDITION)
@databaseSegments = [ COUNTRY_BEGIN ]
end
end