]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/jsch/AbstractJschTask.java
Fix SVN issues
[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 Session session = jsch.getSession(getSshTarget().getUser(),
19 getSshTarget().getHost(), getSshTarget().getPort());
20
21 session.setUserInfo(getSshTarget().getUserInfo());
22 session.connect();
23 return session;
24 } catch (JSchException e) {
25 throw new SlcException("Could not open session to "
26 + getSshTarget(), e);
27 }
28 }
29
30 public final void run() {
31 Session session = openSession();
32 try {
33 run(session);
34 } finally {
35 session.disconnect();
36 }
37 }
38
39 abstract void run(Session session);
40
41 protected void checkAck(InputStream in) throws IOException {
42 int b = in.read();
43 // b may be 0 for success,
44 // 1 for error,
45 // 2 for fatal error,
46 // -1
47 if (b == 0)
48 return;
49 else if (b == -1)
50 throw new SlcException("SSH ack returned -1");
51 else if (b == 1 || b == 2) {
52 StringBuffer sb = new StringBuffer();
53 int c;
54 do {
55 c = in.read();
56 sb.append((char) c);
57 } while (c != '\n');
58 if (b == 1) { // error
59 throw new SlcException("SSH ack error: " + sb.toString());
60 }
61 if (b == 2) { // fatal error
62 throw new SlcException("SSH fatal error: " + sb.toString());
63 }
64 }
65 }
66
67 public SshTarget getSshTarget() {
68 return sshTarget;
69 }
70
71 public void setSshTarget(SshTarget sshTarget) {
72 this.sshTarget = sshTarget;
73 }
74
75 }