package fitnesse.testsystems.fit; import java.io.IOException; import java.io.InputStream; import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; import fitnesse.http.HttpException; import fitnesse.http.Request; import fitnesse.socketservice.SocketServer; public class SocketCatcher implements SocketServer { private static final Logger LOG = Logger.getLogger(SocketCatcher.class.getName()); private final SocketAccepter accepter; private final int ticketNumber; public SocketCatcher(SocketAccepter accepter, int ticketNumber) { this.accepter = accepter; this.ticketNumber = ticketNumber; } @Override public void serve(Socket s) throws IOException { InputStream input = s.getInputStream(); Request request = new Request(input); try { request.parse(); } catch (HttpException e) { LOG.log(Level.INFO, e.getMessage()); return; } if (!"socketCatcher".equals(request.getInput("responder"))) { throw new IllegalArgumentException("Not a valid responder: " + request.getInput("responder")); } if (!Integer.toString(ticketNumber).equals(request.getInput("ticket"))) { throw new IllegalArgumentException("Not a valid ticket: " + request.getInput("ticket")); } try { accepter.acceptSocket(s); } catch (InterruptedException e) { LOG.log(Level.SEVERE, "Fit client interrupted"); Thread.currentThread().interrupt(); } } }