Lines Matching refs:pend
82 struct pending* pend, sldns_buffer* packet, int timeout);
199 struct pending_tcp* pend = w->outnet->tcp_free; local
201 log_assert(pend);
247 pend->c->ssl = outgoing_ssl_fd(w->outnet->sslctx, s);
248 if(!pend->c->ssl) {
249 pend->c->fd = s;
250 comm_point_close(pend->c);
254 comm_point_tcp_win_bio_cb(pend->c, pend->c->ssl);
256 pend->c->ssl_shake_state = comm_ssl_shake_write;
259 w->next_waiting = (void*)pend;
260 pend->id = LDNS_ID_WIRE(pkt);
261 w->outnet->tcp_free = pend->next_free;
262 pend->next_free = NULL;
263 pend->query = w;
264 pend->c->repinfo.addrlen = w->addrlen;
265 memcpy(&pend->c->repinfo.addr, &w->addr, w->addrlen);
266 sldns_buffer_clear(pend->c->buffer);
267 sldns_buffer_write(pend->c->buffer, pkt, pkt_len);
268 sldns_buffer_flip(pend->c->buffer);
269 pend->c->tcp_is_reading = 0;
270 pend->c->tcp_byte_count = 0;
271 comm_point_start_listening(pend->c, s, -1);
299 struct pending_tcp* pend) argument
301 if(pend->c->ssl) {
303 SSL_shutdown(pend->c->ssl);
304 SSL_free(pend->c->ssl);
305 pend->c->ssl = NULL;
308 comm_point_close(pend->c);
309 pend->next_free = outnet->tcp_free;
310 outnet->tcp_free = pend;
311 waiting_tcp_delete(pend->query);
312 pend->query = NULL;
320 struct pending_tcp* pend = (struct pending_tcp*)arg; local
321 struct outside_network* outnet = pend->query->outnet;
329 LDNS_ID_WIRE(sldns_buffer_begin(c->buffer))!=pend->id) {
332 &pend->query->addr, pend->query->addrlen);
336 fptr_ok(fptr_whitelist_pending_tcp(pend->query->cb));
337 (void)(*pend->query->cb)(c, pend->query->cb_arg, error, reply_info);
338 decomission_pending_tcp(outnet, pend);
368 struct pending* pend; local
372 pend = outnet->udp_wait_first;
373 outnet->udp_wait_first = pend->next_waiting;
374 if(!pend->next_waiting) outnet->udp_wait_last = NULL;
376 sldns_buffer_write(outnet->udp_buff, pend->pkt, pend->pkt_len);
378 free(pend->pkt); /* freeing now makes get_mem correct */
379 pend->pkt = NULL;
380 pend->pkt_len = 0;
381 if(!randomize_and_send_udp(outnet, pend, outnet->udp_buff,
382 pend->timeout)) {
384 if(pend->cb) {
385 fptr_ok(fptr_whitelist_pending_udp(pend->cb));
386 (void)(*pend->cb)(outnet->unused_fds->cp, pend->cb_arg,
389 pending_delete(outnet, pend);
721 struct pending* pend = (struct pending*)node; local
723 pending_delete(outnet, pend);
899 select_id(struct outside_network* outnet, struct pending* pend, argument
903 pend->id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff;
904 LDNS_ID_SET(sldns_buffer_begin(packet), pend->id);
907 pend->node.key = pend;
908 while(!rbtree_insert(outnet->pending, &pend->node)) {
910 pend->id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff;
911 LDNS_ID_SET(sldns_buffer_begin(packet), pend->id);
914 pend->id=99999; /* non existant ID */
919 verbose(VERB_ALGO, "inserted new pending reply id=%4.4x", pend->id);
925 select_ifport(struct outside_network* outnet, struct pending* pend, argument
944 pend->pc = pif->out[my_port];
946 my_if, pend->pc->number);
961 pend->pc = outnet->unused_fds;
962 outnet->unused_fds = pend->pc->next;
965 pend->pc->next = NULL;
966 pend->pc->number = portno;
967 pend->pc->pif = pif;
968 pend->pc->index = pif->inuse;
969 pend->pc->num_outstanding = 0;
970 comm_point_start_listening(pend->pc->cp, fd, -1);
973 pif->out[pif->inuse] = pend->pc;
987 log_assert(pend->pc);
988 pend->pc->num_outstanding++;
994 randomize_and_send_udp(struct outside_network* outnet, struct pending* pend, argument
1000 if(!select_id(outnet, pend, packet)) {
1005 if(addr_is_ip6(&pend->addr, pend->addrlen)) {
1006 if(!select_ifport(outnet, pend,
1010 if(!select_ifport(outnet, pend,
1014 log_assert(pend->pc && pend->pc->cp);
1017 if(!comm_point_send_udp_msg(pend->pc->cp, packet,
1018 (struct sockaddr*)&pend->addr, pend->addrlen)) {
1019 portcomm_loweruse(outnet, pend->pc);
1029 comm_timer_set(pend->timer, &tv);
1038 struct pending* pend = (struct pending*)calloc(1, sizeof(*pend)); local
1039 if(!pend) return NULL;
1040 pend->outnet = outnet;
1041 pend->addrlen = addrlen;
1042 memmove(&pend->addr, addr, addrlen);
1043 pend->cb = cb;
1044 pend->cb_arg = cb_arg;
1045 pend->node.key = pend;
1046 pend->timer = comm_timer_create(outnet->base, pending_udp_timer_cb,
1047 pend);
1048 if(!pend->timer) {
1049 free(pend);
1056 pend->timeout = timeout;
1057 pend->pkt_len = sldns_buffer_limit(packet);
1058 pend->pkt = (uint8_t*)memdup(sldns_buffer_begin(packet),
1059 pend->pkt_len);
1060 if(!pend->pkt) {
1061 comm_timer_delete(pend->timer);
1062 free(pend);
1067 outnet->udp_wait_last->next_waiting = pend;
1069 outnet->udp_wait_first = pend;
1070 outnet->udp_wait_last = pend;
1071 return pend;
1073 if(!randomize_and_send_udp(outnet, pend, packet, timeout)) {
1074 pending_delete(outnet, pend);
1077 return pend;
1102 struct pending_tcp* pend=(struct pending_tcp*)w->next_waiting; local
1103 comm_point_close(pend->c);
1104 pend->query = NULL;
1105 pend->next_free = outnet->tcp_free;
1106 outnet->tcp_free = pend;
1121 struct pending_tcp* pend = outnet->tcp_free; local
1127 + (pend?0:sldns_buffer_limit(packet)));
1150 if(pend) {