int main(int argc, char **argv) { char *mmdb_file = NULL; char *ip_address = NULL; int verbose = 0; int iterations = 0; int lookup_path_length = 0; const char **lookup_path = get_options(argc, argv, &mmdb_file, &ip_address, &verbose, &iterations, &lookup_path_length); MMDB_s mmdb = open_or_die(mmdb_file); if (verbose) { dump_meta(&mmdb); } if (0 == iterations) { exit(lookup_and_print(&mmdb, ip_address, lookup_path, lookup_path_length)); } else { exit(benchmark(&mmdb, iterations)); } }
void do_meta (void) { header *file; scan_space(); file=scan_value(); if (error || file->type!=s_string) { output("Meta needs a filename!\n"); error=201; return; } FILE *metafile=fopen(stringof(file),"wb"); if (!metafile) { output1("Could not open %s.\n",stringof(file)); } dump_meta(metafile); fclose(metafile); }
int main(int argc, char *const argv[]) { int verbose = 0; int character; char *fname = NULL; while ((character = getopt(argc, argv, "vf:")) != -1) { switch (character) { case 'v': verbose = 1; break; case 'f': fname = strdup(optarg); break; default: case '?': usage(argv[0]); } } argc -= optind; argv += optind; if (!fname) { fname = strdup(TMMDB_DEFAULT_DATABASE); } assert(fname != NULL); //TMMDB_s *mmdb = TMMDB_open(fname, TMMDB_MODE_MEMORY_CACHE); TMMDB_s *mmdb; int err = TMMDB_open(&mmdb, fname, TMMDB_MODE_STANDARD); if (err != TMMDB_SUCCESS) { fprintf(stderr, "Can't open %s ( %d )\n", fname, err); exit(1); } free(fname); char *ipstr = argv[0]; union { struct in_addr v4; struct in6_addr v6; } ip; int ai_family = is_ipv4(mmdb) ? AF_INET : AF_INET6; int ai_flags = AI_V4MAPPED; if (ipstr == NULL || 0 != TMMDB_resolve_address(ipstr, ai_family, ai_flags, &ip)) { fprintf(stderr, "Invalid IP\n"); exit(1); } if (verbose) { dump_meta(mmdb); } TMMDB_root_entry_s root = {.entry.mmdb = mmdb }; int status = is_ipv4(mmdb) ? TMMDB_lookup_by_ipnum(htonl(ip.v4.s_addr), &root) : TMMDB_lookup_by_ipnum_128(ip.v6, &root); if (status == TMMDB_SUCCESS) { if (root.entry.offset > 0) { TMMDB_decode_all_s *decode_all; int err = TMMDB_get_tree(&root.entry, &decode_all); if (err == TMMDB_SUCCESS) { if (decode_all != NULL) TMMDB_dump(mmdb, decode_all, 0); TMMDB_free_decode_all(decode_all); } } else { puts("Sorry, nothing found"); // not found } } return (0); }
int main(int argc, char *const argv[]) { int verbose = 0; int character; char *fname = NULL; while ((character = getopt(argc, argv, "vf:")) != -1) { switch (character) { case 'v': verbose = 1; break; case 'f': fname = strdup(optarg); break; default: case '?': usage(argv[0]); } } argc -= optind; argv += optind; if (!fname) { fname = strdup(MMDB_DEFAULT_DATABASE); } assert(fname != NULL); //MMDB_s *mmdb = MMDB_open(fname, MMDB_MODE_MEMORY_CACHE); MMDB_s *mmdb = MMDB_open(fname, MMDB_MODE_STANDARD); if (!mmdb) die("Can't open %s\n", fname); free(fname); char *ipstr = argv[0]; union { struct in_addr v4; struct in6_addr v6; } ip; int ai_family = is_ipv4(mmdb) ? AF_INET : AF_INET6; int ai_flags = AI_V4MAPPED; // accept everything if (ipstr == NULL || 0 != MMDB_resolve_address(ipstr, ai_family, ai_flags, &ip)) { fprintf(stderr, "Invalid IP\n"); exit(1); } if (verbose) { dump_meta(mmdb); } MMDB_root_entry_s root = {.entry.mmdb = mmdb }; int status = is_ipv4(mmdb) ? MMDB_lookup_by_ipnum(htonl(ip.v4.s_addr), &root) : MMDB_lookup_by_ipnum_128(ip.v6, &root); if (status == MMDB_SUCCESS) { dump_ipinfo(ipstr, &root); } return (0); }