• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2000-2004 Brian Wellington (bwelling@xbill.org)
2 
3 package org.xbill.DNS;
4 
5 import java.io.*;
6 
7 /**
8  * Name Authority Pointer Record  - specifies rewrite rule, that when applied
9  * to an existing string will produce a new domain.
10  *
11  * @author Chuck Santos
12  */
13 
14 public class NAPTRRecord extends Record {
15 
16 private static final long serialVersionUID = 5191232392044947002L;
17 
18 private int order, preference;
19 private byte [] flags, service, regexp;
20 private Name replacement;
21 
NAPTRRecord()22 NAPTRRecord() {}
23 
24 Record
getObject()25 getObject() {
26 	return new NAPTRRecord();
27 }
28 
29 /**
30  * Creates an NAPTR Record from the given data
31  * @param order The order of this NAPTR.  Records with lower order are
32  * preferred.
33  * @param preference The preference, used to select between records at the
34  * same order.
35  * @param flags The control aspects of the NAPTRRecord.
36  * @param service The service or protocol available down the rewrite path.
37  * @param regexp The regular/substitution expression.
38  * @param replacement The domain-name to query for the next DNS resource
39  * record, depending on the value of the flags field.
40  * @throws IllegalArgumentException One of the strings has invalid escapes
41  */
42 public
NAPTRRecord(Name name, int dclass, long ttl, int order, int preference, String flags, String service, String regexp, Name replacement)43 NAPTRRecord(Name name, int dclass, long ttl, int order, int preference,
44 	    String flags, String service, String regexp, Name replacement)
45 {
46 	super(name, Type.NAPTR, dclass, ttl);
47 	this.order = checkU16("order", order);
48 	this.preference = checkU16("preference", preference);
49 	try {
50 		this.flags = byteArrayFromString(flags);
51 		this.service = byteArrayFromString(service);
52 		this.regexp = byteArrayFromString(regexp);
53 	}
54 	catch (TextParseException e) {
55 		throw new IllegalArgumentException(e.getMessage());
56 	}
57 	this.replacement = checkName("replacement", replacement);
58 }
59 
60 void
rrFromWire(DNSInput in)61 rrFromWire(DNSInput in) throws IOException {
62 	order = in.readU16();
63 	preference = in.readU16();
64 	flags = in.readCountedString();
65 	service = in.readCountedString();
66 	regexp = in.readCountedString();
67 	replacement = new Name(in);
68 }
69 
70 void
rdataFromString(Tokenizer st, Name origin)71 rdataFromString(Tokenizer st, Name origin) throws IOException {
72 	order = st.getUInt16();
73 	preference = st.getUInt16();
74 	try {
75 		flags = byteArrayFromString(st.getString());
76 		service = byteArrayFromString(st.getString());
77 		regexp = byteArrayFromString(st.getString());
78 	}
79 	catch (TextParseException e) {
80 		throw st.exception(e.getMessage());
81 	}
82 	replacement = st.getName(origin);
83 }
84 
85 /** Converts rdata to a String */
86 String
rrToString()87 rrToString() {
88 	StringBuffer sb = new StringBuffer();
89 	sb.append(order);
90 	sb.append(" ");
91 	sb.append(preference);
92 	sb.append(" ");
93 	sb.append(byteArrayToString(flags, true));
94 	sb.append(" ");
95 	sb.append(byteArrayToString(service, true));
96 	sb.append(" ");
97 	sb.append(byteArrayToString(regexp, true));
98 	sb.append(" ");
99 	sb.append(replacement);
100 	return sb.toString();
101 }
102 
103 /** Returns the order */
104 public int
getOrder()105 getOrder() {
106 	return order;
107 }
108 
109 /** Returns the preference */
110 public int
getPreference()111 getPreference() {
112 	return preference;
113 }
114 
115 /** Returns flags */
116 public String
getFlags()117 getFlags() {
118 	return byteArrayToString(flags, false);
119 }
120 
121 /** Returns service */
122 public String
getService()123 getService() {
124 	return byteArrayToString(service, false);
125 }
126 
127 /** Returns regexp */
128 public String
getRegexp()129 getRegexp() {
130 	return byteArrayToString(regexp, false);
131 }
132 
133 /** Returns the replacement domain-name */
134 public Name
getReplacement()135 getReplacement() {
136 	return replacement;
137 }
138 
139 void
rrToWire(DNSOutput out, Compression c, boolean canonical)140 rrToWire(DNSOutput out, Compression c, boolean canonical) {
141 	out.writeU16(order);
142 	out.writeU16(preference);
143 	out.writeCountedString(flags);
144 	out.writeCountedString(service);
145 	out.writeCountedString(regexp);
146 	replacement.toWire(out, null, canonical);
147 }
148 
149 public Name
getAdditionalName()150 getAdditionalName() {
151 	return replacement;
152 }
153 
154 }
155