geoipdb 0.4.1 → 0.4.2
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.
- data/VERSION +1 -1
- data/ext/geoipdb/geoipdb.c +1 -6
- data/ext/geoipdb/ipdb.c +0 -25
- data/ext/geoipdb/ipdb.h +1 -6
- data/geoipdb.gemspec +2 -2
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/ext/geoipdb/geoipdb.c
CHANGED
@@ -13,22 +13,18 @@ static VALUE cIpDb;
|
|
13
13
|
|
14
14
|
// free the memory used by the db, called by the Ruby-GC
|
15
15
|
void geoipdb_free(geoipdb *gi) {
|
16
|
-
printf("Freeing memory for the GeoIpDb.. \n");
|
17
16
|
if(gi == NULL)
|
18
17
|
return;
|
19
18
|
if (gi->db != NULL){
|
20
19
|
if(gi->db->cities != NULL ){
|
21
|
-
printf("..freeing cities \n");
|
22
20
|
free(gi->db->cities);
|
23
21
|
gi->db->cities = NULL;
|
24
22
|
}
|
25
23
|
if(gi->db->ranges != NULL ){
|
26
|
-
printf("..freeing ranges \n");
|
27
24
|
free(gi->db->ranges);
|
28
25
|
gi->db->ranges = NULL;
|
29
26
|
}
|
30
27
|
if(gi->db != NULL){
|
31
|
-
printf("..freeing ipdb \n");
|
32
28
|
free(gi->db);
|
33
29
|
}
|
34
30
|
}
|
@@ -50,7 +46,6 @@ VALUE ipdb_init(VALUE self, VALUE cities_file_name, VALUE ranges_file_name, VALU
|
|
50
46
|
|
51
47
|
gi->db= init_db(cities_csv_file, ranges_csv_file, cache_file);
|
52
48
|
|
53
|
-
|
54
49
|
if(gi->db == NULL)
|
55
50
|
{
|
56
51
|
if(DEBUG)
|
@@ -109,4 +104,4 @@ void Init_geoipdb(void)
|
|
109
104
|
cIpDb = rb_define_class( "GeoIpDb", rb_cObject);
|
110
105
|
rb_define_singleton_method( cIpDb, "init", ipdb_init, 3);
|
111
106
|
rb_define_method( cIpDb, "information_for_ip", ipdb_information_for_ip, 1);
|
112
|
-
}
|
107
|
+
}
|
data/ext/geoipdb/ipdb.c
CHANGED
@@ -95,8 +95,6 @@ print_cities(IPDB * db){
|
|
95
95
|
}
|
96
96
|
}
|
97
97
|
|
98
|
-
|
99
|
-
|
100
98
|
void print_stats(IPDB * db){
|
101
99
|
printf("DB STATS: \n");
|
102
100
|
printf("\tCities: %i\n", db->cities_count);
|
@@ -181,12 +179,6 @@ int compare_ranges(const void *fa, const void *fb) {
|
|
181
179
|
const IpRange *a = (IpRange *) fa;
|
182
180
|
const IpRange *b = (IpRange *) fb;
|
183
181
|
|
184
|
-
// printf("\tComparing: a:");
|
185
|
-
// print_range(a);
|
186
|
-
// printf(" with b:");
|
187
|
-
// print_range(b);
|
188
|
-
// printf("\n");
|
189
|
-
|
190
182
|
if(a->from>0 && a->to>0 && b->from>0 && b->to>0){ //regular case: both entries are ranges
|
191
183
|
if(a->to < b->from) {
|
192
184
|
return -1;
|
@@ -256,11 +248,8 @@ city_index_by_code(IPDB * db, int city_code){
|
|
256
248
|
printf("Could not find searched city with code: %i \n", city_code);
|
257
249
|
return -1;
|
258
250
|
}else{
|
259
|
-
// printf("Found result: \t");
|
260
|
-
// print_city(result);
|
261
251
|
int index;
|
262
252
|
index = (result - db->cities);
|
263
|
-
// printf("Found index: %i\n", index);
|
264
253
|
return index;
|
265
254
|
}
|
266
255
|
}
|
@@ -350,7 +339,6 @@ isp_index_by_name(IPDB * db, char* isp_name){
|
|
350
339
|
}
|
351
340
|
}
|
352
341
|
}
|
353
|
-
// TODO: malloc more space if needed
|
354
342
|
// add new isp
|
355
343
|
if(db->isps_count < MAX_ISPS_COUNT){
|
356
344
|
int16 new_index = db->isps_count;
|
@@ -433,8 +421,6 @@ read_ranges_csv(IPDB * db){
|
|
433
421
|
entry->city_index = city_index;
|
434
422
|
entry->isp_index = isp_index;
|
435
423
|
|
436
|
-
// printf("from: %u,to: %u, city_code:%s, city_index: %i\n",entry->from,entry->to,city_code, entry->city_index);
|
437
|
-
// printf("working record nr: %li\n", db->ranges_count);
|
438
424
|
db->ranges_count++;
|
439
425
|
}
|
440
426
|
}
|
@@ -453,13 +439,11 @@ iso2_code(char* iso3){
|
|
453
439
|
int i = 0;
|
454
440
|
for( i = 0; i < num_countries; i++)
|
455
441
|
{
|
456
|
-
// printf("Trying cmp of %s and %s...", iso3, country_iso3_codes[i]);
|
457
442
|
if( strcmp(country_iso3_codes[i],iso3)==0)
|
458
443
|
{
|
459
444
|
return (char*) country_iso2_codes[i];
|
460
445
|
}
|
461
446
|
}
|
462
|
-
// printf("Could not find iso2 code for iso3: %s, using: '%s' \n", iso3, country_iso2_codes[0]);
|
463
447
|
return (char*) country_iso2_codes[0];
|
464
448
|
}
|
465
449
|
|
@@ -496,7 +480,6 @@ read_cities_csv(IPDB * db){
|
|
496
480
|
{
|
497
481
|
printf("Worked lines: %i\n", i);
|
498
482
|
}
|
499
|
-
// printf("Line: %s", line);
|
500
483
|
// COUNTRY,REGION,CITY-NAME,METRO-CODE,CITY-CODE,LATITUDE,LONGITUDE
|
501
484
|
country = strtok(line, CITIES_DELIM);
|
502
485
|
region = strtok(NULL, CITIES_DELIM);
|
@@ -510,7 +493,6 @@ read_cities_csv(IPDB * db){
|
|
510
493
|
|
511
494
|
strncpy(entry->country_iso3, country, strlen(country));
|
512
495
|
|
513
|
-
// entry->country_iso2 = iso2_code(entry->country_iso3);
|
514
496
|
strncpy(entry->country_iso2, iso2_code(country), 2);
|
515
497
|
strncpy(entry->name, name, strlen(name));
|
516
498
|
|
@@ -523,8 +505,6 @@ read_cities_csv(IPDB * db){
|
|
523
505
|
printf("\n Parsing of %i records needed %.6lf seconds\n", db->cities_count, get_time(&tim)-t1);
|
524
506
|
}
|
525
507
|
|
526
|
-
|
527
|
-
|
528
508
|
/**
|
529
509
|
cache-file is an exact binary copy of the ranges+cities-arrays from memory,
|
530
510
|
the layout goes like this:
|
@@ -661,11 +641,8 @@ IPDB * init_db(char * cities_csv_file, char * ranges_csv_file, char * cache_file
|
|
661
641
|
db->ranges_csv_file = ranges_csv_file;
|
662
642
|
db->max_ranges_count = MAX_RANGES_COUNT;
|
663
643
|
|
664
|
-
// db->isps = NULL;
|
665
|
-
// db->isps = malloc(MAX_ISP_NAME_LENGTH * MAX_ISPS_COUNT);
|
666
644
|
db->isps_count = 0;
|
667
645
|
|
668
|
-
|
669
646
|
if(USE_CACHE && read_cache_file(db) > 0){
|
670
647
|
if(DEBUG)
|
671
648
|
printf("Loaded DB from Cache-File with %i records \n", db->ranges_count);
|
@@ -673,14 +650,12 @@ IPDB * init_db(char * cities_csv_file, char * ranges_csv_file, char * cache_file
|
|
673
650
|
if(DEBUG)
|
674
651
|
printf("Initializing IPDB from CSV-file: %s \n", db->ranges_csv_file);
|
675
652
|
read_cities_csv(db);
|
676
|
-
// print_cities(db);
|
677
653
|
if(db->cities_count == 0)
|
678
654
|
{
|
679
655
|
return NULL;
|
680
656
|
}
|
681
657
|
sort_cities(db);
|
682
658
|
read_ranges_csv(db);
|
683
|
-
// //TODO: sort ranges
|
684
659
|
if(db!=NULL && db->ranges_count > 0 && USE_CACHE)
|
685
660
|
{
|
686
661
|
if(DEBUG)
|
data/ext/geoipdb/ipdb.h
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
#ifdef INT_2_BYTES
|
3
2
|
typedef char int8;
|
4
3
|
typedef int int16;
|
@@ -17,7 +16,6 @@ typedef int int32;
|
|
17
16
|
# define RSTRING_PTR(x) (RSTRING(x)->ptr)
|
18
17
|
#endif
|
19
18
|
|
20
|
-
|
21
19
|
#define RANGES_DELIM ",\n"
|
22
20
|
#define CITIES_DELIM ",\n"
|
23
21
|
|
@@ -67,12 +65,9 @@ typedef struct{
|
|
67
65
|
|
68
66
|
} IPDB;
|
69
67
|
|
70
|
-
|
71
|
-
// "publicly" visible functions
|
72
68
|
IPDB *
|
73
69
|
init_db(char * cities_csv_file, char * ranges_csv_file, char * cache_file_name);
|
74
70
|
|
75
|
-
|
76
71
|
void
|
77
72
|
print_city(const City * e);
|
78
73
|
|
@@ -86,4 +81,4 @@ City*
|
|
86
81
|
find_city_for_ip_range(IPDB * db, IpRange* range);
|
87
82
|
|
88
83
|
char*
|
89
|
-
find_isp_for_ip_range(IPDB * db, IpRange* range);
|
84
|
+
find_isp_for_ip_range(IPDB * db, IpRange* range);
|
data/geoipdb.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "geoipdb"
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Eugen Martin", "Martin Karlsch"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2012-05-11"
|
13
13
|
s.description = "Returns a GeoLocation and additional information for given IP. Reads Data from CSV-Files and uses internal binary caching."
|
14
14
|
s.email = "eugeniusmartinus@googlemail.com"
|
15
15
|
s.extensions = ["ext/geoipdb/extconf.rb"]
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geoipdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 0.4.
|
9
|
+
- 2
|
10
|
+
version: 0.4.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Eugen Martin
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date:
|
19
|
+
date: 2012-05-11 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|