private void test3PartyParallel( String host1, int port1, String subject1, String sourceFile, String host2, int port2, String subject2, String destFile, GSSCredential cred, int parallelism) throws Exception { // // pi2 = control channel to destination server // GridFTPControlChannel pi2 = new GridFTPControlChannel(host2, port2); pi2.open(); pi2.setAuthorization(TestEnv.getAuthorization(subject2)); logger.debug("Connected to server 2."); pi2.authenticate(cred); // FEAT doesServerSupportParallel(pi2); pi2.write(new Command("TYPE", "I")); checkPositive(pi2.read()); pi2.write(new Command("MODE", "E")); checkPositive(pi2.read()); pi2.write(new Command("PBSZ", "16384")); checkPositive(pi2.read()); pi2.write(new Command("PASV")); Reply pasvReply = pi2.read(); checkPositive(pasvReply); // parse PASV reply of the form: // 227 Entering Passive Mode (140,221,65,198,172,18) if (pasvReply.getCode() != 227) fail("received unexpected server reply to Pasv: " + pasvReply.getCode()); String pasvReplyMsg = pasvReply.getMessage(); logger.debug("tester: The message is: " + pasvReplyMsg); int openBracket = pasvReplyMsg.indexOf("("); int closeBracket = pasvReplyMsg.indexOf(")", openBracket); String portCommandParam = pasvReplyMsg.substring(openBracket + 1, closeBracket); pi2.write(new Command("STOR", destFile)); // do not wait for reply // // pi1 = control channel to source server // GridFTPControlChannel pi1 = new GridFTPControlChannel(host1, port1); pi1.open(); pi1.setAuthorization(TestEnv.getAuthorization(subject1)); logger.debug("Connected to server 1."); pi1.authenticate(cred); // FEAT doesServerSupportParallel(pi1); pi1.write(new Command("TYPE", "I")); checkPositive(pi1.read()); pi1.write(new Command("MODE", "E")); checkPositive(pi1.read()); pi1.write(new Command("SIZE", sourceFile)); checkPositive(pi1.read()); pi1.write( new Command( "OPTS", "RETR Parallelism=" + parallelism + "," + parallelism + "," + parallelism + ";")); pi1.write(new Command("PBSZ", "16384")); checkPositive(pi1.read()); // PORT Command port = new Command("PORT", portCommandParam); pi1.write(port); checkPositive(pi1.read()); pi1.write(new Command("RETR", sourceFile)); for (; ; ) { Reply reply1 = pi1.read(); // 200 PORT command successful. if (reply1.getCode() == 200) { continue; } // 150 Opening BINARY mode data connection. if (reply1.getCode() == 150) { continue; } // perf marker if (reply1.getCode() == 112) { continue; } // restart marker if (reply1.getCode() == 111) { continue; } // 226 Transfer complete if (reply1.getCode() == 226) { break; } fail("received unexpected reply from server 1: " + reply1.toString()); } for (; ; ) { Reply reply1 = pi2.read(); // 200 PORT command successful. if (reply1.getCode() == 200) { continue; } // 150 Opening BINARY mode data connection. if (reply1.getCode() == 150) { continue; } // perf marker if (reply1.getCode() == 112) { continue; } // restart marker if (reply1.getCode() == 111) { continue; } // 226 Transfer complete if (reply1.getCode() == 226) { break; } fail("received unexpected reply from server 2: " + reply1.toString()); } pi1.write(new Command("QUIT")); pi2.write(new Command("QUIT")); // 221 Service closing control connection. checkPositive(pi1.read()); checkPositive(pi2.read()); pi1.close(); pi2.close(); } // test3PartyParallel
// using ESTO and ERET private void test3PartyStriping( String host1, int port1, String subject1, String sourceFile, String host2, int port2, String subject2, String destFile, GSSCredential cred, int parallelism) throws Exception { // // pi2 = control channel to destination server // GridFTPControlChannel pi2 = new GridFTPControlChannel(host2, port2); pi2.open(); pi2.setAuthorization(TestEnv.getAuthorization(subject2)); logger.debug("Connected to server 2."); pi2.authenticate(cred); // FEAT doesServerSupportParallel(pi2); pi2.write(new Command("TYPE", "I")); checkPositive(pi2.read()); pi2.write(new Command("MODE", "E")); checkPositive(pi2.read()); pi2.write(new Command("PBSZ", "16384")); checkPositive(pi2.read()); pi2.write(new Command("SPAS")); Reply spasReply = pi2.read(); checkPositive(spasReply); logger.debug("tester: Received reply to SPAS."); // parse SPAS reply String lineSeparator = System.getProperty("line.separator"); if (spasReply.getCode() != 229) fail("received unexpected server reply to Spas: "******"tester: The message is: " + spasReplyMsg); String sporCommandParam = new HostPortList(spasReply.getMessage()).toFtpCmdArgument(); pi2.write(new Command("ESTO", "A 0 " + destFile)); // do not wait for reply // // pi1 = control channel to source server // GridFTPControlChannel pi1 = new GridFTPControlChannel(host1, port1); pi1.open(); pi1.setAuthorization(TestEnv.getAuthorization(subject1)); logger.debug("Connected to server 1."); pi1.authenticate(cred); // FEAT doesServerSupportParallel(pi1); pi1.write(new Command("TYPE", "I")); checkPositive(pi1.read()); pi1.write(new Command("MODE", "E")); checkPositive(pi1.read()); pi1.write(new Command("SIZE", sourceFile)); Reply sizeReply = pi1.read(); checkPositive(sizeReply); long sourceFileSize = Long.parseLong(sizeReply.getMessage()); pi1.write( new Command( "OPTS", "RETR Parallelism=" + parallelism + "," + parallelism + "," + parallelism + ";")); pi1.write(new Command("PBSZ", "16384")); checkPositive(pi1.read()); // PORT Command port = new Command("SPOR", sporCommandParam); pi1.write(port); checkPositive(pi1.read()); pi1.write(new Command("ERET", "P 0 " + sourceFileSize + " " + sourceFile)); for (; ; ) { Reply reply1 = pi1.read(); // 200 PORT command successful. if (reply1.getCode() == 200) { continue; } // 150 Opening BINARY mode data connection. if (reply1.getCode() == 150) { continue; } // perf marker if (reply1.getCode() == 112) { continue; } // restart marker if (reply1.getCode() == 111) { continue; } // 226 Transfer complete if (reply1.getCode() == 226) { break; } fail("received unexpected reply from server 1: " + reply1.toString()); } for (; ; ) { Reply reply2 = pi2.read(); // 200 PORT command successful. if (reply2.getCode() == 200) { continue; } // 150 Opening BINARY mode data connection. if (reply2.getCode() == 150) { continue; } // perf marker if (reply2.getCode() == 112) { continue; } // restart marker if (reply2.getCode() == 111) { continue; } // 226 Transfer complete if (reply2.getCode() == 226) { break; } fail("received unexpected reply from server 2: " + reply2.toString()); } pi1.write(new Command("QUIT")); pi2.write(new Command("QUIT")); // 221 Service closing control connection. checkPositive(pi1.read()); checkPositive(pi2.read()); pi1.close(); pi2.close(); } // test3rdPartyStriping
private void test3Party( String host1, int port1, String subject1, String sourceFile, String host2, int port2, String subject2, String destFile, GSSCredential cred) throws Exception { // // pi2 = control channel to destination server // GridFTPControlChannel pi2 = new GridFTPControlChannel(host2, port2); pi2.open(); pi2.setAuthorization(TestEnv.getAuthorization(subject2)); logger.debug("Connected to server 2."); pi2.authenticate(cred); pi2.write(new Command("TYPE", "I")); checkPositive(pi2.read()); pi2.write(new Command("PBSZ", "16384")); checkPositive(pi2.read()); pi2.write(new Command("PASV")); Reply pasvReply = pi2.read(); checkPositive(pasvReply); // parse PASV reply of the form: // 227 Entering Passive Mode (140,221,65,198,172,18) if (pasvReply.getCode() != 227) fail("received unexpected server reply to Pasv: " + pasvReply.getCode()); String pasvReplyMsg = pasvReply.getMessage(); logger.debug("tester: The message is: " + pasvReplyMsg); int openBracket = pasvReplyMsg.indexOf("("); int closeBracket = pasvReplyMsg.indexOf(")", openBracket); String portCommandParam = pasvReplyMsg.substring(openBracket + 1, closeBracket); pi2.write(new Command("STOR", destFile)); // do not wait for reply // // pi1 = control channel to source server // GridFTPControlChannel pi1 = new GridFTPControlChannel(host1, port1); pi1.open(); pi1.setAuthorization(TestEnv.getAuthorization(subject1)); logger.debug("Connected to server 1."); pi1.authenticate(cred); pi1.write(new Command("TYPE", "I")); checkPositive(pi1.read()); pi1.write(new Command("SIZE", sourceFile)); checkPositive(pi1.read()); pi1.write(new Command("PBSZ", "16384")); checkPositive(pi1.read()); // PORT Command port = new Command("PORT", portCommandParam); pi1.write(port); checkPositive(pi1.read()); pi1.write(new Command("RETR", sourceFile)); // 150 Opening BINARY mode data connection. checkPositive(pi1.read()); checkPositive(pi2.read()); // 226 Transfer complete checkPositive(pi1.read()); checkPositive(pi2.read()); pi1.write(new Command("QUIT")); pi2.write(new Command("QUIT")); // 221 Service closing control connection. checkPositive(pi1.read()); checkPositive(pi2.read()); pi1.close(); pi2.close(); }