| 81 | this.request.callback = this.callback.bind(this); |
| 82 | } |
| 83 | callback(message, value, address, port) { |
| 84 | let done = Request.error === message; |
| 85 | |
| 86 | if (Request.responseComplete === message) { |
| 87 | const packet = new Parser(value); |
| 88 | try { |
| 89 | let address; |
| 90 | for (let i = 0, answers = packet.answers; i < answers; i++) { |
| 91 | const answer = packet.answer(i); |
| 92 | if (DNS.RR.A === answer.qtype) { |
| 93 | address = answer.rdata; |
| 94 | break; |
| 95 | } |
| 96 | } |
| 97 | |
| 98 | const request = this.requests[0]; |
| 99 | if (address) |
| 100 | request.onResolved?.call(request.request, address); |
| 101 | else |
| 102 | request.onError?.call(request.request); |
| 103 | } |
| 104 | catch { |
| 105 | } |
| 106 | |
| 107 | done = true; |
| 108 | } |
| 109 | |
| 110 | if (done) { |
| 111 | delete this.request; |
| 112 | this.requests.shift(); |
| 113 | if (this.requests.length) |
| 114 | this.send(this.requests[0]); |
| 115 | } |
| 116 | } |
| 117 | } |
| 118 | Object.freeze(Manager.prototype); |
| 119 | |