Package org.xbill.DNS

Examples of org.xbill.DNS.Message


    @Override
    public void handle(DatagramPacket packet) {
        byte[] data = packet.data().getBytes();
         try {
            Message request = new Message(packet.data().getBytes());
            LOGGER.trace("Received Request {}.", request);
            byte[] response = fabricZoneManager.generateReply(request, data, data.length, null);
            socket.send(new Buffer(response), packet.sender().getHostName(), packet.sender().getPort(), new Handler<AsyncResult<DatagramSocket>>() {
                     @Override
                     public void handle(AsyncResult<DatagramSocket> event) {
View Full Code Here


     * @see org.apache.james.jspf.executor.DNSAsynchLookupService#getRecordsAsynch(org.apache.james.jspf.core.DNSRequest, int, org.apache.james.jspf.executor.IResponseQueue)
     */
    public void getRecordsAsynch(DNSRequest request, int id,
            IResponseQueue responsePool) {
       
        Message message;
        try {
            message = makeQuery(request, id);
            LookupAsynch la = new LookupAsynch(message.getQuestion().getName(), message.getQuestion().getType());
            la.runAsynch(new Runnable() {

                private IResponseQueue responsePool;
                private Integer id;
                private LookupAsynch lookup;
View Full Code Here

            default:
                throw new UnsupportedOperationException("Unknown query type: "+request.getRecordType());
        }
       
        Record question = Record.newRecord(name, type, DClass.ANY);
        Message query = Message.newQuery(question);
        query.getHeader().setID(id);
        return query;
    }
View Full Code Here

            maxLength = 512;

        if (queryOPT != null && (queryOPT.getFlags() & ExtendedFlags.DO) != 0)
            flags = FLAG_DNSSECOK;

        Message response = new Message(query.getHeader().getID());
        response.getHeader().setFlag(Flags.QR);
        if (query.getHeader().getFlag(Flags.RD))
            response.getHeader().setFlag(Flags.RD);
        response.addRecord(queryRecord, Section.QUESTION);

        Name name = queryRecord.getName();
        int type = queryRecord.getType();
        int dclass = queryRecord.getDClass();
        if (!Type.isRR(type) && type != Type.ANY)
            return errorMessage(query, Rcode.NOTIMP);

        byte rcode = addAnswer(response, name, type, dclass, 0, flags);
       
        // TIMEOUT
        if (rcode == -1) {
            return null;
        }
       
        if (rcode != Rcode.NOERROR && rcode != Rcode.NXDOMAIN)
            return errorMessage(query, rcode);

        addAdditional(response, flags);

        if (queryOPT != null) {
            int optflags = (flags == FLAG_DNSSECOK) ? ExtendedFlags.DO : 0;
            OPTRecord opt = new OPTRecord((short) 4096, rcode, (byte) 0,
                    optflags);
            response.addRecord(opt, Section.ADDITIONAL);
        }

        return response.toWire(maxLength);
    }
View Full Code Here

        return response.toWire(maxLength);
    }

    byte[] buildErrorMessage(Header header, int rcode, Record question) {
        Message response = new Message();
        response.setHeader(header);
        for (int i = 0; i < 4; i++)
            response.removeAllRecords(i);
        if (rcode == Rcode.SERVFAIL)
            response.addRecord(question, Section.QUESTION);
        header.setRcode(rcode);
        return response.toWire();
    }
View Full Code Here

    public byte[] errorMessage(Message query, int rcode) {
        return buildErrorMessage(query.getHeader(), rcode, query.getQuestion());
    }

    public byte[] generateReply(byte[] in, int length) {
        Message query;
        byte[] response = null;
        try {
            query = new Message(in);
            response = generateReply(query, length, null);
        } catch (IOException e) {
            response = formerrMessage(in);
        }
        return response;
View Full Code Here

    if (DNS_PORT == (Integer)packet.get(Packet.SRC_PORT) || DNS_PORT == (Integer)packet.get(Packet.DST_PORT)) {
      if (PROTOCOL_TCP.equals(packet.get(Packet.PROTOCOL)) &&
          payload.length > 2) // TODO Support DNS responses with multiple messages (as used for XFRs)
        payload = Arrays.copyOfRange(payload, 2, payload.length); // First two bytes denote the size of the DNS message, ignore them
      try {
        Message msg = new Message(payload);
        Header header = msg.getHeader();
        dnsPacket.put(DnsPacket.QUERYID, header.getID());
        dnsPacket.put(DnsPacket.FLAGS, header.printFlags());
        dnsPacket.put(DnsPacket.QR, header.getFlag(Flags.QR));
        dnsPacket.put(DnsPacket.OPCODE, Opcode.string(header.getOpcode()));
        dnsPacket.put(DnsPacket.RCODE, Rcode.string(header.getRcode()));
        dnsPacket.put(DnsPacket.QUESTION, convertRecordToString(msg.getQuestion()));
        dnsPacket.put(DnsPacket.QNAME, convertRecordOwnerToString(msg.getQuestion()));
        dnsPacket.put(DnsPacket.QTYPE, convertRecordTypeToInt(msg.getQuestion()));
        dnsPacket.put(DnsPacket.ANSWER, convertRecordsToStrings(msg.getSectionArray(Section.ANSWER)));
        dnsPacket.put(DnsPacket.AUTHORITY, convertRecordsToStrings(msg.getSectionArray(Section.AUTHORITY)));
        dnsPacket.put(DnsPacket.ADDITIONAL, convertRecordsToStrings(msg.getSectionArray(Section.ADDITIONAL)));
      } catch (Exception e) {
        // If we cannot decode a DNS packet we ignore it
      }
    }
  }
View Full Code Here

        for (final Iterator iterator = dnsServers.iterator(); iterator.hasNext();) {
          final SRVRecord dnsServer = (SRVRecord) iterator.next();
         
          // try to send msg and fail gracefully if more dns servers are available
          final Name target = dnsServer.getTarget();
          final Message response;
          final InetAddress byName;
          try {
            byName = InetAddress.getByName(target.toString());

            ((SimpleResolver) resolver).setAddress(byName);
            ((SimpleResolver) resolver).setPort(dnsServer.getPort());
           
            response = resolver.send(update);
          } catch (UnknownHostException uhe) {
            if(iterator.hasNext()) {
              continue;
            } else {
              throw new DnsSdDiscoveryException(uhe);
            }
          } catch (EOFException eof) {
            if(iterator.hasNext()) {
              continue;
            } else {
              throw new DnsSdDiscoveryException(eof);
            }
          }
         
          // catch some errors and fall back to the next dnsServer
          if (response.getRcode() != Rcode.NOERROR) {
            if(iterator.hasNext()) {
              continue;
            } else {
              throw DnsSdDiscoveryException.getException(response.getRcode());
            }
          }
        }
      }
    } catch (Exception e) {
View Full Code Here

        Update update = new Update(Name.fromString(DnsSdTestHelper.REG_DOMAIN + "."));
        update.delete(record);
        SimpleResolver resolver = new SimpleResolver(DnsSdTestHelper.DNS_SERVER);
        resolver.setTCP(true);
        resolver.setTSIGKey(new TSIG(DnsSdTestHelper.TSIG_KEY_NAME, DnsSdTestHelper.TSIG_KEY));
        Message response = resolver.send(update);
        int rcode = response.getRcode();
        assertTrue("", rcode == 0);
      }
    }
  }
View Full Code Here

      update.add(record);
    }
    final SimpleResolver resolver = new SimpleResolver(DnsSdTestHelper.DNS_SERVER);
    resolver.setTCP(true);
    resolver.setTSIGKey(new TSIG(DnsSdTestHelper.TSIG_KEY_NAME, DnsSdTestHelper.TSIG_KEY));
    final Message response = resolver.send(update);
    final int rcode = response.getRcode();
    assertTrue("", rcode == 0);
  }
View Full Code Here

TOP

Related Classes of org.xbill.DNS.Message

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.