< prev index next >
test/jdk/com/sun/jndi/dns/lib/DNSTracer.java
Print this page
*** 24,33 ****
--- 24,34 ----
import sun.security.util.HexDumpEncoder;
import java.io.PrintStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
+ import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.SocketException;
import java.nio.ByteBuffer;
import java.util.Arrays;
*** 44,85 ****
*
* xxxx: 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff ................
*
* Typically, the capture file data will be used by DNSServer for playback
*/
! public class DNSTracer implements Runnable {
public static final int DNS_DEFAULT_PORT = 53;
public static final int DNS_PACKET_SIZE = 512;
static HexDumpEncoder encoder = new HexDumpEncoder();
private DatagramSocket inSocket;
private SocketAddress dnsServerAddress;
private ByteBuffer reqBuffer = ByteBuffer.allocate(DNS_PACKET_SIZE);
private ByteBuffer resBuffer = ByteBuffer.allocate(DNS_PACKET_SIZE);
private PrintStream out = null;
! public DNSTracer(DatagramSocket socket, String dnsHostname) {
! this(socket, dnsHostname, DNS_DEFAULT_PORT);
}
! public DNSTracer(DatagramSocket socket, PrintStream outStream,
! String dnsHostname) {
! this(socket, outStream, dnsHostname, DNS_DEFAULT_PORT);
}
! public DNSTracer(DatagramSocket socket, String dnsHostname, int dnsPort) {
! this(socket, System.out, dnsHostname, dnsPort);
}
! public DNSTracer(DatagramSocket socket, PrintStream outStream,
! String dnsHostname, int dnsPort) {
! inSocket = socket;
out = outStream;
dnsServerAddress = new InetSocketAddress(dnsHostname, dnsPort);
}
public void run() {
System.out.println(
"DNSTracer: listening on port " + inSocket.getLocalPort());
System.out.println("DNSTracer: will forward request to server "
+ dnsServerAddress);
--- 45,88 ----
*
* xxxx: 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff ................
*
* Typically, the capture file data will be used by DNSServer for playback
*/
! public class DNSTracer extends Thread implements Server {
public static final int DNS_DEFAULT_PORT = 53;
public static final int DNS_PACKET_SIZE = 512;
static HexDumpEncoder encoder = new HexDumpEncoder();
private DatagramSocket inSocket;
private SocketAddress dnsServerAddress;
private ByteBuffer reqBuffer = ByteBuffer.allocate(DNS_PACKET_SIZE);
private ByteBuffer resBuffer = ByteBuffer.allocate(DNS_PACKET_SIZE);
private PrintStream out = null;
+ private volatile boolean isRunning;
! public DNSTracer(String dnsHostname) throws SocketException {
! this(dnsHostname, DNS_DEFAULT_PORT);
}
! public DNSTracer(PrintStream outStream, String dnsHostname)
! throws SocketException {
! this(outStream, dnsHostname, DNS_DEFAULT_PORT);
}
! public DNSTracer(String dnsHostname, int dnsPort) throws SocketException {
! this(System.out, dnsHostname, dnsPort);
}
! public DNSTracer(PrintStream outStream, String dnsHostname, int dnsPort)
! throws SocketException {
! inSocket = new DatagramSocket(0, InetAddress.getLoopbackAddress());
out = outStream;
dnsServerAddress = new InetSocketAddress(dnsHostname, dnsPort);
}
public void run() {
+ isRunning = true;
System.out.println(
"DNSTracer: listening on port " + inSocket.getLocalPort());
System.out.println("DNSTracer: will forward request to server "
+ dnsServerAddress);
*** 114,130 ****
inSocket.send(new DatagramPacket(resPacket.getData(),
resPacket.getLength(), reqPacket.getSocketAddress()));
}
} catch (SocketException se) {
! if (inSocket.isClosed()) {
out.flush();
System.out.println("DNSTracer: Exit");
} else {
se.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
--- 117,151 ----
inSocket.send(new DatagramPacket(resPacket.getData(),
resPacket.getLength(), reqPacket.getSocketAddress()));
}
} catch (SocketException se) {
! if (!isRunning) {
out.flush();
System.out.println("DNSTracer: Exit");
} else {
se.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
+ @Override public void stopServer() {
+ isRunning = false;
+ if (inSocket != null) {
+ try {
+ inSocket.close();
+ } catch (Exception e) {
+ // ignore
+ }
+ }
+ }
+
+ @Override public int getPort() {
+ if (inSocket != null) {
+ return inSocket.getLocalPort();
+ } else {
+ return -1;
+ }
+ }
}
< prev index next >