dns.c este o reintrare, recursiv și non-blocking DNS resolver bibliotecă care se află într-un fișier sincle .c. De asemenea, lucrari de mare ca un resolver ciot.
API Core construit în jurul pachet DNS actuale; ca generic ca DNS în sine. Acest lucru face ca interogarea și manipularea altele decât A, AAAA, iar PTR mult mai ușor de înregistrări.
Iteratori de înregistrare Restartable cu opțiunea de sortare specificate de utilizator. Iterarea peste MX sau înregistrări SRV în ordine semantică (de exemplu, de preferinta și prioritare) este la fel de simplu ca:
dns_rr_foreach (& rr, pachete, .type = DNS_T_SRV, .sort = & dns_rr_i_order) {
& Nbsp; ...
}
Sau într-o manieră restartable:
comutator (my-> de stat) {
caz 0:
& Nbsp; dns_rr_i_init (& my-> rr_i);
& Nbsp; my-> rr_i.type = DNS_T_SRV;
& Nbsp; my-> rr_i.sort = & dns_rr_i_order;
& Nbsp; my-> de stat ++;
caz 1:
& Nbsp; în timp ce (dns_rr_grep (& rr, 1, si my-> rr_i, my-> pachete, și eroare)) {
& Nbsp; & nbsp; & nbsp; ...
& Nbsp; & nbsp; & nbsp; / * Întoarcere în buclă eveniment * /
& Nbsp; }
}
Suporta interogări "inteligente". Când este activat în resolver de bază, interogări pentru NS, MX, iar înregistrările SRV va încerca întotdeauna să rezolve RDATA numele de gazdă canonic într-o înregistrare A. Gazdele care nu sunt și / sau pentru care în Bailiwick serverul cu autoritate nu oferă lipici sunt rezolvate mod automat și sa întors în pachetul răspuns. Suportate atât ciot și instanțieri de rezolvare recursive. Rezoluția "Smart" este, de asemenea, construit în informațiile adresa (de exemplu, getaddrinfo ()) API.
Randomizat porturi sursă și QIDS.
Non-blocare, re-intrat, pe bază de iterator getaddrinfo () interfață: dns_ai_open (), dns_ai_nextent (), dns_ai_close (). Semantic la fel ca getaddrinfo (), dar, de asemenea, nevoie de un tip de înregistrare. Repeta peste (struct addrinfo) obiecte chiar și atunci când interogarea unui MX, NS, SRV (et al) gazdă. Nu este mai puțin latență a face interogări "inteligente" în acest fel, deoarece orice recursivitate necesară poate fi amânată (și, după toate probabilitățile, nu va fi necesar, deoarece primul gazdă este probabil suficient).
Ce este nou în această versiune:.
- Fix bug în cazul în care dns_srv_print () nu a reușit să imprime un caracter la final NUL
Ce este nou în versiunea 20100813:
- Adăugați socket.c în contrib /. Am fost folosind și dezvoltarea acestui timp de un an sau cam asa ceva în alte proiecte. Conceptual este un înveliș simplu în jurul API socket BSD care se ocupă de căutări DNS și negociere SSL transparent și asincron.
- După crearea unui soclu cu so_open (), apelantul stabilește modurile adecvate, de exemplu, so_connect () și so_starttls (). Apelantul poate aștepta apoi pentru ei pentru a finaliza (vor întoarce EAGAIN dacă este necesar), sau ignora mai convenabil rezultatul și pentru a trece direct la încercarea citește și scrie. Erori din statele anterioare, inclusiv EAGAIN, vor fi returnate pe orice citire sau scrie încercări până când aceste state sunt complete.
- Utilizați so_pollfd () și so_events () la fel ca omologii dns.c. Se întorc, respectiv, corespunzătoare descriptor și evenimente steagurile, în funcție de care stat internă de executare. Cererea trebuie să vă faceți griji cu privire la emiterea de numai operațiuni de citire / scriere logice.
Ce este nou în versiunea 20100709:
- Fix MinGW construi prin adăugarea dns_strsep intern () și DNS_ETIMEDOUT.
Ce este nou în versiunea 20100708:
- Verificați validitatea lungimea returnat de dns_d_expand () înainte trece-l ca lungimea sursă a dns_d_cleave () în interiorul dns_hints_query () altceva am putea face o citire invalid. Datorită Anonymous.
- Tag rel-20100708 (d493a0f7d8f1d67ef312a7ca3e142660895b32d8).
- NOTA: Ai uitat sa scapam DNS_V_REL pentru eliberarea 20100708, și pentru că noua interfață statistici a fost în portbagaj, de asemenea, ar fi lovit DNS_V_API. Prea târziu acum.
Ce este nou în versiunea 20100515:
- Buclă pe servere de nume resolv.conf: options.attempts ori.
- Aplicarea SPF Numele canonic limite de interogare atunci când rulează mecanisme MX și PTR.
- Adăugați dns_p_study () pentru a afla și intervale sectiunea magazin.
- Urmăriți secțiunea variază în dns_p_push ().
- dns_p_merge Refactor () pentru a imbunatati performanta pe pachetele mari.
- Adăugați dns_p_make () pentru malloc'ing și inițializarea un nou pachet.
- Aplicarea limitelor de interogare pe termen SPF. Schimbat structura spf_limits struct în așteptarea executării limite privind MX și PTR interogări gazdă.
- Fix bug în generatorul de instrucțiuni VM pentru indicii salt de mai mult de 255.
Ce este nou în versiunea 20100416:.
- Adăugat suport SSHFP
- Tag rel-20100416 (5bd9963e693510e485a1f081f6c98a95d84debfe).
- 90% rata de trecere pe suita de teste OpenSPF. Necesitatea de a simula timeout pentru a trece testele TempError. Unele dintre testele gramaticale sunt discutabile.
- Adăugat OpenSPF YAML procesor suita de teste. Necesită libyaml.
Ce este nou în versiunea 0.5:
- Fix bug în cazul în care nu ne-am alternative în de la & quot; bind & quot ; metodă de a & quot; Dosarul & quot; metodă dacă steagul recurse a fost dezactivat.
- Generator de căutare poate fi schimbat qname. Astfel, în dns_ai_nextent () canonic qname din răspunsul, nu qname inițial prezentat resolver.
Comentariile nu a fost găsit