Java/Android stuff (me coding dirty \o/)
[saartuer.git] / JavaTuer / src / de / hacksaar / javatuer / TyshellClient.java
diff --git a/JavaTuer/src/de/hacksaar/javatuer/TyshellClient.java b/JavaTuer/src/de/hacksaar/javatuer/TyshellClient.java
new file mode 100644 (file)
index 0000000..73d637d
--- /dev/null
@@ -0,0 +1,91 @@
+package de.hacksaar.javatuer;
+
+import com.jcraft.jsch.JSchException;
+import com.jcraft.jsch.UserInfo;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+
+public class TyshellClient {
+       private static final String TAG = "TyshellClient";
+       public static final char END_OF_COMMAND = '\n';
+       private final String hostname;
+       private final int port;
+       private final TuerLogging log;
+       private SshClient client;
+       private InputStreamReader inputStream;
+       private OutputStreamWriter outputStream;
+
+       public TyshellClient(String hostname, int port) {
+               this(hostname, port, new DummyLogging());
+       }
+
+       public TyshellClient(String hostname, int port, TuerLogging log) {
+               this.log = log;
+               this.hostname = hostname;
+               this.port = port;
+       }
+
+       public void connect(String username, String password) {
+               try {
+                       client = new SshClient(hostname, username, port, log);
+                       client.login(password);
+                       inputStream = new InputStreamReader(client.getInputStream());
+                       outputStream = new OutputStreamWriter(client.getOutputStream());
+               } catch (JSchException | IOException e) {
+                       log.exception(TAG, e);
+               }
+       }
+
+       public void connect(String username, String keyFile, String passphrase) {
+               try {
+                       client = new SshClient(hostname, username, port, log);
+                       client.addPrivateKey(keyFile, passphrase);
+                       client.login();
+                       inputStream = new InputStreamReader(client.getInputStream());
+                       outputStream = new OutputStreamWriter(client.getOutputStream());
+               } catch (JSchException | IOException e) {
+                       log.exception(TAG, e);
+               }
+       }
+
+       public void connect(String username, String keyFile, UserInfo interactiveLogin) {
+               try {
+                       client = new SshClient(hostname, username, port, log);
+                       client.addPrivateKey(keyFile);
+                       client.login(interactiveLogin);
+                       inputStream = new InputStreamReader(client.getInputStream());
+                       outputStream = new OutputStreamWriter(client.getOutputStream());
+               } catch (JSchException | IOException e) {
+                       log.exception(TAG, e);
+               }
+       }
+
+       public void disconnect() {
+               try {
+                       inputStream.close();
+                       outputStream.close();
+               } catch (IOException e) {
+                       log.exception(TAG, e);
+               }
+               client.disconnect();
+       }
+
+       boolean isConnected() {
+               return (client.isConnected() && inputStream != null && outputStream != null);
+       }
+
+       public void sendCommand(String command) {
+               if (isConnected()) {
+                       try {
+                               assert outputStream != null;
+                               log.debug(TAG, "Sending: " + command);
+                               outputStream.write((command + END_OF_COMMAND).toCharArray());
+                               outputStream.flush();
+                       } catch (IOException e) {
+                               log.exception(TAG, e);
+                       }
+               }
+       }
+}