src/jdk.dns.client/share/classes/jdk/dns/client/internal/DnsClient.java
branchaefimov-dns-client-branch
changeset 58971 465a15dd6bed
parent 58870 35c438a6d45c
child 59101 258033faefc9
--- a/src/jdk.dns.client/share/classes/jdk/dns/client/internal/DnsClient.java	Thu Nov 07 18:44:09 2019 +0000
+++ b/src/jdk.dns.client/share/classes/jdk/dns/client/internal/DnsClient.java	Thu Nov 07 18:46:06 2019 +0000
@@ -27,11 +27,13 @@
 
 import jdk.dns.client.ex.DnsCommunicationException;
 import jdk.dns.client.ex.DnsNameNotFoundException;
-import jdk.dns.client.ex.DnsOperationNotSupportedException;
 import jdk.dns.client.ex.DnsResolverException;
-import jdk.dns.client.ex.DnsServiceUnavailableException;
 
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.net.DatagramPacket;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
@@ -44,7 +46,6 @@
 import java.security.PrivilegedAction;
 import java.security.SecureRandom;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -99,7 +100,6 @@
     private int retries;                // number of UDP retries
 
 
-
     private static final SecureRandom random;
 
     static {
@@ -125,14 +125,13 @@
      * "timeout" is the initial timeout interval (in ms) for queries,
      * and "retries" gives the number of retries per server.
      */
-    public DnsClient(List<String> servers, int timeout, int retries)
-            throws UnknownHostException {
+    public DnsClient(List<String> servers, int timeout, int retries) {
         this.timeout = timeout;
         this.retries = retries;
         var serversList = new ArrayList<InetAddress>();
         var serverPortsList = new ArrayList<Integer>();
 
-        for (String serverString:servers) {
+        for (String serverString : servers) {
 
             // Is optional port given?
             int colon = serverString.indexOf(':',
@@ -155,8 +154,12 @@
             byte[] addr = System.getSecurityManager() == null ?
                     pa.run() : AccessController.doPrivileged(pa);
             if (addr != null) {
-                serversList.add(InetAddress.getByAddress(server, addr));
-                serverPortsList.add(serverPort);
+                try {
+                    serversList.add(InetAddress.getByAddress(server, addr));
+                    serverPortsList.add(serverPort);
+                } catch (UnknownHostException e) {
+                    // Malformed IP address is specified - will ignore it
+                }
             }
         }
         this.servers = Collections.unmodifiableList(serversList);
@@ -257,8 +260,7 @@
                         Header hdr = new Header(msg, msg.length);
 
                         if (auth && !hdr.authoritative) {
-                            caughtException = new DnsNameNotFoundException(
-                                    "DNS response not authoritative");
+                            caughtException = new DnsResolverException("DNS response not authoritative");
                             doNotRetry[i] = true;
                             continue;
                         }
@@ -283,7 +285,7 @@
                                     }
                                     Header hdr2 = new Header(msg2, msg2.length);
                                     if (hdr2.query) {
-                                        throw new DnsCommunicationException(
+                                        throw new DnsResolverException(
                                                 "DNS error: expecting response");
                                     }
                                     checkResponseCode(hdr2);
@@ -362,7 +364,10 @@
             DatagramPacket ipkt = new DatagramPacket(new byte[8000], 8000);
             // Packets may only be sent to or received from this server address
             // TODO: Revisit
-            var pa = (PrivilegedAction<Void>) () -> {dc.socket().connect(server, port); return null;};
+            var pa = (PrivilegedAction<Void>) () -> {
+                dc.socket().connect(server, port);
+                return null;
+            };
             if (System.getSecurityManager() == null) {
                 pa.run();
             } else {
@@ -461,6 +466,7 @@
         Packet pkt = new Packet(pktLen);
 
         short flags = recursion ? Header.RD_BIT : 0;
+        // flags = (short) (flags | Header.CD_BIT | Header.AD_BIT);
 
         pkt.putShort(xid, IDENT_OFFSET);
         pkt.putShort(flags, FLAGS_OFFSET);
@@ -536,7 +542,7 @@
 
         Header hdr = new Header(pkt, pkt.length);
         if (hdr.query) {
-            throw new DnsCommunicationException("DNS error: expecting response");
+            throw new DnsResolverException("DNS error: expecting response");
         }
 
         if (!reqs.containsKey(xid)) { // already received, ignore the response
@@ -562,7 +568,7 @@
 
                 // Check that the type/class/name in the query section of the
                 // response match those in the original query
-                if ((qtype == ResourceRecord.QTYPE_STAR ||
+                if ((qtype == ResourceRecord.TYPE_ANY ||
                         qtype == rr.getType()) &&
                         (qclass == ResourceRecord.QCLASS_STAR ||
                                 qclass == rr.getRrclass()) &&
@@ -632,19 +638,7 @@
                 : "DNS error";
 
         msg += " [response code " + rcode + "]";
-
-        switch (rcode) {
-            case SERVER_FAILURE:
-                throw new DnsServiceUnavailableException(msg);
-            case NAME_ERROR:
-                throw new DnsNameNotFoundException(msg);
-            case NOT_IMPL:
-            case REFUSED:
-                throw new DnsOperationNotSupportedException(msg);
-            case FORMAT_ERROR:
-            default:
-                throw new DnsResolverException(msg);
-        }
+        throw new DnsResolverException(msg);
     }
 
     //-------------------------------------------------------------------------
@@ -663,8 +657,8 @@
 class Tcp {
 
     private final Socket sock;
-    private final java.io.InputStream in;
-    final java.io.OutputStream out;
+    private final InputStream in;
+    final OutputStream out;
     private int timeoutLeft;
 
     Tcp(InetAddress server, int port, int timeout) throws IOException {
@@ -677,8 +671,8 @@
                 throw new SocketTimeoutException();
 
             sock.setTcpNoDelay(true);
-            out = new java.io.BufferedOutputStream(sock.getOutputStream());
-            in = new java.io.BufferedInputStream(sock.getInputStream());
+            out = new BufferedOutputStream(sock.getOutputStream());
+            in = new BufferedInputStream(sock.getInputStream());
         } catch (Exception e) {
             try {
                 sock.close();