Lines Matching defs:pend

81 static int randomize_and_send_udp(struct pending* pend, sldns_buffer* packet,
203 struct pending_tcp* pend = w->outnet->tcp_free;
205 log_assert(pend);
250 pend->c->ssl = outgoing_ssl_fd(w->outnet->sslctx, s);
251 if(!pend->c->ssl) {
252 pend->c->fd = s;
253 comm_point_close(pend->c);
257 comm_point_tcp_win_bio_cb(pend->c, pend->c->ssl);
259 pend->c->ssl_shake_state = comm_ssl_shake_write;
262 w->next_waiting = (void*)pend;
263 pend->id = LDNS_ID_WIRE(pkt);
265 w->outnet->tcp_free = pend->next_free;
266 pend->next_free = NULL;
267 pend->query = w;
268 pend->c->repinfo.addrlen = w->addrlen;
269 memcpy(&pend->c->repinfo.addr, &w->addr, w->addrlen);
270 sldns_buffer_clear(pend->c->buffer);
271 sldns_buffer_write(pend->c->buffer, pkt, pkt_len);
272 sldns_buffer_flip(pend->c->buffer);
273 pend->c->tcp_is_reading = 0;
274 pend->c->tcp_byte_count = 0;
275 comm_point_start_listening(pend->c, s, -1);
303 struct pending_tcp* pend)
305 if(pend->c->ssl) {
307 SSL_shutdown(pend->c->ssl);
308 SSL_free(pend->c->ssl);
309 pend->c->ssl = NULL;
312 comm_point_close(pend->c);
313 pend->next_free = outnet->tcp_free;
314 outnet->tcp_free = pend;
315 waiting_tcp_delete(pend->query);
316 pend->query = NULL;
324 struct pending_tcp* pend = (struct pending_tcp*)arg;
325 struct outside_network* outnet = pend->query->outnet;
333 LDNS_ID_WIRE(sldns_buffer_begin(c->buffer))!=pend->id) {
336 &pend->query->addr, pend->query->addrlen);
340 fptr_ok(fptr_whitelist_pending_tcp(pend->query->cb));
341 (void)(*pend->query->cb)(c, pend->query->cb_arg, error, reply_info);
342 decomission_pending_tcp(outnet, pend);
372 struct pending* pend;
376 pend = outnet->udp_wait_first;
377 outnet->udp_wait_first = pend->next_waiting;
378 if(!pend->next_waiting) outnet->udp_wait_last = NULL;
380 sldns_buffer_write(outnet->udp_buff, pend->pkt, pend->pkt_len);
382 free(pend->pkt); /* freeing now makes get_mem correct */
383 pend->pkt = NULL;
384 pend->pkt_len = 0;
385 if(!randomize_and_send_udp(pend, outnet->udp_buff,
386 pend->timeout)) {
388 if(pend->cb) {
389 fptr_ok(fptr_whitelist_pending_udp(pend->cb));
390 (void)(*pend->cb)(outnet->unused_fds->cp, pend->cb_arg,
393 pending_delete(outnet, pend);
731 struct pending* pend = (struct pending*)node;
733 pending_delete(outnet, pend);
909 select_id(struct outside_network* outnet, struct pending* pend,
913 pend->id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff;
914 LDNS_ID_SET(sldns_buffer_begin(packet), pend->id);
917 pend->node.key = pend;
918 while(!rbtree_insert(outnet->pending, &pend->node)) {
920 pend->id = ((unsigned)ub_random(outnet->rnd)>>8) & 0xffff;
921 LDNS_ID_SET(sldns_buffer_begin(packet), pend->id);
924 pend->id=99999; /* non existant ID */
929 verbose(VERB_ALGO, "inserted new pending reply id=%4.4x", pend->id);
935 select_ifport(struct outside_network* outnet, struct pending* pend,
954 pend->pc = pif->out[my_port];
956 my_if, pend->pc->number);
971 pend->pc = outnet->unused_fds;
972 outnet->unused_fds = pend->pc->next;
975 pend->pc->next = NULL;
976 pend->pc->number = portno;
977 pend->pc->pif = pif;
978 pend->pc->index = pif->inuse;
979 pend->pc->num_outstanding = 0;
980 comm_point_start_listening(pend->pc->cp, fd, -1);
983 pif->out[pif->inuse] = pend->pc;
997 log_assert(pend->pc);
998 pend->pc->num_outstanding++;
1004 randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout)
1007 struct outside_network* outnet = pend->sq->outnet;
1010 if(!select_id(outnet, pend, packet)) {
1015 if(addr_is_ip6(&pend->addr, pend->addrlen)) {
1016 if(!select_ifport(outnet, pend,
1020 if(!select_ifport(outnet, pend,
1024 log_assert(pend->pc && pend->pc->cp);
1027 if(!comm_point_send_udp_msg(pend->pc->cp, packet,
1028 (struct sockaddr*)&pend->addr, pend->addrlen)) {
1029 portcomm_loweruse(outnet, pend->pc);
1039 comm_timer_set(pend->timer, &tv);
1045 dt_msg_send_outside_query(outnet->dtenv, &pend->addr, comm_udp,
1046 pend->sq->zone, pend->sq->zonelen, packet);
1055 struct pending* pend = (struct pending*)calloc(1, sizeof(*pend));
1056 if(!pend) return NULL;
1057 pend->outnet = sq->outnet;
1058 pend->sq = sq;
1059 pend->addrlen = sq->addrlen;
1060 memmove(&pend->addr, &sq->addr, sq->addrlen);
1061 pend->cb = cb;
1062 pend->cb_arg = cb_arg;
1063 pend->node.key = pend;
1064 pend->timer = comm_timer_create(sq->outnet->base, pending_udp_timer_cb,
1065 pend);
1066 if(!pend->timer) {
1067 free(pend);
1074 pend->timeout = timeout;
1075 pend->pkt_len = sldns_buffer_limit(packet);
1076 pend->pkt = (uint8_t*)memdup(sldns_buffer_begin(packet),
1077 pend->pkt_len);
1078 if(!pend->pkt) {
1079 comm_timer_delete(pend->timer);
1080 free(pend);
1085 sq->outnet->udp_wait_last->next_waiting = pend;
1087 sq->outnet->udp_wait_first = pend;
1088 sq->outnet->udp_wait_last = pend;
1089 return pend;
1091 if(!randomize_and_send_udp(pend, packet, timeout)) {
1092 pending_delete(sq->outnet, pend);
1095 return pend;
1110 struct pending_tcp* pend=(struct pending_tcp*)w->next_waiting;
1111 comm_point_close(pend->c);
1112 pend->query = NULL;
1113 pend->next_free = outnet->tcp_free;
1114 outnet->tcp_free = pend;
1128 struct pending_tcp* pend = sq->outnet->tcp_free;
1134 + (pend?0:sldns_buffer_limit(packet)));
1157 if(pend) {