1 #include "SSH.h"
2
3 namespace Upp {
4
Execute(const String & cmd,String & out,String & err)5 int SshExec::Execute(const String& cmd, String& out, String& err)
6 {
7 if(RequestExec(cmd)) {
8 ReadStdOut(out);
9 ReadStdErr(err);
10 if(Shut(IsError() ? GetErrorDesc() : Null))
11 return GetExitCode();
12 }
13 return GetError();
14 }
15
ReadStdOut(String & out)16 void SshExec::ReadStdOut(String& out)
17 {
18 String s;
19 while(!(s = Get(ssh->chunk_size)).IsEmpty())
20 out.Cat(s);
21 }
22
ReadStdErr(String & err)23 void SshExec::ReadStdErr(String& err)
24 {
25 String s;
26 while(!(s = GetStdErr(ssh->chunk_size)).IsEmpty())
27 err.Cat(s);
28 }
29
SshExecute(SshSession & session,const String & cmd,String & out,String & err)30 int SshExecute(SshSession& session, const String& cmd, String& out, String& err)
31 {
32 return SshExec(session).Execute(cmd, out, err);
33 }
34
SshExecute(SshSession & session,const String & cmd,String & out)35 int SshExecute(SshSession& session, const String& cmd, String& out)
36 {
37 String err;
38 int rc = SshExec(session).Execute(cmd, out, err);
39 if(!IsNull(err))
40 out.Cat(err);
41 return rc;
42 }
43
SshExecute(SshSession & session,const String & cmd)44 String SshExecute(SshSession& session, const String& cmd)
45 {
46 String out, err;
47 return SshExecute(session, cmd, out, err) ? String::GetVoid(): out;
48 }
49
50 }