X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/adns/blobdiff_plain/2d5cce6288931ae7fc0b65ad2f51207dc0d1ccdf..2d77da38fe14f5a9ae8d3fc9ee455c5acdf2be1a:/src/event.c diff --git a/src/event.c b/src/event.c index 0115e07..481fb73 100644 --- a/src/event.c +++ b/src/event.c @@ -59,7 +59,7 @@ void adns__tcp_broken(adns_state ads, const char *what, const char *why) { for (qu= ads->timew.head; qu; qu= nqu) { nqu= qu->next; - if (qu->state == query_udp) continue; + if (qu->state == query_tosend) continue; assert(qu->state == query_tcpwait || qu->state == query_tcpsent); qu->state= query_tcpwait; qu->tcpfailed |= (1<tcpstate= server_ok; for (qu= ads->timew.head; qu; qu= nqu) { nqu= qu->next; - if (qu->state == query_udp) continue; + if (qu->state == query_tosend) continue; assert (qu->state == query_tcpwait); adns__query_tcp(qu,now); } @@ -173,16 +173,16 @@ void adns__timeouts(adns_state ads, int act, for (qu= ads->timew.head; qu; qu= nqu) { nqu= qu->next; - if (timercmp(&now,&qu->timeout,<=)) { + if (!timercmp(&now,&qu->timeout,>)) { if (!tv_io) continue; inter_maxtoabs(tv_io,tvbuf,now,qu->timeout); } else { if (!act) continue; LIST_UNLINK(ads->timew,qu); - if (qu->state != query_udp) { + if (qu->state != query_tosend) { adns__query_fail(qu,adns_s_timeout); } else { - adns__query_udp(qu,now); + adns__query_send(qu,now); } nqu= ads->timew.head; } @@ -251,7 +251,7 @@ int adns_processreadable(adns_state ads, int fd, const struct timeval *now) { if (ads->tcprecv.usedtcprecv.buf+skip+2,dgramlen,ads->tcpserver,*now); + adns__procdgram(ads,ads->tcprecv.buf+skip+2,dgramlen,ads->tcpserver,1,*now); skip+= 2+dgramlen; continue; } } @@ -315,7 +315,7 @@ int adns_processreadable(adns_state ads, int fd, const struct timeval *now) { inet_ntoa(udpaddr.sin_addr)); continue; } - adns__procdgram(ads,udpbuf,r,serv,*now); + adns__procdgram(ads,udpbuf,r,serv,0,*now); } } return 0; @@ -526,6 +526,7 @@ static int internal_check(adns_state ads, LIST_UNLINK(ads->output,qu); *answer= qu->answer; if (context_r) *context_r= qu->ctx.ext; + *query_io= qu; free(qu); return 0; }