Package org.xbill.DNS

Examples of org.xbill.DNS.Message


    public static Query getQuery(final List<Message> replies, Message message) throws UnknownHostException {
        Sender sender = new Sender() {
            @Override
            public void send(byte[] data, InetSocketAddress recipient) throws IOException {
                replies.add(new Message(data));
            }
        };
        DatagramPacket packet = new DatagramPacket(
                message.toWire(), message.toWire().length, InetAddress.getByName("127.0.0.2"), 0);
        return new UDPQuery(packet, sender);
View Full Code Here


        DatagramChannel channel1 = TestUtils.getDatagramChannel(conf1.getPort());
        DatagramChannel channel2 = TestUtils.getDatagramChannel(conf2.getPort());

        // Ask 2 for A rec
        Message query =  Message.newQuery(
                Record.newRecord(new Name("foo.example.com."), Type.A, DClass.IN));
        channel2.write(ByteBuffer.wrap(query.toWire()));

        // Make sure only 2 replies
        latch.await(2, TimeUnit.SECONDS);

        Thread.sleep(100);

        ByteBuffer buf = ByteBuffer.allocate(100);
        channel2.read(buf);

        Message message = new Message(buf.array());
        Record answer = message.getSectionArray(Section.ANSWER)[0];
        String addr = ((ARecord)answer).getAddress().getHostAddress();
        Assert.assertEquals("1.2.3.4", addr);

        Thread.sleep(50); // in case 1 is a bit slow

        buf.clear();
        int count = channel1.read(buf);
        Assert.assertEquals(0, count); // There should be no noutput from 1

        // Ask 1 for A rec
        // Make sure it came from cache
        update.address = "1.2.3.40"; // if our client is asked, would answer thus
        channel1.write(ByteBuffer.wrap(query.toWire()));

        Thread.sleep(50); // make sure our client would have time to answer

        buf.clear();
        channel1.read(buf);
        message = new Message(buf.array());
        answer = message.getSectionArray(Section.ANSWER)[0];
        addr = ((ARecord)answer).getAddress().getHostAddress();
        Assert.assertEquals("1.2.3.4", addr);

        // Shut down frontend 2
        // Make sure frontend 1 is still answering
        frontend2.stop();

        channel1.write(ByteBuffer.wrap(query.toWire()));

        Thread.sleep(50); // make sure our client would have time to answer

        buf.clear();
        channel1.read(buf);
        message = new Message(buf.array());
        answer = message.getSectionArray(Section.ANSWER)[0];
        addr = ((ARecord)answer).getAddress().getHostAddress();
        Assert.assertEquals("1.2.3.4", addr);

        // Start frontend 3
View Full Code Here

        server.port = 5354;
        server.setResolveTaskFactory(factory);
        server.start();

        Record rec = Record.newRecord(new Name("foo.example.com."), Type.A, DClass.IN);
        Message query = Message.newQuery(rec);

        byte[] qdata = query.toWire();
        DatagramPacket packet = new DatagramPacket(qdata, qdata.length, InetAddress.getLocalHost(), 5354);
        DatagramSocket socket = new DatagramSocket();
        socket.send(packet);
        socket.close();
View Full Code Here

        Thread.sleep(50);

        DatagramChannel channel = TestUtils.getDatagramChannel(conf.getPort());

        Message query =  Message.newQuery(
                Record.newRecord(new Name("foo.example.com."), Type.A, DClass.IN));
        channel.write(ByteBuffer.wrap(query.toWire()));

        Thread.sleep(10);

        ByteBuffer buf = ByteBuffer.allocate(100);
        channel.read(buf);

        Message message = new Message(buf.array());
        Record answer = message.getSectionArray(Section.ANSWER)[0];
        Assert.assertEquals(Type.A, answer.getType());
        String addr = ((ARecord)answer).getAddress().getHostAddress();
        Assert.assertEquals("1.2.3.4", addr);

        query =  Message.newQuery(
                Record.newRecord(new Name("foo.example.com."), Type.AAAA, DClass.IN));
        channel.write(ByteBuffer.wrap(query.toWire()));

        Thread.sleep(10);

        buf.clear();
        channel.read(buf);

        message = new Message(buf.array());
        answer = message.getSectionArray(Section.ANSWER)[0];
        Assert.assertEquals(Type.AAAA, answer.getType());
        addr = ((AAAARecord)answer).getAddress().getHostAddress();
        Assert.assertEquals("2002:53fe:a000:0:0:0:0:1", addr);
    }
View Full Code Here

    }

    @Test
    public void interpretUDPQuery() throws Exception {
        Record rec = Record.newRecord(Name.fromString("foo.example.com."), Type.A, DClass.IN);
        Message query = Message.newQuery(rec);

        byte[] qdata = query.toWire();
        DatagramPacket packet = new DatagramPacket(qdata, qdata.length,
                InetAddress.getLoopbackAddress(), 53);

        Query res = new UDPQuery(packet, null);
        res.interpret();
View Full Code Here

      System.out.println("Opennning "+f.getPath()+" ...");
      SequenceFile.Reader reader = new SequenceFile.Reader(fs, f.getPath(), conf);
     
      while(reader.next(key, val))
      {
        Message msg = new Message(val.getBytes());
        System.out.println(key+": "+msg);
        System.out.println("---");
      }
      reader.close();
    }   
View Full Code Here

  }
 
  protected void map(Text key, BytesWritable value, Context context) throws java.io.IOException ,InterruptedException
  {
    try {
      Message msg = new Message(value.getBytes());
     
      int[] sections = {Section.ANSWER, Section.ADDITIONAL, Section.AUTHORITY};
      for(int section : sections)
      {
        for(Record record : msg.getSectionArray(section))
        {
          String json = JsonUtils.toJson(record, ignoreTTL);
          outKey.set(json);
          context.write(outKey, outVal);
        }
View Full Code Here

    // pick a random nameserver
    int index = random.nextInt(resolvers.length);
    String nameserver = nameservers[index];
   
    long elapsed = System.currentTimeMillis();
    Message request;
   
    try {
      requestRecord = Record.newRecord(Name.fromString(req.getName()), req.getRequestType(), req.getDclass());
      request = Message.newQuery(requestRecord);
     
    } catch (TextParseException e) {
      LOG.error("Failed to parse name: "+req);
      ++requestParseFailures;
      return null;
    }
    elapsed = System.currentTimeMillis() - elapsed;
    constructMessageMS += elapsed;
   
    elapsed = System.currentTimeMillis();
    Message response = null;
    try {
      response = resolvers[index].send(request);
      rcodes.add(Rcode.string(response.getRcode()));
      result = new Pair<Record, Message>(requestRecord, response);
    }
    catch(SocketTimeoutException e)
    {
      LOG.error("Timed out when resolving name: "+req+" at nameserver: "+nameserver+", reason: "+e.getMessage());
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

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.