in transport/scp-transport/src/main/java/org/apache/airavata/mft/transport/scp/SCPOutgoingConnector.java [79:126]
public OutputStream fetchOutputStreamJCraft(String resourcePath, long fileSize) throws Exception {
boolean ptimestamp = true;
// exec 'scp -t rfile' remotely
String command = "scp " + (ptimestamp ? "-p" : "") + " -t " + resourcePath;
channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
// get I/O streams for remote scp
out = channel.getOutputStream();
in = channel.getInputStream();
channel.connect();
if (checkAck(in) != 0) {
throw new IOException("Error code found in ack " + (checkAck(in)));
}
if (ptimestamp) {
command = "T" + (System.currentTimeMillis() / 1000) + " 0";
// The access time should be sent here,
// but it is not accessible with JavaAPI ;-<
command += (" " + (System.currentTimeMillis() / 1000) + " 0\n");
out.write(command.getBytes());
out.flush();
if (checkAck(in) != 0) {
throw new IOException("Error code found in ack " + (checkAck(in)));
}
}
// send "C0644 filesize filename", where filename should not include '/'
command = "C0644 " + fileSize + " ";
if (resourcePath.lastIndexOf('/') > 0) {
command += resourcePath.substring(resourcePath.lastIndexOf('/') + 1);
} else {
command += resourcePath;
}
command += "\n";
out.write(command.getBytes());
out.flush();
if (checkAck(in) != 0) {
throw new IOException("Error code found in ack " + (checkAck(in)));
}
return out;
}