< 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 >