@@ -23,8 +23,8 @@ public class SimpleResolver implements Resolver {
2323/** The default port to send queries to */
2424public static final int DEFAULT_PORT = 53 ;
2525
26- private InetAddress addr ;
27- private int port = DEFAULT_PORT ;
26+ private InetSocketAddress address ;
27+ private InetSocketAddress localAddress ;
2828private boolean useTCP , ignoreTruncation ;
2929private byte EDNSlevel = -1 ;
3030private TSIG tsig ;
@@ -48,10 +48,12 @@ public class SimpleResolver implements Resolver {
4848 if (hostname == null )
4949 hostname = defaultResolver ;
5050 }
51+ InetAddress addr ;
5152 if (hostname .equals ("0" ))
5253 addr = InetAddress .getLocalHost ();
5354 else
5455 addr = InetAddress .getByName (hostname );
56+ address = new InetSocketAddress (addr , DEFAULT_PORT );
5557}
5658
5759/**
@@ -67,7 +69,7 @@ public class SimpleResolver implements Resolver {
6769
6870InetSocketAddress
6971getAddress () {
70- return new InetSocketAddress ( addr , port ) ;
72+ return address ;
7173}
7274
7375/** Sets the default host (initially localhost) to query */
@@ -78,7 +80,27 @@ public class SimpleResolver implements Resolver {
7880
7981public void
8082setPort (int port ) {
81- this .port = port ;
83+ address = new InetSocketAddress (address .getAddress (), port );
84+ }
85+
86+ public void
87+ setAddress (InetAddress addr ) {
88+ address = new InetSocketAddress (addr , address .getPort ());
89+ }
90+
91+ public void
92+ setAddress (InetSocketAddress addr ) {
93+ address = addr ;
94+ }
95+
96+ public void
97+ setLocalAddress (InetSocketAddress addr ) {
98+ localAddress = addr ;
99+ }
100+
101+ public void
102+ setLocalAddress (InetAddress addr ) {
103+ localAddress = new InetSocketAddress (addr , 0 );
82104}
83105
84106public void
@@ -183,8 +205,9 @@ public class SimpleResolver implements Resolver {
183205public Message
184206send (Message query ) throws IOException {
185207 if (Options .check ("verbose" ))
186- System .err .println ("Sending to " + addr .getHostAddress () +
187- ":" + port );
208+ System .err .println ("Sending to " +
209+ address .getAddress ().getHostAddress () +
210+ ":" + address .getPort ());
188211
189212 if (query .getHeader ().getOpcode () == Opcode .QUERY ) {
190213 Record question = query .getQuestion ();
@@ -200,17 +223,18 @@ public class SimpleResolver implements Resolver {
200223 byte [] out = query .toWire (Message .MAXLENGTH );
201224 int udpSize = maxUDPSize (query );
202225 boolean tcp = false ;
203- SocketAddress sa = new InetSocketAddress (addr , port );
204226 long endTime = System .currentTimeMillis () + timeoutValue ;
205227 do {
206228 byte [] in ;
207229
208230 if (useTCP || out .length > udpSize )
209231 tcp = true ;
210232 if (tcp )
211- in = TCPClient .sendrecv (sa , out , endTime );
233+ in = TCPClient .sendrecv (localAddress , address , out ,
234+ endTime );
212235 else
213- in = UDPClient .sendrecv (sa , out , udpSize , endTime );
236+ in = UDPClient .sendrecv (localAddress , address , out ,
237+ udpSize , endTime );
214238
215239 /*
216240 * Check that the response is long enough.
@@ -283,8 +307,7 @@ public class SimpleResolver implements Resolver {
283307private Message
284308sendAXFR (Message query ) throws IOException {
285309 Name qname = query .getQuestion ().getName ();
286- SocketAddress sockaddr = new InetSocketAddress (addr , port );
287- ZoneTransferIn xfrin = ZoneTransferIn .newAXFR (qname , sockaddr , tsig );
310+ ZoneTransferIn xfrin = ZoneTransferIn .newAXFR (qname , address , tsig );
288311 xfrin .setTimeout (getTimeout ());
289312 try {
290313 xfrin .run ();
0 commit comments