package eclipse.controller.acqui.handlers; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.Arrays; import eclipse.controller.acqui.AcquisitionHandler; import eclipse.controller.util.TelemetrySettings; /** * This Handler is used to connect to a TCP port to receive the data, It is meant to be use with the Cellular connection with eclipse 9 * * @author Marco * */ public class TCPHandler extends AcquisitionHandler { private String name = "TCP"; private boolean isConnected = false; Socket clientSocket; DataOutputStream outToServer; InputStream inFromServer; @Override public Boolean start() { try { clientSocket = new Socket(TelemetrySettings.getInstance().getSetting("HANDLER_TCP_IP"), Integer.parseInt(TelemetrySettings.getInstance().getSetting("HANDLER_TCP_PORT"))); Boolean isOk = true; isOk = authenticate(); outToServer = new DataOutputStream(clientSocket.getOutputStream()); inFromServer = clientSocket.getInputStream(); if (isOk == true) { isConnected=true; } else { isConnected=false; clientSocket.close(); } } catch (IOException e) { e.printStackTrace(); } return isConnected; } public boolean authenticate() { boolean returnValue = true; try { OutputStream tempOutputStream = clientSocket.getOutputStream(); InputStream tempInputStream = clientSocket.getInputStream(); DataOutputStream out = new DataOutputStream(tempOutputStream); DataInputStream in = new DataInputStream(tempInputStream); byte[] toSend; byte[] received = new byte[16]; in.read(received, 0, 16); System.out.println(Arrays.toString(received)); toSend = xorString(received); out.write(toSend); out.flush(); } catch (IOException e) { System.out.println("Authenticate IOException"); System.out.println(e.toString()); e.printStackTrace(); returnValue = false; System.out.println(e.toString()); } return returnValue; } public byte[] xorString(byte[] received) { byte [] xored = new byte[16]; byte [] toxor = received; byte [] key = ("kperryisourqueen").getBytes(); for(int i = 0; i < 16; ++i) { xored[i] = (byte) ((toxor[i]) ^ (key[i])); } return xored; } @Override public void stop() { if(isConnected){ try { inFromServer.close(); inFromServer=null; outToServer.close(); outToServer=null; clientSocket.close(); clientSocket=null; isConnected=false; } catch (IOException e) { e.printStackTrace(); } } } @SuppressWarnings("null") @Override public byte readByte() { byte[] rtn = {0}; if(isConnected){ try { int i = inFromServer.read(rtn); if(i==-1) { rtn[0] = 0; stop(); } return rtn[0]; } catch (IOException e) { e.printStackTrace(); } } return (Byte) null; } @Override public void writeByte(Byte bt) { if(isConnected){ byte[] tbl = {bt}; try { outToServer.write(tbl); } catch (IOException e) { e.printStackTrace(); } } } @Override public boolean isConnected() { return isConnected; } @Override public String getName() { return name; } }