1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
4 * Copyright (C) 2003 MaxMind LLC
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31 #include <sys/types.h> /* for fstat */
32 #include <sys/stat.h> /* for fstat */
34 #define SEGMENT_RECORD_LENGTH 3
35 #define STANDARD_RECORD_LENGTH 3
36 #define ORG_RECORD_LENGTH 4
37 #define MAX_RECORD_LENGTH 4
38 #define NUM_DB_TYPES 16
40 typedef struct GeoIPTag
{
44 unsigned char *index_cache
;
45 unsigned int *databaseSegments
;
50 int record_iter
; /* used in GeoIP_next_record */
53 typedef struct GeoIPRegionTag
{
60 GEOIP_MEMORY_CACHE
= 1,
61 GEOIP_CHECK_CACHE
= 2,
66 GEOIP_COUNTRY_EDITION
= 1,
67 GEOIP_REGION_EDITION_REV0
= 7,
68 GEOIP_CITY_EDITION_REV0
= 6,
69 GEOIP_ORG_EDITION
= 5,
70 GEOIP_ISP_EDITION
= 4,
71 GEOIP_CITY_EDITION_REV1
= 2,
72 GEOIP_REGION_EDITION_REV1
= 3,
73 GEOIP_PROXY_EDITION
= 8,
74 GEOIP_ASNUM_EDITION
= 9,
75 GEOIP_NETSPEED_EDITION
= 10
80 GEOIP_HTTP_X_FORWARDED_FOR_PROXY
= 2,
81 GEOIP_HTTP_CLIENT_IP_PROXY
= 3
85 GEOIP_UNKNOWN_SPEED
= 0,
86 GEOIP_DIALUP_SPEED
= 1,
87 GEOIP_CABLEDSL_SPEED
= 2,
88 GEOIP_CORPORATE_SPEED
= 3
89 } GeoIPNetspeedValues
;
91 extern char **GeoIPDBFileName
;
92 extern const char * GeoIPDBDescription
[NUM_DB_TYPES
];
93 extern const char *GeoIPCountryDBFileName
;
94 extern const char *GeoIPRegionDBFileName
;
95 extern const char *GeoIPCityDBFileName
;
96 extern const char *GeoIPOrgDBFileName
;
97 extern const char *GeoIPISPDBFileName
;
99 extern const char GeoIP_country_code
[247][3];
100 extern const char GeoIP_country_code3
[247][4];
101 extern const char * GeoIP_country_name
[247];
102 extern const char GeoIP_country_continent
[247][3];
105 #define GEOIP_API __declspec(dllexport)
110 GEOIP_API GeoIP
* GeoIP_open_type (int type
, int flags
);
111 GEOIP_API GeoIP
* GeoIP_new(int flags
, char *filename
);
112 GEOIP_API GeoIP
* GeoIP_open(const char * filename
, int flags
);
113 GEOIP_API
int GeoIP_db_avail(int type
);
114 GEOIP_API
void GeoIP_delete(GeoIP
* gi
);
115 GEOIP_API
const char *GeoIP_country_code_by_addr (GeoIP
* gi
, const char *addr
);
116 GEOIP_API
const char *GeoIP_country_code_by_name (GeoIP
* gi
, const char *host
);
117 GEOIP_API
const char *GeoIP_country_code3_by_addr (GeoIP
* gi
, const char *addr
);
118 GEOIP_API
const char *GeoIP_country_code3_by_name (GeoIP
* gi
, const char *host
);
119 GEOIP_API
const char *GeoIP_country_name_by_addr (GeoIP
* gi
, const char *addr
);
120 GEOIP_API
const char *GeoIP_country_name_by_name (GeoIP
* gi
, const char *host
);
121 GEOIP_API
const char *GeoIP_country_code_by_ipnum (GeoIP
* gi
, unsigned long ipnum
);
122 GEOIP_API
int GeoIP_country_info_by_id(int id
, char **two
, char **three
, char **full
);
124 /* Deprecated - for backwards compatibility only */
125 GEOIP_API
int GeoIP_country_id_by_addr (GeoIP
* gi
, const char *addr
);
126 GEOIP_API
int GeoIP_country_id_by_name (GeoIP
* gi
, const char *host
);
127 GEOIP_API
char *GeoIP_org_by_addr (GeoIP
* gi
, const char *addr
);
128 GEOIP_API
char *GeoIP_org_by_name (GeoIP
* gi
, const char *host
);
131 GEOIP_API
int GeoIP_id_by_addr (GeoIP
* gi
, const char *addr
);
132 GEOIP_API
int GeoIP_id_by_name (GeoIP
* gi
, const char *host
);
133 GEOIP_API
int GeoIP_id_by_ipnum (GeoIP
* gi
, unsigned long ipnum
);
135 GEOIP_API GeoIPRegion
* GeoIP_region_by_addr (GeoIP
* gi
, const char *addr
);
136 GEOIP_API GeoIPRegion
* GeoIP_region_by_name (GeoIP
* gi
, const char *host
);
138 /* Warning - don't call this after GeoIP_assign_region_by_inetaddr calls */
139 GEOIP_API
void GeoIPRegion_delete (GeoIPRegion
*gir
);
141 GEOIP_API
void GeoIP_assign_region_by_inetaddr(GeoIP
* gi
, unsigned long inetaddr
, GeoIPRegion
*gir
);
143 /* Used to query GeoIP Organization, ISP and AS Number databases */
144 GEOIP_API
char *GeoIP_name_by_addr (GeoIP
* gi
, const char *addr
);
145 GEOIP_API
char *GeoIP_name_by_name (GeoIP
* gi
, const char *host
);
147 GEOIP_API
char *GeoIP_database_info (GeoIP
* gi
);
148 GEOIP_API
unsigned char GeoIP_database_edition (GeoIP
* gi
);
150 GEOIP_API
unsigned int _seek_record (GeoIP
*gi
, unsigned long ipnum
);
151 GEOIP_API
unsigned long _addr_to_num (const char *addr
);
154 #define memcpy(dest, src, n) bcopy(src, dest, n)