ip2cityisp 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ip2cityisp/database.rb +27 -7
- data/lib/ip2cityisp/version.rb +1 -1
- data/tt.rb +9 -1
- metadata +2 -4
- data/test.rb +0 -0
- data/test2.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3344f17152f528b22d350cc53215abee21c00351
|
4
|
+
data.tar.gz: 8b23d93db20e84c7c14b582a6321133e4b56564c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16ee18179c69f63d8cc393ea9fcf684f89c2b358bc8ab0b6f2c39a4c18bfdda97e41f1f08d3bc24b0240e90eae464c42eb64d550ea0fea2676b3bdb91348d4cd
|
7
|
+
data.tar.gz: 77ab73e25f602edaf6c0750ada1d71cf7dfaef67731b95ab8428e1e6114b0a103df1e23d079a1334c228ef9a0958b54b49fd6e917b468ea4dc148964c2e84b10
|
data/lib/ip2cityisp/database.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler/setup'
|
3
3
|
require 'bindata'
|
4
|
+
require 'thread'
|
4
5
|
module Ip2cityisp
|
5
6
|
class Header < BinData::Record
|
6
7
|
SIZE = 8
|
@@ -21,11 +22,14 @@ module Ip2cityisp
|
|
21
22
|
class Database
|
22
23
|
attr_reader :area, :isp
|
23
24
|
def initialize(file = 'ipinfo.data')
|
25
|
+
p "enable multi threads test...."
|
26
|
+
@mutex = Mutex.new
|
24
27
|
if file.respond_to?(:to_str)
|
25
28
|
@file = File.new(file.to_str)
|
26
29
|
else
|
27
30
|
@file = file
|
28
|
-
|
31
|
+
atomic_seek(0)
|
32
|
+
#@file.seek(0)
|
29
33
|
end
|
30
34
|
@header = Ip2cityisp::Header.read(@file)
|
31
35
|
$start = Ip2cityisp::Header::SIZE
|
@@ -33,13 +37,26 @@ module Ip2cityisp
|
|
33
37
|
$off1 = @header.total_nums*12 + 20
|
34
38
|
$version = @header.index_version
|
35
39
|
#get end off2
|
36
|
-
|
40
|
+
atomic_seek($high*12+8)
|
41
|
+
#@file.seek($high*12+8)
|
37
42
|
index = Ip2cityisp::Index.read(@file)
|
38
43
|
$off2 = $off1 + index.country_offset
|
39
44
|
$create_time= index.isp_offset
|
40
|
-
|
45
|
+
#@file.seek(0)
|
46
|
+
atomic_seek(0)
|
47
|
+
end
|
48
|
+
def atomic_seek( offset)
|
49
|
+
if @mutex
|
50
|
+
@mutex.synchronize { atomic_seek_unguarded(offset) }
|
51
|
+
else
|
52
|
+
atomic_seek_unguarded( offset)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
def atomic_seek_unguarded( offset)
|
56
|
+
io = @file
|
57
|
+
io.seek(offset)
|
58
|
+
#io.read(length)
|
41
59
|
end
|
42
|
-
|
43
60
|
def version
|
44
61
|
$version + ":CREATE TIME:" + Time.at($create_time).to_date.to_s
|
45
62
|
end
|
@@ -61,7 +78,8 @@ module Ip2cityisp
|
|
61
78
|
while(low <= high)
|
62
79
|
middle = (low + high) >> 1
|
63
80
|
#p middle
|
64
|
-
|
81
|
+
#@file.seek(start + middle * Ip2cityisp::Index::SIZE)
|
82
|
+
atomic_seek(start + middle * Ip2cityisp::Index::SIZE)
|
65
83
|
index = Ip2cityisp::Index.read(@file)
|
66
84
|
ip_start = index.ip_start
|
67
85
|
country_offset = index.country_offset
|
@@ -75,7 +93,8 @@ module Ip2cityisp
|
|
75
93
|
if country_offset >= 0
|
76
94
|
country_off = $off1 + country_offset
|
77
95
|
if country_off < @file.size
|
78
|
-
|
96
|
+
atomic_seek(country_off)
|
97
|
+
#@file.seek(country_off)
|
79
98
|
vlen = @file.read(1).unpack('C')[0]
|
80
99
|
info["area"] = @file.read(vlen).force_encoding("UTF-8")
|
81
100
|
end
|
@@ -84,7 +103,8 @@ module Ip2cityisp
|
|
84
103
|
if isp_offset >= 0
|
85
104
|
isp_off = $off2 + isp_offset
|
86
105
|
if isp_off < @file.size
|
87
|
-
|
106
|
+
atomic_seek(isp_off)
|
107
|
+
#@file.seek(isp_off)
|
88
108
|
vlen = @file.read(1).unpack('C')[0]
|
89
109
|
info["isp"] = @file.read(vlen).force_encoding("UTF-8")
|
90
110
|
end
|
data/lib/ip2cityisp/version.rb
CHANGED
data/tt.rb
CHANGED
@@ -3,7 +3,15 @@ require 'bundler/setup'
|
|
3
3
|
require 'ip2cityisp'
|
4
4
|
ip = ARGV[0]
|
5
5
|
@db = Ip2cityisp::Database.new('/tmp/ipinfo.data')
|
6
|
-
r = @db.query('
|
6
|
+
r = @db.query('123.123.21.12')
|
7
|
+
rip = r["area"]+r["isp"]
|
8
|
+
p rip
|
9
|
+
p @db.version
|
10
|
+
r = @db.query('13.123.21.12')
|
11
|
+
rip = r["area"]+r["isp"]
|
12
|
+
p rip
|
13
|
+
p @db.version
|
14
|
+
r = @db.query('3.123.21.12')
|
7
15
|
rip = r["area"]+r["isp"]
|
8
16
|
p rip
|
9
17
|
p @db.version
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ip2cityisp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- geda
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-10-20 00:00:00 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -60,8 +60,6 @@ files:
|
|
60
60
|
- lib/ip2cityisp.rb
|
61
61
|
- lib/ip2cityisp/database.rb
|
62
62
|
- lib/ip2cityisp/version.rb
|
63
|
-
- test.rb
|
64
|
-
- test2.rb
|
65
63
|
- tt.rb
|
66
64
|
homepage: ""
|
67
65
|
licenses:
|
data/test.rb
DELETED
File without changes
|
data/test2.rb
DELETED
File without changes
|