]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/jsch/AbstractJschTask.java
8a58c357f9b85978b69988a477e84fc158ede3de
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / jsch / AbstractJschTask.java
1 package org.argeo.slc.jsch;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5
6 import org.argeo.slc.SlcException;
7
8 import com.jcraft.jsch.JSch;
9 import com.jcraft.jsch.JSchException;
10 import com.jcraft.jsch.Session;
11
12 public abstract class AbstractJschTask implements Runnable {
13 private SshTarget sshTarget;
14
15 protected Session openSession() {
16 try {
17 JSch jsch = new JSch();
18 if (sshTarget.getUsePrivateKey()
19 && sshTarget.getLocalPrivateKey().exists())
20 jsch.addIdentity(sshTarget.getLocalPrivateKey()
21 .getAbsolutePath());
22 Session session = jsch.getSession(getSshTarget().getUser(),
23 getSshTarget().getHost(), getSshTarget().getPort());
24
25 session.setUserInfo(getSshTarget().getUserInfo());
26 session.connect();
27 return session;
28 } catch (JSchException e) {
29 throw new SlcException("Could not open session to "
30 + getSshTarget(), e);
31 }
32 }
33
34 public final void run() {
35 Session session = openSession();
36 try {
37 run(session);
38 } finally {
39 session.disconnect();
40 }
41 }
42
43 abstract void run(Session session);
44
45 protected int checkAck(InputStream in) throws IOException {
46 int b = in.read();
47 // b may be 0 for success,
48 // 1 for error,
49 // 2 for fatal error,
50 // -1
51 if (b == 0)
52 return b;
53 else if (b == -1)
54 return b;// throw new SlcException("SSH ack returned -1");
55 else if (b == 1 || b == 2) {
56 StringBuffer sb = new StringBuffer();
57 int c;
58 do {
59 c = in.read();
60 sb.append((char) c);
61 } while (c != '\n');
62 if (b == 1) { // error
63 throw new SlcException("SSH ack error: " + sb.toString());
64 }
65 if (b == 2) { // fatal error
66 throw new SlcException("SSH fatal error: " + sb.toString());
67 }
68 }
69 return b;
70 }
71
72 public SshTarget getSshTarget() {
73 if (sshTarget == null)
74 throw new SlcException("No SSH target defined.");
75 return sshTarget;
76 }
77
78 public void setSshTarget(SshTarget sshTarget) {
79 this.sshTarget = sshTarget;
80 }
81
82 }