]> SALOME platform Git repositories - tools/libbatch.git/blob - src/Core/Batch_CommunicationProtocolSSH.cxx
Salome HOME
Fix remote directories in file transfer and merge some tests
[tools/libbatch.git] / src / Core / Batch_CommunicationProtocolSSH.cxx
1 //  Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 //  This library is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU Lesser General Public
8 //  License as published by the Free Software Foundation; either
9 //  version 2.1 of the License.
10 //
11 //  This library is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 //  Lesser General Public License for more details.
15 //
16 //  You should have received a copy of the GNU Lesser General Public
17 //  License along with this library; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 /*
23  *  Batch_CommunicationProtocolSSH.cxx :
24  *
25  *  Created on: 14 sept. 2009
26  *  Author : Renaud BARATE - EDF R&D
27  */
28
29 #include <Batch_config.h>
30
31 #include "Batch_CommunicationProtocolSSH.hxx"
32
33 using namespace std;
34
35 namespace Batch {
36
37   vector<string> CommunicationProtocolSSH::getExecCommandArgs(const string & subCommand,
38                                                               const string & host,
39                                                               const string & user) const
40   {
41     vector<string> cmd;
42
43     cmd.push_back(SSH_COMMAND);
44     cmd.push_back(host);
45
46     if (user.size() != 0) {
47       cmd.push_back("-l");
48       cmd.push_back(user);
49     }
50
51     cmd.push_back(subCommand);
52
53     return cmd;
54   }
55
56   vector<string> CommunicationProtocolSSH::getCopyCommandArgs(const string & sourcePath,
57                                                               const string & sourceHost,
58                                                               const string & sourceUser,
59                                                               const string & destinationPath,
60                                                               const string & destinationHost,
61                                                               const string & destinationUser) const
62   {
63     vector<string> cmd;
64
65     string fullSource;
66     if (sourceHost.size() != 0) {
67       if (sourceUser.size() != 0) {
68         fullSource += sourceUser + "@";
69       }
70       fullSource += sourceHost + ":";
71     }
72 #ifndef WIN32
73     fullSource += "'";
74 #endif
75     fullSource += sourcePath;
76 #ifndef WIN32
77     fullSource += "'";
78 #endif
79
80     string fullDestination;
81     if (destinationHost.size() != 0) {
82       if (destinationUser.size() != 0) {
83         fullDestination += destinationUser + "@";
84       }
85       fullDestination += destinationHost + ":";
86     }
87 #ifndef WIN32
88     fullDestination += "'";
89 #endif
90     fullDestination += destinationPath;
91 #ifndef WIN32
92     fullDestination += "'";
93 #endif
94
95     // Option -p is used to keep the same permissions for the destination file
96     // (particularly useful to keep scripts executable when copying them)
97     cmd.push_back(SCP_COMMAND);
98     cmd.push_back("-p");
99     cmd.push_back("-r");
100     cmd.push_back(fullSource);
101     cmd.push_back(fullDestination);
102
103     return cmd;
104   }
105
106 }