ip2cityisp 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|