Lines Matching refs:tdata

76 static void cleanup_conn_watchers(struct ev_loop* loop, tcpdns_conn_t* tdata) {  in cleanup_conn_watchers()  argument
77 shutdown(tdata->read_watcher->fd, SHUT_RDWR); in cleanup_conn_watchers()
78 close(tdata->read_watcher->fd); in cleanup_conn_watchers()
79 ev_timer_stop(loop, tdata->timeout_watcher); in cleanup_conn_watchers()
80 ev_io_stop(loop, tdata->read_watcher); in cleanup_conn_watchers()
81 if(tdata->write_watcher) ev_io_stop(loop, tdata->write_watcher); in cleanup_conn_watchers()
82 free(tdata->buffer); in cleanup_conn_watchers()
83 free(tdata->timeout_watcher); in cleanup_conn_watchers()
84 free(tdata->read_watcher); in cleanup_conn_watchers()
85 if(tdata->write_watcher) free(tdata->write_watcher); in cleanup_conn_watchers()
86 free(tdata->asin); in cleanup_conn_watchers()
88 if(tdata->ctx->num_conn_watchers-- == tdata->ctx->max_clients) in cleanup_conn_watchers()
89 ev_io_start(loop, tdata->ctx->accept_watcher); in cleanup_conn_watchers()
91 free(tdata); in cleanup_conn_watchers()
98 tcpdns_conn_t* tdata = t->data; in tcp_timeout_handler() local
100 tdata->state == WRITING ? "writing to" : "reading from", dmn_logf_anysin(tdata->asin)); in tcp_timeout_handler()
102 if(tdata->state == WRITING) in tcp_timeout_handler()
103 stats_own_inc(&tdata->ctx->stats->tcp.sendfail); in tcp_timeout_handler()
105 stats_own_inc(&tdata->ctx->stats->tcp.recvfail); in tcp_timeout_handler()
107 cleanup_conn_watchers(loop, tdata); in tcp_timeout_handler()
114 tcpdns_conn_t* tdata = io->data; in tcp_write_handler() local
115 const size_t wanted = tdata->size - tdata->size_done; in tcp_write_handler()
116 const uint8_t* source = tdata->buffer + tdata->size_done; in tcp_write_handler()
121 …bug("TCP DNS send() failed, dropping response to %s: %s", dmn_logf_anysin(tdata->asin), dmn_logf_e… in tcp_write_handler()
122 stats_own_inc(&tdata->ctx->stats->tcp.sendfail); in tcp_write_handler()
123 cleanup_conn_watchers(loop, tdata); in tcp_write_handler()
128 tdata->size_done += (size_t)send_rv; in tcp_write_handler()
129 if(likely(tdata->size_done == tdata->size)) { in tcp_write_handler()
130 ev_timer_again(loop, tdata->timeout_watcher); in tcp_write_handler()
131 tdata->state = READING_INITIAL; in tcp_write_handler()
132 if(tdata->write_watcher) in tcp_write_handler()
133 ev_io_stop(loop, tdata->write_watcher); in tcp_write_handler()
134 ev_io_start(loop, tdata->read_watcher); in tcp_write_handler()
135 tdata->size_done = 0; in tcp_write_handler()
136 tdata->size = 0; in tcp_write_handler()
142 if(!tdata->write_watcher) { in tcp_write_handler()
144 tdata->write_watcher = write_watcher; in tcp_write_handler()
145 write_watcher->data = tdata; in tcp_write_handler()
149 ev_io_start(loop, tdata->write_watcher); in tcp_write_handler()
155 tcpdns_conn_t* tdata = io->data; in tcp_read_handler() local
157 dmn_assert(tdata); in tcp_read_handler()
158 dmn_assert(tdata->state == READING_INITIAL || tdata->state == READING_MORE); in tcp_read_handler()
160 uint8_t* destination = &tdata->buffer[tdata->size_done]; in tcp_read_handler()
162 (tdata->state == READING_INITIAL ? DNS_RECV_SIZE : tdata->size) in tcp_read_handler()
163 - tdata->size_done; in tcp_read_handler()
167 if(unlikely(pktlen == -1 || tdata->size_done)) { in tcp_read_handler()
171 ev_io_start(loop, tdata->read_watcher); in tcp_read_handler()
175 … log_devdebug("TCP DNS recv() from %s: %s", dmn_logf_anysin(tdata->asin), dmn_logf_errno()); in tcp_read_handler()
177 else if(tdata->size_done) { in tcp_read_handler()
178 … log_devdebug("TCP DNS recv() from %s: Unexpected EOF", dmn_logf_anysin(tdata->asin)); in tcp_read_handler()
180 stats_own_inc(&tdata->ctx->stats->tcp.recvfail); in tcp_read_handler()
182 cleanup_conn_watchers(loop, tdata); in tcp_read_handler()
186 tdata->size_done += pktlen; in tcp_read_handler()
188 if(likely(tdata->state == READING_INITIAL)) { in tcp_read_handler()
189 if(likely(tdata->size_done > 1)) { in tcp_read_handler()
190 tdata->size = ((unsigned)tdata->buffer[0] << 8U) + (unsigned)tdata->buffer[1] + 2U; in tcp_read_handler()
191 if(unlikely(tdata->size > DNS_RECV_SIZE)) { in tcp_read_handler()
192 …g_devdebug("Oversized TCP DNS query of length %u from %s", tdata->size, dmn_logf_anysin(tdata->asi… in tcp_read_handler()
193 stats_own_inc(&tdata->ctx->stats->tcp.recvfail); in tcp_read_handler()
194 cleanup_conn_watchers(loop, tdata); in tcp_read_handler()
197 tdata->state = READING_MORE; in tcp_read_handler()
201 if(unlikely(tdata->size_done < tdata->size)) { in tcp_read_handler()
203 ev_io_start(loop, tdata->read_watcher); in tcp_read_handler()
209 if(!tdata->ctx->prcu_online) { in tcp_read_handler()
210 tdata->ctx->prcu_online = true; in tcp_read_handler()
213tdata->size = process_dns_query(tdata->ctx->dnsp_ctx, tdata->ctx->stats, tdata->asin, &tdata->buff… in tcp_read_handler()
214 if(!tdata->size) { in tcp_read_handler()
215 cleanup_conn_watchers(loop, tdata); in tcp_read_handler()
219 ev_io_stop(loop, tdata->read_watcher); in tcp_read_handler()
220 gdnsd_put_una16(htons(tdata->size), tdata->buffer); in tcp_read_handler()
221 tdata->size += 2; in tcp_read_handler()
222 tdata->size_done = 0; in tcp_read_handler()
223 tdata->state = WRITING; in tcp_read_handler()
285 tcpdns_conn_t* tdata = xcalloc(1, sizeof(tcpdns_conn_t)); in accept_handler() local
286 tdata->buffer = xmalloc(gcfg->max_response + 2); in accept_handler()
287 tdata->state = READING_INITIAL; in accept_handler()
288 tdata->asin = asin; in accept_handler()
289 tdata->ctx = ctx; in accept_handler()
292 tdata->read_watcher = read_watcher; in accept_handler()
293 read_watcher->data = tdata; in accept_handler()
298 timeout_watcher->data = tdata; in accept_handler()
299 tdata->timeout_watcher = timeout_watcher; in accept_handler()
308 tcp_read_handler(loop, tdata->read_watcher, EV_READ); in accept_handler()