package be.neutrinet.ispng.dns; import org.apache.log4j.Logger; import org.xbill.DNS.Message; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.Socket; /** * Created by wannes on 1/25/15. */ public class TCPClient implements Runnable { private Socket socket; private RequestHandler handler; public TCPClient(Socket socket, RequestHandler handler) { this.socket = socket; this.handler = handler; } public void run() { int inLength; DataInputStream dataIn; DataOutputStream dataOut; byte[] in; try { InputStream is = socket.getInputStream(); dataIn = new DataInputStream(is); inLength = dataIn.readUnsignedShort(); in = new byte[inLength]; dataIn.readFully(in); Message query; byte[] response = null; try { query = new Message(in); response = handler.generateReply(query, in, in.length, socket); if (response == null) return; } catch (IOException e) { response = handler.formerrMessage(in); } dataOut = new DataOutputStream(socket.getOutputStream()); dataOut.writeShort(response.length); dataOut.write(response); } catch (IOException ex) { Logger.getLogger(getClass()).error("Failed to service DNS client", ex); } finally { try { socket.close(); } catch (Exception xe) { } } } }