#include #include int main(int argc, char **argv) { if (argc != 3) { printf("Usage: %s server zone\n", argv[0]); return 0; } _addr addr, saddr, local; DnsMessage *q = NULL, *a = NULL; pos_cliresolver res; int sockid; try { txt_to_addr(&local, "local#3001"); txt_to_addr(&addr, argv[1]); sockid = udpcreateserver(&local); while (1) { q = new DnsMessage(); q->OPCODE = OPCODE_NOTIFY; q->questions.push_back(DnsQuestion(argv[2], QTYPE_ANY)); stl_slist(WaitAnswerData) list; stl_slist(WaitAnswerData)::iterator it; printf("Sending Notify Request... "); res.sendmessage(q, &addr, sockid); list.push_front(WaitAnswerData(q->ID, addr)); res.waitanswer(a, list, 5000, it, sockid); printf("... message sent\n"); if (a->RCODE != RCODE_NOERROR) throw PException(true, "Server answered: %s", str_rcode(a->RCODE).c_str()); printf("Monitoring %s...\n", argv[2]); delete q; q = NULL; delete a; a = NULL; res.waitanswer(q, list, 3600000, it, sockid); printf("Zone changed!\n"); /* a = new DnsMessage(); a->OPCODE = OPCODE_NOTIFY; a->RCODE = RCODE_NOERROR; a->AA = true; a->QR = true; a->questions.push_back(*q->questions.begin());*/ res.sendmessage(a, &saddr, sockid); delete q; q = NULL; delete a; a = NULL; } } catch (PException p) { printf("\n*** Fatal error: %s\n", p.message); } if (q) delete q; if (a) delete a; }