MaxMind-DB-Reader-XS
view release on metacpan or search on metacpan
lib/MaxMind/DB/Reader/XS.xs view on Meta::CPAN
croak("You must provide an IP address to look up");
}
result = MMDB_lookup_string(mmdb, ip_address, &gai_status, &mmdb_status);
if (0 != gai_status) {
croak(
"The IP address you provided (%s) is not a valid IPv4 or IPv6 address",
ip_address);
}
if (MMDB_SUCCESS != mmdb_status) {
const char *mmdb_error = MMDB_strerror(mmdb_status);
croak(
"MaxMind::DB::Reader::XS - Error looking up IP address \"%s\": %s",
ip_address, mmdb_error
);
}
if (result.found_entry) {
get_status = MMDB_get_entry_data_list(&result.entry, &entry_data_list);
if (MMDB_SUCCESS != get_status) {
const char *get_error = MMDB_strerror(get_status);
MMDB_free_entry_data_list(entry_data_list);
croak(
"MaxMind::DB::Reader::XS - Entry data error looking up \"%s\": %s",
ip_address, get_error
);
}
RETVAL = decode_and_free_entry_data_list(entry_data_list);
} else {
RETVAL = &PL_sv_undef;
}
OUTPUT:
RETVAL
void
_iterate_search_tree(self, mmdb, data_callback, node_callback)
MMDB_s *mmdb
SV *data_callback;
SV *node_callback;
PREINIT:
uint32_t node_num;
int depth;
int max_depth;
CODE:
node_num = 0;
depth = 1;
max_depth = mmdb->metadata.ip_version == 6 ? 128 : 32;
mmdb_uint128_t ipnum = 0;
iterate_search_nodes(mmdb, data_callback, node_callback, node_num,
ipnum, depth, max_depth);
void
__read_node(self, mmdb, node_number)
MMDB_s *mmdb
U32 node_number
PREINIT:
MMDB_search_node_s node;
int status;
PPCODE:
status = MMDB_read_node(mmdb, node_number, &node);
if (MMDB_SUCCESS != status) {
const char *error = MMDB_strerror(status);
croak(
"MaxMind::DB::Reader::XS - Error trying to read node %i: %s",
node_number, error
);
}
EXTEND(SP, 2);
mPUSHu(node.left_record);
mPUSHu(node.right_record);
SV *
libmaxminddb_version()
CODE:
const char *v = MMDB_lib_version();
RETVAL = newSVpv(v, strlen(v));
OUTPUT:
RETVAL
( run in 1.989 second using v1.01-cache-2.11-cpan-71847e10f99 )