Lines Matching refs:rp

229   struct resolve *rp;  in allocresolve()  local
231 rp = nmalloc(sizeof *rp); in allocresolve()
232 EvangelineBzero(rp, sizeof(struct resolve)); in allocresolve()
233 return rp; in allocresolve()
272 struct resolve *rp; in linkresolveid() local
276 rp = idbash[bashnum]; in linkresolveid()
277 if (rp) { in linkresolveid()
278 while ((rp->nextid) && (addrp->id > rp->nextid->id)) in linkresolveid()
279 rp = rp->nextid; in linkresolveid()
280 while ((rp->previousid) && (addrp->id < rp->previousid->id)) in linkresolveid()
281 rp = rp->previousid; in linkresolveid()
282 if (rp->id < addrp->id) { in linkresolveid()
283 addrp->previousid = rp; in linkresolveid()
284 addrp->nextid = rp->nextid; in linkresolveid()
285 if (rp->nextid) in linkresolveid()
286 rp->nextid->previousid = addrp; in linkresolveid()
287 rp->nextid = addrp; in linkresolveid()
288 } else if (rp->id > addrp->id) { in linkresolveid()
289 addrp->previousid = rp->previousid; in linkresolveid()
290 addrp->nextid = rp; in linkresolveid()
291 if (rp->previousid) in linkresolveid()
292 rp->previousid->nextid = addrp; in linkresolveid()
293 rp->previousid = addrp; in linkresolveid()
303 static void unlinkresolveid(struct resolve *rp) in unlinkresolveid() argument
307 bashnum = getidbash(rp->id); in unlinkresolveid()
308 if (idbash[bashnum] == rp) { in unlinkresolveid()
309 if (rp->previousid) in unlinkresolveid()
310 idbash[bashnum] = rp->previousid; in unlinkresolveid()
312 idbash[bashnum] = rp->nextid; in unlinkresolveid()
314 if (rp->nextid) in unlinkresolveid()
315 rp->nextid->previousid = rp->previousid; in unlinkresolveid()
316 if (rp->previousid) in unlinkresolveid()
317 rp->previousid->nextid = rp->nextid; in unlinkresolveid()
324 struct resolve *rp; in linkresolvehost() local
329 rp = hostbash[bashnum]; in linkresolvehost()
330 if (rp) { in linkresolvehost()
331 while ((rp->nexthost) && in linkresolvehost()
332 (EvangelineStrcasecmp(addrp->hostn, rp->nexthost->hostn) < 0)) in linkresolvehost()
333 rp = rp->nexthost; in linkresolvehost()
334 while ((rp->previoushost) && in linkresolvehost()
335 (EvangelineStrcasecmp(addrp->hostn, rp->previoushost->hostn) > 0)) in linkresolvehost()
336 rp = rp->previoushost; in linkresolvehost()
337 ret = EvangelineStrcasecmp(addrp->hostn, rp->hostn); in linkresolvehost()
339 addrp->previoushost = rp; in linkresolvehost()
340 addrp->nexthost = rp->nexthost; in linkresolvehost()
341 if (rp->nexthost) in linkresolvehost()
342 rp->nexthost->previoushost = addrp; in linkresolvehost()
343 rp->nexthost = addrp; in linkresolvehost()
345 addrp->previoushost = rp->previoushost; in linkresolvehost()
346 addrp->nexthost = rp; in linkresolvehost()
347 if (rp->previoushost) in linkresolvehost()
348 rp->previoushost->nexthost = addrp; in linkresolvehost()
349 rp->previoushost = addrp; in linkresolvehost()
359 static void unlinkresolvehost(struct resolve *rp) in unlinkresolvehost() argument
363 bashnum = gethostbash(rp->hostn); in unlinkresolvehost()
364 if (hostbash[bashnum] == rp) { in unlinkresolvehost()
365 if (rp->previoushost) in unlinkresolvehost()
366 hostbash[bashnum] = rp->previoushost; in unlinkresolvehost()
368 hostbash[bashnum] = rp->nexthost; in unlinkresolvehost()
370 if (rp->nexthost) in unlinkresolvehost()
371 rp->nexthost->previoushost = rp->previoushost; in unlinkresolvehost()
372 if (rp->previoushost) in unlinkresolvehost()
373 rp->previoushost->nexthost = rp->nexthost; in unlinkresolvehost()
374 nfree(rp->hostn); in unlinkresolvehost()
381 struct resolve *rp; in linkresolveip() local
385 rp = ipbash[bashnum]; in linkresolveip()
386 if (rp) { in linkresolveip()
387 while ((rp->nextip) && (addrp->ip > rp->nextip->ip)) in linkresolveip()
388 rp = rp->nextip; in linkresolveip()
389 while ((rp->previousip) && (addrp->ip < rp->previousip->ip)) in linkresolveip()
390 rp = rp->previousip; in linkresolveip()
391 if (rp->ip < addrp->ip) { in linkresolveip()
392 addrp->previousip = rp; in linkresolveip()
393 addrp->nextip = rp->nextip; in linkresolveip()
394 if (rp->nextip) in linkresolveip()
395 rp->nextip->previousip = addrp; in linkresolveip()
396 rp->nextip = addrp; in linkresolveip()
397 } else if (rp->ip > addrp->ip) { in linkresolveip()
398 addrp->previousip = rp->previousip; in linkresolveip()
399 addrp->nextip = rp; in linkresolveip()
400 if (rp->previousip) in linkresolveip()
401 rp->previousip->nextip = addrp; in linkresolveip()
402 rp->previousip = addrp; in linkresolveip()
412 static void unlinkresolveip(struct resolve *rp) in unlinkresolveip() argument
416 bashnum = getipbash(rp->ip); in unlinkresolveip()
417 if (ipbash[bashnum] == rp) { in unlinkresolveip()
418 if (rp->previousip) in unlinkresolveip()
419 ipbash[bashnum] = rp->previousip; in unlinkresolveip()
421 ipbash[bashnum] = rp->nextip; in unlinkresolveip()
423 if (rp->nextip) in unlinkresolveip()
424 rp->nextip->previousip = rp->previousip; in unlinkresolveip()
425 if (rp->previousip) in unlinkresolveip()
426 rp->previousip->nextip = rp->nextip; in unlinkresolveip()
432 static void linkresolve(struct resolve *rp) in linkresolve() argument
438 while ((irp->next) && (rp->expiretime >= irp->expiretime)) in linkresolve()
440 if (rp->expiretime >= irp->expiretime) { in linkresolve()
441 rp->next = NULL; in linkresolve()
442 rp->previous = irp; in linkresolve()
443 irp->next = rp; in linkresolve()
445 rp->previous = irp->previous; in linkresolve()
446 rp->next = irp; in linkresolve()
448 irp->previous->next = rp; in linkresolve()
450 expireresolves = rp; in linkresolve()
451 irp->previous = rp; in linkresolve()
454 rp->next = NULL; in linkresolve()
455 rp->previous = NULL; in linkresolve()
456 expireresolves = rp; in linkresolve()
462 static void untieresolve(struct resolve *rp) in untieresolve() argument
464 if (rp->previous) in untieresolve()
465 rp->previous->next = rp->next; in untieresolve()
467 expireresolves = rp->next; in untieresolve()
468 if (rp->next) in untieresolve()
469 rp->next->previous = rp->previous; in untieresolve()
475 static void unlinkresolve(struct resolve *rp) in unlinkresolve() argument
478 untieresolve(rp); /* Not really needed. Left in to be on the in unlinkresolve()
480 unlinkresolveid(rp); in unlinkresolve()
481 unlinkresolveip(rp); in unlinkresolve()
482 if (rp->hostn) in unlinkresolve()
483 unlinkresolvehost(rp); in unlinkresolve()
484 nfree(rp); in unlinkresolve()
491 struct resolve *rp; in findid() local
495 rp = idbash[bashnum]; in findid()
496 if (rp) { in findid()
497 while ((rp->nextid) && (id >= rp->nextid->id)) in findid()
498 rp = rp->nextid; in findid()
499 while ((rp->previousid) && (id <= rp->previousid->id)) in findid()
500 rp = rp->previousid; in findid()
501 if (id == rp->id) { in findid()
502 idbash[bashnum] = rp; in findid()
503 return rp; in findid()
507 return rp; /* NULL */ in findid()
514 struct resolve *rp; in findhost() local
518 rp = hostbash[bashnum]; in findhost()
519 if (rp) { in findhost()
520 while ((rp->nexthost) && in findhost()
521 (EvangelineStrcasecmp(hostn, rp->nexthost->hostn) >= 0)) in findhost()
522 rp = rp->nexthost; in findhost()
523 while ((rp->previoushost) && in findhost()
524 (EvangelineStrcasecmp(hostn, rp->previoushost->hostn) <= 0)) in findhost()
525 rp = rp->previoushost; in findhost()
526 if (EvangelineStrcasecmp(hostn, rp->hostn)) in findhost()
529 hostbash[bashnum] = rp; in findhost()
530 return rp; in findhost()
533 return rp; /* NULL */ in findhost()
540 struct resolve *rp; in findip() local
544 rp = ipbash[bashnum]; in findip()
545 if (rp) { in findip()
546 while ((rp->nextip) && (ip >= rp->nextip->ip)) in findip()
547 rp = rp->nextip; in findip()
548 while ((rp->previousip) && (ip <= rp->previousip->ip)) in findip()
549 rp = rp->previousip; in findip()
550 if (ip == rp->ip) { in findip()
551 ipbash[bashnum] = rp; in findip()
552 return rp; in findip()
556 return rp; /* NULL */ in findip()
587 static void resendrequest(struct resolve *rp, int type) in resendrequest() argument
589 rp->sends++; in resendrequest()
591 rp->expiretime = now + (RES_RETRYDELAY * rp->sends); in resendrequest()
593 linkresolve(rp); in resendrequest()
596 dorequest(rp->hostn, type, rp->id); in resendrequest()
597 ddebug1(RES_MSG "Sent domain lookup request for \"%s\".", rp->hostn); in resendrequest()
600 ((u_8bit_t *) & rp->ip)[3], in resendrequest()
601 ((u_8bit_t *) & rp->ip)[2], in resendrequest()
602 ((u_8bit_t *) & rp->ip)[1], ((u_8bit_t *) & rp->ip)[0]); in resendrequest()
603 dorequest(tempstring, type, rp->id); in resendrequest()
604 ddebug1(RES_MSG "Sent domain lookup request for \"%s\".", iptostr(rp->ip)); in resendrequest()
610 static void sendrequest(struct resolve *rp, int type) in sendrequest() argument
617 rp->id = (u_16bit_t) idseed; in sendrequest()
618 } while (findid(rp->id)); in sendrequest()
619 linkresolveid(rp); /* Add id to id hash table */ in sendrequest()
620 resendrequest(rp, type); /* Send request */ in sendrequest()
626 static void failrp(struct resolve *rp, int type) in failrp() argument
628 if (rp->state == STATE_FINISHED) in failrp()
630 rp->expiretime = now + RES_FAILEDDELAY; in failrp()
631 rp->state = STATE_FAILED; in failrp()
634 untieresolve(rp); in failrp()
635 linkresolve(rp); in failrp()
638 dns_event_failure(rp, type); in failrp()
644 static void passrp(struct resolve *rp, long ttl, int type) in passrp() argument
646 rp->state = STATE_FINISHED; in passrp()
650 rp->expiretime = now + (time_t) ttl; in passrp()
652 rp->expiretime = now + RES_MAX_TTL; in passrp()
655 untieresolve(rp); in passrp()
656 linkresolve(rp); in passrp()
658 ddebug1(RES_MSG "Lookup successful: %s", rp->hostn); in passrp()
659 dns_event_success(rp, type); in passrp()
666 struct resolve *rp; in parserespacket() local
689 rp = findid(hp->id); in parserespacket()
690 if (!rp) in parserespacket()
692 if ((rp->state == STATE_FINISHED) || (rp->state == STATE_FAILED)) in parserespacket()
726 switch (rp->state) { /* Construct expected query reply */ in parserespacket()
730 ((u_8bit_t *) & rp->ip)[3], in parserespacket()
731 ((u_8bit_t *) & rp->ip)[2], in parserespacket()
732 ((u_8bit_t *) & rp->ip)[1], ((u_8bit_t *) & rp->ip)[0]); in parserespacket()
735 strncpy(stackstring, rp->hostn, 1024); in parserespacket()
764 if (!IS_PTR(rp)) { in parserespacket()
771 if (!IS_A(rp)) { in parserespacket()
840 my_memcpy(&rp->ip, (IP *) c, sizeof(IP)); in parserespacket()
841 linkresolveip(rp); in parserespacket()
842 passrp(rp, ttl, T_A); in parserespacket()
855 failrp(rp, T_PTR); in parserespacket()
858 if (!rp->hostn) { in parserespacket()
859 rp->hostn = nmalloc(strlen(namestring) + 1); in parserespacket()
860 strcpy(rp->hostn, namestring); in parserespacket()
861 linkresolvehost(rp); in parserespacket()
862 passrp(rp, ttl, T_PTR); in parserespacket()
899 switch (rp->state) { in parserespacket()
901 failrp(rp, T_PTR); in parserespacket()
904 failrp(rp, T_A); in parserespacket()
907 failrp(rp, 0); in parserespacket()
957 struct resolve *rp, *nextrp; in dns_check_expires() local
960 for (rp = expireresolves; (rp) && (now >= rp->expiretime); rp = nextrp) { in dns_check_expires()
961 nextrp = rp->next; in dns_check_expires()
962 untieresolve(rp); in dns_check_expires()
963 switch (rp->state) { in dns_check_expires()
968 nonull(rp->hostn), iptostr(rp->ip), rp->state, rp->expiretime); in dns_check_expires()
969 unlinkresolve(rp); in dns_check_expires()
972 if (rp->sends <= RES_MAXSENDS) { in dns_check_expires()
973 ddebug1(RES_MSG "Resend #%d for \"PTR\" query...", rp->sends - 1); in dns_check_expires()
974 resendrequest(rp, T_PTR); in dns_check_expires()
977 failrp(rp, T_PTR); in dns_check_expires()
981 if (rp->sends <= RES_MAXSENDS) { in dns_check_expires()
982 ddebug1(RES_MSG "Resend #%d for \"A\" query...", rp->sends - 1); in dns_check_expires()
983 resendrequest(rp, T_A); in dns_check_expires()
986 failrp(rp, T_A); in dns_check_expires()
990 ddebug1(RES_WRN "Unknown request state %d. Request expired.", rp->state); in dns_check_expires()
991 failrp(rp, 0); in dns_check_expires()
1000 struct resolve *rp; in dns_lookup() local
1003 if ((rp = findip(ip))) { in dns_lookup()
1004 if (rp->state == STATE_FINISHED || rp->state == STATE_FAILED) { in dns_lookup()
1005 if (rp->state == STATE_FINISHED && rp->hostn) { in dns_lookup()
1007 iptostr(ip), rp->hostn); in dns_lookup()
1008 dns_event_success(rp, T_PTR); in dns_lookup()
1011 dns_event_failure(rp, T_PTR); in dns_lookup()
1018 rp = allocresolve(); in dns_lookup()
1019 rp->state = STATE_PTRREQ; in dns_lookup()
1020 rp->sends = 1; in dns_lookup()
1021 rp->ip = ip; in dns_lookup()
1022 linkresolveip(rp); in dns_lookup()
1023 sendrequest(rp, T_PTR); in dns_lookup()
1030 struct resolve *rp; in dns_forward() local
1040 if ((rp = findhost(hostn))) { in dns_forward()
1041 if (rp->state == STATE_FINISHED || rp->state == STATE_FAILED) { in dns_forward()
1042 if (rp->state == STATE_FINISHED && rp->ip) { in dns_forward()
1044 iptostr(rp->ip)); in dns_forward()
1045 dns_event_success(rp, T_A); in dns_forward()
1048 dns_event_failure(rp, T_A); in dns_forward()
1054 rp = allocresolve(); in dns_forward()
1055 rp->state = STATE_AREQ; in dns_forward()
1056 rp->sends = 1; in dns_forward()
1057 rp->hostn = nmalloc(strlen(hostn) + 1); in dns_forward()
1058 strcpy(rp->hostn, hostn); in dns_forward()
1059 linkresolvehost(rp); in dns_forward()
1060 sendrequest(rp, T_A); in dns_forward()