static void test_dns_cb (struct rdns_reply *reply, gpointer arg) { struct rdns_reply_entry *cur; const struct rdns_request_name *name = rdns_request_get_name (reply->request, NULL); msg_debug ("got reply with code %s for request %s", rdns_strerror (reply->code), name->name); if (reply->code == RDNS_RC_NOERROR) { cur = reply->entries; while (cur) { switch (cur->type) { case RDNS_REQUEST_A: msg_debug ("got ip: %s", inet_ntoa (cur->content.a.addr)); break; case RDNS_REQUEST_PTR: msg_debug ("got name %s", cur->content.ptr.name); break; case RDNS_REQUEST_TXT: msg_debug ("got txt %s", cur->content.txt.data); break; case RDNS_REQUEST_SPF: msg_debug ("got spf %s", cur->content.txt.data); break; case RDNS_REQUEST_SRV: msg_debug ("got srv pri: %d, weight: %d, port: %d, target: %s", cur->content.srv.weight, cur->content.srv.priority, cur->content.srv.port, cur->content.srv.target); break; case RDNS_REQUEST_MX: msg_debug ("got mx %s:%d", cur->content.mx.name, cur->content.mx.priority); break; } cur = cur->next; } } if (-- requests == 0) { session_fin (NULL); } }
static void rdns_regress_callback (struct rdns_reply *reply, void *arg) { struct rdns_reply_entry *entry; char out[INET6_ADDRSTRLEN + 1]; const struct rdns_request_name *name; //llpm_entry_add //printf("In the callback function with lcore = %u\n", rte_lcore_id()); lua_State *tl = spam_tls[rte_lcore_id()]; if (reply->code == RDNS_RC_NOERROR) { entry = reply->entries; while (entry != NULL) { if (entry->type == RDNS_REQUEST_A) { inet_ntop (AF_INET, &entry->content.a.addr, out, sizeof (out)); printf ("%s has A record %s\n", (char *)arg, out); int ip4[4]; sscanf(arg, "%d.%d.%d.%d.zen.spamhaus.org", &ip4[0], &ip4[1], &ip4[2], &ip4[3]); unsigned int ip = (ip4[3] << 24) + (ip4[2] << 16) + (ip4[1] << 8) + ip4[0]; lua_checkstack(tl, 20); /* push functions and arguments */ lua_getglobal(tl, "llpm_entry_add"); /* function to be called */ lua_pushinteger(tl, ip); /* push 1st argument */ lua_pushinteger(tl, 32); /* push 2nd argument */ lua_pushinteger(tl, 1); /* push 2nd argument */ if (lua_pcall(tl, 3, 1, 0) != 0) error(tl, "error running function `llpm_entry_add': %s", lua_tostring(tl, -1)); lua_pop(tl, 1); /* pop returned value */ } else if (entry->type == RDNS_REQUEST_AAAA) { inet_ntop (AF_INET6, &entry->content.aaa.addr, out, sizeof (out)); printf ("%s has AAAA record %s\n", (char *)arg, out); } else if (entry->type == RDNS_REQUEST_SOA) { printf ("%s has SOA record %s %s %u %d %d %d\n", (char *)arg, entry->content.soa.mname, entry->content.soa.admin, entry->content.soa.serial, entry->content.soa.refresh, entry->content.soa.retry, entry->content.soa.expire); } else if (entry->type == RDNS_REQUEST_TLSA) { char *hex, *p; unsigned i; hex = malloc (entry->content.tlsa.datalen * 2 + 1); p = hex; for (i = 0; i < entry->content.tlsa.datalen; i ++) { sprintf (p, "%02x", entry->content.tlsa.data[i]); p += 2; } printf ("%s has TLSA record (%d %d %d) %s\n", (char *)arg, (int)entry->content.tlsa.usage, (int)entry->content.tlsa.selector, (int)entry->content.tlsa.match_type, hex); free (hex); } entry = entry->next; } } else { name = rdns_request_get_name (reply->request, NULL); printf ("Cannot resolve %s record for %s: %s\n", rdns_strtype (name->type), (char *)arg, rdns_strerror (reply->code)); int ip4[4]; sscanf(arg, "%d.%d.%d.%d.zen.spamhaus.org", &ip4[0], &ip4[1], &ip4[2], &ip4[3]); unsigned int ip = (ip4[3] << 24) + (ip4[2] << 16) + (ip4[1] << 8) + ip4[0]; //printf("%d.%d.%d.%d\n", ip4[3], ip4[2], ip4[1], ip4[0]); lua_checkstack(tl, 20); /* push functions and arguments */ lua_getglobal(tl, "llpm_entry_add"); /* function to be called */ lua_pushinteger(tl, ip); /* push 1st argument */ lua_pushinteger(tl, 32); /* push 2nd argument */ lua_pushinteger(tl, 0); /* push 2nd argument */ if (lua_pcall(tl, 3, 1, 0) != 0) error(tl, "error running function `llpm_entry_add': %s", lua_tostring(tl, -1)); lua_pop(tl, 1); /* pop returned value */ } if (--remain_tests == 0 && finished == 1) { printf ("End of test cycle\n"); rdns_resolver_release (reply->resolver); } }
static void rdns_regress_callback (struct rdns_reply *reply, void *arg) { struct rdns_reply_entry *entry; char out[INET6_ADDRSTRLEN + 1]; const struct rdns_request_name *name; if (reply->code == RDNS_RC_NOERROR) { entry = reply->entries; while (entry != NULL) { if (entry->type == RDNS_REQUEST_A) { inet_ntop (AF_INET, &entry->content.a.addr, out, sizeof (out)); printf ("%s has A record %s\n", (char *)arg, out); } else if (entry->type == RDNS_REQUEST_AAAA) { inet_ntop (AF_INET6, &entry->content.aaa.addr, out, sizeof (out)); printf ("%s has AAAA record %s\n", (char *)arg, out); } else if (entry->type == RDNS_REQUEST_SOA) { printf ("%s has SOA record %s %s %u %d %d %d\n", (char *)arg, entry->content.soa.mname, entry->content.soa.admin, entry->content.soa.serial, entry->content.soa.refresh, entry->content.soa.retry, entry->content.soa.expire); } else if (entry->type == RDNS_REQUEST_TLSA) { char *hex, *p; unsigned i; hex = malloc (entry->content.tlsa.datalen * 2 + 1); p = hex; for (i = 0; i < entry->content.tlsa.datalen; i ++) { sprintf (p, "%02x", entry->content.tlsa.data[i]); p += 2; } printf ("%s has TLSA record (%d %d %d) %s\n", (char *)arg, (int)entry->content.tlsa.usage, (int)entry->content.tlsa.selector, (int)entry->content.tlsa.match_type, hex); free (hex); } entry = entry->next; } } else { name = rdns_request_get_name (reply->request, NULL); printf ("Cannot resolve %s record for %s: %s\n", rdns_strtype (name->type), (char *)arg, rdns_strerror (reply->code)); } printf("remain_tests = %d; tot_tests = %d\n", remain_tests, tot_tests); if (--remain_tests == 0 && tot_tests == 0) { printf ("End of test cycle\n"); rdns_resolver_release (reply->resolver); } }