Esempio n. 1
0
void geo_ipv4_lookup(struct in_addr ip, char **country, char **city, char **coord)
{
	GeoIP *gi;
	GeoIPRecord *gir;
	int country_id;
	const char *p;

	if (geo_setup() != 0)
		return;

	ip.s_addr = ntohl(ip.s_addr);

	gi = pGeoIP_open_type(GEOIP_COUNTRY_EDITION, GEOIP_STANDARD | GEOIP_SILENCE);
	if (gi != NULL) {
		gi->charset = GEOIP_CHARSET_UTF8;

		country_id = pGeoIP_id_by_ipnum(gi, ip.s_addr);
		if (country_id < 0) {
			return;
		}
		p = pGeoIP_country_name_by_id(gi, country_id);
		if (p)
			*country = strdup(p);

		pGeoIP_delete(gi);
	}

	gi = pGeoIP_open_type(GEOIP_CITY_EDITION_REV1, GEOIP_STANDARD | GEOIP_SILENCE);
	if (gi != NULL) {
		gi->charset = GEOIP_CHARSET_UTF8;

		gir = pGeoIP_record_by_ipnum(gi, ip.s_addr);

		if (gir && gir->city)
			*city = strdup(gir->city);

		if (gir && gir->longitude != 0 && gir->longitude != 0)
			asprintf(coord, "%f,%f", gir->latitude, gir->longitude);

		pGeoIP_delete(gi);
	} else {
		gi = pGeoIP_open_type(GEOIP_CITY_EDITION_REV0, GEOIP_STANDARD | GEOIP_SILENCE);
		if (gi != NULL) {
			gi->charset = GEOIP_CHARSET_UTF8;

			gir = pGeoIP_record_by_ipnum(gi, ip.s_addr);

			if (gir && gir->city)
				*city = strdup(gir->city);

			if (gir && gir->longitude != 0 && gir->longitude != 0)
				asprintf(coord, "%f,%f", gir->latitude, gir->longitude);

			pGeoIP_delete(gi);
		}
	}

	return;
}
Esempio n. 2
0
void geo_ipv6_lookup(struct in6_addr *ip, char **country, char **ccode, char **city, char **coord)
{
	GeoIP *gi;
	GeoIPRecord *gir;
	int country_id;
	const char *p;

	if (geo_setup() != 0)
		return;

	p_GeoIP_setup_dbfilename();

	gi = pGeoIP_open_type(GEOIP_COUNTRY_EDITION_V6, GEOIP_STANDARD | GEOIP_SILENCE);
	if (gi != NULL) {
		gi->charset = GEOIP_CHARSET_UTF8;

		country_id = pGeoIP_id_by_ipnum_v6(gi, (geoipv6_t)*ip);
		if (country_id < 0) {
			return;
		}
		p = pGeoIP_country_name_by_id(gi, country_id);
		if (p)
			*country = strdup(p);

		p = pGeoIP_code_by_id(country_id);
		if (p)
			*ccode = strdup(p);

		pGeoIP_delete(gi);
	}

	gi = pGeoIP_open_type(GEOIP_CITY_EDITION_REV1_V6, GEOIP_STANDARD | GEOIP_SILENCE);
	if (gi != NULL) {
		gi->charset = GEOIP_CHARSET_UTF8;

		gir = pGeoIP_record_by_ipnum_v6(gi, (geoipv6_t)*ip);

		if (gir && gir->city)
			*city = strdup(gir->city);

		if (gir && gir->longitude != 0 && gir->longitude != 0)
			asprintf(coord, "%f,%f", gir->latitude, gir->longitude);

		pGeoIP_delete(gi);
	} else {
		gi = pGeoIP_open_type(GEOIP_CITY_EDITION_REV0_V6, GEOIP_STANDARD | GEOIP_SILENCE);
		if (gi != NULL) {
			gi->charset = GEOIP_CHARSET_UTF8;

			gir = pGeoIP_record_by_ipnum_v6(gi, (geoipv6_t)*ip);

			if (gir && gir->city)
				*city = strdup(gir->city);

			if (gir && gir->longitude != 0 && gir->longitude != 0)
				asprintf(coord, "%f,%f", gir->latitude, gir->longitude);

			pGeoIP_delete(gi);
		}
	}

	return;
}