Exemplo n.º 1
0
    public void run() {
      while (_datagramSocket != null && _datagramSocket == _socket && !_datagramSocket.isClosed()) {
        try {
          DatagramPacket packet = new DatagramPacket(new byte[MAX_PACKET_SIZE], MAX_PACKET_SIZE);
          _datagramSocket.receive(packet);
          DnsMessage answer = new DnsMessage();
          answer.decode(ByteBuffer.wrap(packet.getData()));
          MsgContainer msgContainer;

          synchronized (_queries) {
            msgContainer = _queries.get(answer.getHeaderSection().getId());
          }

          if (msgContainer != null) {
            synchronized (msgContainer.getQuery()) {
              msgContainer.setAnswer(answer);
              msgContainer.getQuery().notify();
            }
          } else LOG.warn("Drop DNS Answser {}, as can not found a query with same ID", answer);
        } catch (IOException e) {
          close();
        }
      }
      close();
      LOG.debug("DNS acceptor done");
    }