Skip to content

Commit 4c9747f

Browse files
author
bwelling
committed
ignoretruncation and edns
git-svn-id: http://svn.code.sf.net/p/dnsjava/code/trunk@144 c76caeb1-94fd-44dd-870f-0c9d92034fc1
1 parent b4cb159 commit 4c9747f

5 files changed

Lines changed: 77 additions & 37 deletions

File tree

DNS/Resolver.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ public class Resolver {
1414

1515
InetAddress addr;
1616
int port = PORT;
17-
boolean useTCP, useEDNS;
17+
boolean useTCP, ignoreTruncation;
18+
int EDNSlevel = -1;
1819
TSIG tsig;
1920
int timeoutValue = 60 * 1000;
2021

@@ -48,8 +49,13 @@ public class Resolver {
4849
}
4950

5051
public void
51-
setEDNS(boolean flag) {
52-
this.useEDNS = flag;
52+
setIgnoreTruncation(boolean flag) {
53+
this.ignoreTruncation = flag;
54+
}
55+
56+
public void
57+
setEDNS(int level) {
58+
this.EDNSlevel = level;
5359
}
5460

5561
public void
@@ -121,6 +127,7 @@ public class Resolver {
121127
Message response;
122128
DatagramSocket s;
123129
DatagramPacket dp;
130+
int udpLength = 512;
124131

125132
try {
126133
s = new DatagramSocket();
@@ -130,11 +137,13 @@ public class Resolver {
130137
return null;
131138
}
132139

133-
if (useEDNS)
134-
query.addRecord(Section.ADDITIONAL, EDNS.newOPT(1280));
140+
if (EDNSlevel >= 0) {
141+
udpLength = 1280;
142+
query.addRecord(Section.ADDITIONAL, EDNS.newOPT(udpLength));
143+
}
135144

136145
if (tsig != null)
137-
tsig.apply(query);
146+
tsig.apply(query, null);
138147

139148

140149
out = query.toWire();
@@ -144,7 +153,7 @@ public class Resolver {
144153

145154
s.send(new DatagramPacket(out, out.length, addr, port));
146155

147-
dp = new DatagramPacket(new byte[512], 512);
156+
dp = new DatagramPacket(new byte[udpLength], udpLength);
148157
s.setSoTimeout(timeoutValue);
149158
try {
150159
s.receive(dp);
@@ -163,7 +172,7 @@ public class Resolver {
163172
}
164173

165174
s.close();
166-
if (response.getHeader().getFlag(Flags.TC))
175+
if (response.getHeader().getFlag(Flags.TC) && !ignoreTruncation)
167176
return sendTCP(query, out);
168177
else
169178
return response;
@@ -188,7 +197,7 @@ public class Resolver {
188197
}
189198

190199
if (tsig != null)
191-
tsig.apply(query);
200+
tsig.apply(query, null);
192201

193202
out = query.toWire();
194203
new DataOutputStream(s.getOutputStream()).writeShort(out.length);

DNS/SimpleResolver.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ public class Resolver {
1414

1515
InetAddress addr;
1616
int port = PORT;
17-
boolean useTCP, useEDNS;
17+
boolean useTCP, ignoreTruncation;
18+
int EDNSlevel = -1;
1819
TSIG tsig;
1920
int timeoutValue = 60 * 1000;
2021

@@ -48,8 +49,13 @@ public class Resolver {
4849
}
4950

5051
public void
51-
setEDNS(boolean flag) {
52-
this.useEDNS = flag;
52+
setIgnoreTruncation(boolean flag) {
53+
this.ignoreTruncation = flag;
54+
}
55+
56+
public void
57+
setEDNS(int level) {
58+
this.EDNSlevel = level;
5359
}
5460

5561
public void
@@ -121,6 +127,7 @@ public class Resolver {
121127
Message response;
122128
DatagramSocket s;
123129
DatagramPacket dp;
130+
int udpLength = 512;
124131

125132
try {
126133
s = new DatagramSocket();
@@ -130,11 +137,13 @@ public class Resolver {
130137
return null;
131138
}
132139

133-
if (useEDNS)
134-
query.addRecord(Section.ADDITIONAL, EDNS.newOPT(1280));
140+
if (EDNSlevel >= 0) {
141+
udpLength = 1280;
142+
query.addRecord(Section.ADDITIONAL, EDNS.newOPT(udpLength));
143+
}
135144

136145
if (tsig != null)
137-
tsig.apply(query);
146+
tsig.apply(query, null);
138147

139148

140149
out = query.toWire();
@@ -144,7 +153,7 @@ public class Resolver {
144153

145154
s.send(new DatagramPacket(out, out.length, addr, port));
146155

147-
dp = new DatagramPacket(new byte[512], 512);
156+
dp = new DatagramPacket(new byte[udpLength], udpLength);
148157
s.setSoTimeout(timeoutValue);
149158
try {
150159
s.receive(dp);
@@ -163,7 +172,7 @@ public class Resolver {
163172
}
164173

165174
s.close();
166-
if (response.getHeader().getFlag(Flags.TC))
175+
if (response.getHeader().getFlag(Flags.TC) && !ignoreTruncation)
167176
return sendTCP(query, out);
168177
else
169178
return response;
@@ -188,7 +197,7 @@ public class Resolver {
188197
}
189198

190199
if (tsig != null)
191-
tsig.apply(query);
200+
tsig.apply(query, null);
192201

193202
out = query.toWire();
194203
new DataOutputStream(s.getOutputStream()).writeShort(out.length);

dig.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,12 @@ public class dig {
123123
res.setTCP(true);
124124
break;
125125

126+
case 'i':
127+
res.setIgnoreTruncation(true);
128+
break;
129+
126130
case 'e':
127-
res.setEDNS(true);
131+
res.setEDNS(0);
128132
break;
129133

130134
default:

org/xbill/DNS/Resolver.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ public class Resolver {
1414

1515
InetAddress addr;
1616
int port = PORT;
17-
boolean useTCP, useEDNS;
17+
boolean useTCP, ignoreTruncation;
18+
int EDNSlevel = -1;
1819
TSIG tsig;
1920
int timeoutValue = 60 * 1000;
2021

@@ -48,8 +49,13 @@ public class Resolver {
4849
}
4950

5051
public void
51-
setEDNS(boolean flag) {
52-
this.useEDNS = flag;
52+
setIgnoreTruncation(boolean flag) {
53+
this.ignoreTruncation = flag;
54+
}
55+
56+
public void
57+
setEDNS(int level) {
58+
this.EDNSlevel = level;
5359
}
5460

5561
public void
@@ -121,6 +127,7 @@ public class Resolver {
121127
Message response;
122128
DatagramSocket s;
123129
DatagramPacket dp;
130+
int udpLength = 512;
124131

125132
try {
126133
s = new DatagramSocket();
@@ -130,11 +137,13 @@ public class Resolver {
130137
return null;
131138
}
132139

133-
if (useEDNS)
134-
query.addRecord(Section.ADDITIONAL, EDNS.newOPT(1280));
140+
if (EDNSlevel >= 0) {
141+
udpLength = 1280;
142+
query.addRecord(Section.ADDITIONAL, EDNS.newOPT(udpLength));
143+
}
135144

136145
if (tsig != null)
137-
tsig.apply(query);
146+
tsig.apply(query, null);
138147

139148

140149
out = query.toWire();
@@ -144,7 +153,7 @@ public class Resolver {
144153

145154
s.send(new DatagramPacket(out, out.length, addr, port));
146155

147-
dp = new DatagramPacket(new byte[512], 512);
156+
dp = new DatagramPacket(new byte[udpLength], udpLength);
148157
s.setSoTimeout(timeoutValue);
149158
try {
150159
s.receive(dp);
@@ -163,7 +172,7 @@ public class Resolver {
163172
}
164173

165174
s.close();
166-
if (response.getHeader().getFlag(Flags.TC))
175+
if (response.getHeader().getFlag(Flags.TC) && !ignoreTruncation)
167176
return sendTCP(query, out);
168177
else
169178
return response;
@@ -188,7 +197,7 @@ public class Resolver {
188197
}
189198

190199
if (tsig != null)
191-
tsig.apply(query);
200+
tsig.apply(query, null);
192201

193202
out = query.toWire();
194203
new DataOutputStream(s.getOutputStream()).writeShort(out.length);

org/xbill/DNS/SimpleResolver.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ public class Resolver {
1414

1515
InetAddress addr;
1616
int port = PORT;
17-
boolean useTCP, useEDNS;
17+
boolean useTCP, ignoreTruncation;
18+
int EDNSlevel = -1;
1819
TSIG tsig;
1920
int timeoutValue = 60 * 1000;
2021

@@ -48,8 +49,13 @@ public class Resolver {
4849
}
4950

5051
public void
51-
setEDNS(boolean flag) {
52-
this.useEDNS = flag;
52+
setIgnoreTruncation(boolean flag) {
53+
this.ignoreTruncation = flag;
54+
}
55+
56+
public void
57+
setEDNS(int level) {
58+
this.EDNSlevel = level;
5359
}
5460

5561
public void
@@ -121,6 +127,7 @@ public class Resolver {
121127
Message response;
122128
DatagramSocket s;
123129
DatagramPacket dp;
130+
int udpLength = 512;
124131

125132
try {
126133
s = new DatagramSocket();
@@ -130,11 +137,13 @@ public class Resolver {
130137
return null;
131138
}
132139

133-
if (useEDNS)
134-
query.addRecord(Section.ADDITIONAL, EDNS.newOPT(1280));
140+
if (EDNSlevel >= 0) {
141+
udpLength = 1280;
142+
query.addRecord(Section.ADDITIONAL, EDNS.newOPT(udpLength));
143+
}
135144

136145
if (tsig != null)
137-
tsig.apply(query);
146+
tsig.apply(query, null);
138147

139148

140149
out = query.toWire();
@@ -144,7 +153,7 @@ public class Resolver {
144153

145154
s.send(new DatagramPacket(out, out.length, addr, port));
146155

147-
dp = new DatagramPacket(new byte[512], 512);
156+
dp = new DatagramPacket(new byte[udpLength], udpLength);
148157
s.setSoTimeout(timeoutValue);
149158
try {
150159
s.receive(dp);
@@ -163,7 +172,7 @@ public class Resolver {
163172
}
164173

165174
s.close();
166-
if (response.getHeader().getFlag(Flags.TC))
175+
if (response.getHeader().getFlag(Flags.TC) && !ignoreTruncation)
167176
return sendTCP(query, out);
168177
else
169178
return response;
@@ -188,7 +197,7 @@ public class Resolver {
188197
}
189198

190199
if (tsig != null)
191-
tsig.apply(query);
200+
tsig.apply(query, null);
192201

193202
out = query.toWire();
194203
new DataOutputStream(s.getOutputStream()).writeShort(out.length);

0 commit comments

Comments
 (0)