Package se.unlogic.eagledns

Source Code of se.unlogic.eagledns.TCPConnection

package se.unlogic.eagledns;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

import org.apache.log4j.Logger;
import org.xbill.DNS.Message;


public class TCPConnection implements Runnable {

  private static Logger log = Logger.getLogger(TCPConnection.class);

  private EagleDNS eagleDNS;
  private Socket socket;

  public TCPConnection(EagleDNS eagleDNS, Socket socket) {
    super();
    this.eagleDNS = eagleDNS;
    this.socket = socket;
  }

  public void run() {

    try{

      try {
        int inLength;
        DataInputStream dataIn;
        DataOutputStream dataOut;
        byte[] in;

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

          log.debug("TCP query " + EagleDNS.toString(query.getQuestion()) + " from " + socket.getRemoteSocketAddress());

          response = this.eagleDNS.generateReply(query, in, in.length, socket);

          if (response == null) {
            return;
          }
        } catch (IOException e) {
          response = this.eagleDNS.formerrMessage(in);
        }
        dataOut = new DataOutputStream(socket.getOutputStream());
        dataOut.writeShort(response.length);
        dataOut.write(response);
      } catch (IOException e) {

        log.debug("Error sending TCP response to " + socket.getRemoteSocketAddress() + ":" + socket.getPort() + ", " + e);

      } finally {
        try {
          socket.close();
        } catch (IOException e) {
        }
      }

    }catch(Throwable e){

      log.warn("Error processing TCP connection from " + socket.getRemoteSocketAddress() + ":" + socket.getPort() + ", " + e);
    }
  }
}
TOP

Related Classes of se.unlogic.eagledns.TCPConnection

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.