src/jdk.dns.client/share/classes/jdk/dns/client/internal/ResourceRecord.java
branchaefimov-dns-client-branch
changeset 58971 465a15dd6bed
parent 58870 35c438a6d45c
equal deleted inserted replaced
58970:027e4cb87353 58971:465a15dd6bed
    24  */
    24  */
    25 
    25 
    26 package jdk.dns.client.internal;
    26 package jdk.dns.client.internal;
    27 
    27 
    28 import jdk.dns.client.ex.DnsCommunicationException;
    28 import jdk.dns.client.ex.DnsCommunicationException;
    29 import jdk.dns.client.ex.DnsInvalidNameException;
    29 import jdk.dns.client.ex.DnsResolverException;
    30 
    30 
    31 import java.io.IOException;
    31 import java.io.IOException;
    32 import java.nio.charset.StandardCharsets;
    32 import java.nio.charset.StandardCharsets;
    33 
    33 
    34 
    34 
    46      */
    46      */
    47     public static final int TYPE_A = 1;
    47     public static final int TYPE_A = 1;
    48     public static final int TYPE_CNAME = 5;
    48     public static final int TYPE_CNAME = 5;
    49     public static final int TYPE_AAAA = 28;
    49     public static final int TYPE_AAAA = 28;
    50     public static final int TYPE_PTR = 12;
    50     public static final int TYPE_PTR = 12;
    51     static final int QTYPE_STAR = 255;          // query type "*"
    51     public static final int TYPE_ANY = 255;          // query type "*"
    52 
    52 
    53     private static final int TYPE_NS = 2;
    53     private static final int TYPE_NS = 2;
    54     private static final int TYPE_SOA = 6;
    54     private static final int TYPE_SOA = 6;
    55     private static final int TYPE_HINFO = 13;
    55     private static final int TYPE_HINFO = 13;
    56     private static final int TYPE_MX = 15;
    56     private static final int TYPE_MX = 15;
    57     private static final int TYPE_TXT = 16;
    57     private static final int TYPE_TXT = 16;
    58     private static final int TYPE_SRV = 33;
    58     private static final int TYPE_SRV = 33;
    59     private static final int TYPE_NAPTR = 35;
    59     private static final int TYPE_NAPTR = 35;
    60     //static final int QTYPE_AXFR = 252;          // zone transfer //Do not want to support that
       
    61 
    60 
    62     /*
    61     /*
    63      * Mapping from resource record type codes to type name strings.
    62      * Mapping from resource record type codes to type name strings.
    64      */
    63      */
    65     private static final String[] rrTypeNames = {
    64     private static final String[] rrTypeNames = {
   181 
   180 
   182     private static String valueToName(int val, String[] names) {
   181     private static String valueToName(int val, String[] names) {
   183         String name = null;
   182         String name = null;
   184         if ((val > 0) && (val < names.length)) {
   183         if ((val > 0) && (val < names.length)) {
   185             name = names[val];
   184             name = names[val];
   186         } else if (val == QTYPE_STAR) {         // QTYPE_STAR == QCLASS_STAR
   185         } else if (val == TYPE_ANY) {         // QTYPE_STAR == QCLASS_STAR
   187             name = "*";
   186             name = "*";
   188         }
   187         }
   189         if (name == null) {
   188         if (name == null) {
   190             name = Integer.toString(val);
   189             name = Integer.toString(val);
   191         }
   190         }
   194 
   193 
   195     private static int nameToValue(String name, String[] names) {
   194     private static int nameToValue(String name, String[] names) {
   196         if (name.isEmpty()) {
   195         if (name.isEmpty()) {
   197             return -1;                          // invalid name
   196             return -1;                          // invalid name
   198         } else if (name.equals("*")) {
   197         } else if (name.equals("*")) {
   199             return QTYPE_STAR;                  // QTYPE_STAR == QCLASS_STAR
   198             return TYPE_ANY;                  // QTYPE_STAR == QCLASS_STAR
   200         }
   199         }
   201         if (Character.isDigit(name.charAt(0))) {
   200         if (Character.isDigit(name.charAt(0))) {
   202             try {
   201             try {
   203                 return Integer.parseInt(name);
   202                 return Integer.parseInt(name);
   204             } catch (NumberFormatException e) {
   203             } catch (NumberFormatException e) {
   341                         assert pos >= Header.HEADER_SIZE;
   340                         assert pos >= Header.HEADER_SIZE;
   342                     }
   341                     }
   343                 } else
   342                 } else
   344                     throw new IOException("Invalid label type: " + typeAndLen);
   343                     throw new IOException("Invalid label type: " + typeAndLen);
   345             }
   344             }
   346         } catch (IOException | DnsInvalidNameException e) {
   345         } catch (IOException | DnsResolverException e) {
   347             DnsCommunicationException ce = new DnsCommunicationException(
   346             DnsCommunicationException ce = new DnsCommunicationException(
   348                     "DNS error: malformed packet");
   347                     "DNS error: malformed packet");
   349             ce.initCause(e);
   348             ce.initCause(e);
   350             throw ce;
   349             throw ce;
   351         }
   350         }