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 }