Search in sources :

Example 1 with DatagramDnsQuery

use of io.netty.handler.codec.dns.DatagramDnsQuery in project netty by netty.

the class DnsQueryContext method query.

void query() {
    final DnsQuestion question = question();
    final InetSocketAddress nameServerAddr = nameServerAddr();
    final DatagramDnsQuery query = new DatagramDnsQuery(null, nameServerAddr, id);
    query.setRecursionDesired(recursionDesired);
    query.addRecord(DnsSection.QUESTION, question);
    for (DnsRecord record : additionals) {
        query.addRecord(DnsSection.ADDITIONAL, record);
    }
    if (optResource != null) {
        query.addRecord(DnsSection.ADDITIONAL, optResource);
    }
    if (logger.isDebugEnabled()) {
        logger.debug("{} WRITE: [{}: {}], {}", parent.ch, id, nameServerAddr, question);
    }
    sendQuery(query);
}
Also used : InetSocketAddress(java.net.InetSocketAddress) DatagramDnsQuery(io.netty.handler.codec.dns.DatagramDnsQuery) DnsQuestion(io.netty.handler.codec.dns.DnsQuestion) DnsRecord(io.netty.handler.codec.dns.DnsRecord)

Example 2 with DatagramDnsQuery

use of io.netty.handler.codec.dns.DatagramDnsQuery in project vert.x by eclipse.

the class DnsClientImpl method lookup.

@SuppressWarnings("unchecked")
private <T> void lookup(String name, Future<List<T>> result, DnsRecordType... types) {
    Objects.requireNonNull(name, "no null name accepted");
    bootstrap.connect(dnsServer).addListener(new RetryChannelFutureListener(result) {

        @Override
        public void onSuccess(ChannelFuture future) throws Exception {
            DatagramDnsQuery query = new DatagramDnsQuery(null, dnsServer, ThreadLocalRandom.current().nextInt());
            for (DnsRecordType type : types) {
                query.addRecord(DnsSection.QUESTION, new DefaultDnsQuestion(name, type, DnsRecord.CLASS_IN));
            }
            future.channel().writeAndFlush(query).addListener(new RetryChannelFutureListener(result) {

                @Override
                public void onSuccess(ChannelFuture future) throws Exception {
                    future.channel().pipeline().addLast(new SimpleChannelInboundHandler<DnsResponse>() {

                        @Override
                        protected void channelRead0(ChannelHandlerContext ctx, DnsResponse msg) throws Exception {
                            DnsResponseCode code = DnsResponseCode.valueOf(msg.code().intValue());
                            if (code == DnsResponseCode.NOERROR) {
                                int count = msg.count(DnsSection.ANSWER);
                                List<T> records = new ArrayList<>(count);
                                for (int idx = 0; idx < count; idx++) {
                                    DnsRecord a = msg.recordAt(DnsSection.ANSWER, idx);
                                    T record = RecordDecoder.decode(a);
                                    if (isRequestedType(a.type(), types)) {
                                        records.add(record);
                                    }
                                }
                                if (records.size() > 0 && (records.get(0) instanceof MxRecordImpl || records.get(0) instanceof SrvRecordImpl)) {
                                    Collections.sort((List) records);
                                }
                                setResult(result, records);
                            } else {
                                setFailure(result, new DnsException(code));
                            }
                            ctx.close();
                        }

                        private boolean isRequestedType(DnsRecordType dnsRecordType, DnsRecordType[] types) {
                            for (DnsRecordType t : types) {
                                if (t.equals(dnsRecordType)) {
                                    return true;
                                }
                            }
                            return false;
                        }

                        @Override
                        public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
                            setFailure(result, cause);
                            ctx.close();
                        }
                    });
                }
            });
        }
    });
}
Also used : ChannelFuture(io.netty.channel.ChannelFuture) DnsRecordType(io.netty.handler.codec.dns.DnsRecordType) ChannelHandlerContext(io.netty.channel.ChannelHandlerContext) DnsResponseCode(io.vertx.core.dns.DnsResponseCode) DnsException(io.vertx.core.dns.DnsException) UnknownHostException(java.net.UnknownHostException) DnsException(io.vertx.core.dns.DnsException) DatagramDnsQuery(io.netty.handler.codec.dns.DatagramDnsQuery) DnsResponse(io.netty.handler.codec.dns.DnsResponse) ArrayList(java.util.ArrayList) List(java.util.List) DnsRecord(io.netty.handler.codec.dns.DnsRecord) DefaultDnsQuestion(io.netty.handler.codec.dns.DefaultDnsQuestion)

Aggregations

DatagramDnsQuery (io.netty.handler.codec.dns.DatagramDnsQuery)2 DnsRecord (io.netty.handler.codec.dns.DnsRecord)2 ChannelFuture (io.netty.channel.ChannelFuture)1 ChannelHandlerContext (io.netty.channel.ChannelHandlerContext)1 DefaultDnsQuestion (io.netty.handler.codec.dns.DefaultDnsQuestion)1 DnsQuestion (io.netty.handler.codec.dns.DnsQuestion)1 DnsRecordType (io.netty.handler.codec.dns.DnsRecordType)1 DnsResponse (io.netty.handler.codec.dns.DnsResponse)1 DnsException (io.vertx.core.dns.DnsException)1 DnsResponseCode (io.vertx.core.dns.DnsResponseCode)1 InetSocketAddress (java.net.InetSocketAddress)1 UnknownHostException (java.net.UnknownHostException)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1