mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-11 22:03:01 -06:00
Refactoring of SshChannel is finished. SshTunnel refactored and re-added. Various clean up and docs updated.
git-svn-id: svn://ultimatepp.org/upp/trunk@12166 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
534f80a85f
commit
6ecdb59436
12 changed files with 189 additions and 858 deletions
|
|
@ -286,6 +286,13 @@ bool SshChannel::Write(const void *ptr, int size, int sid)
|
|||
return IsEof() || done == size;;
|
||||
}
|
||||
|
||||
bool SshChannel::Write(char c, int sid)
|
||||
{
|
||||
int rc = libssh2_channel_write_ex(*channel, sid, &c, 1);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
return rc == 1;
|
||||
}
|
||||
|
||||
dword SshChannel::EventWait(int fd, dword events, int tv)
|
||||
{
|
||||
SocketWaitEvent we;
|
||||
|
|
@ -295,7 +302,21 @@ dword SshChannel::EventWait(int fd, dword events, int tv)
|
|||
|
||||
bool SshChannel::ProcessEvents(String& input)
|
||||
{
|
||||
// TODO
|
||||
Buffer<char> buffer(ssh->chunk_size);
|
||||
int len = Read(buffer, ssh->chunk_size);
|
||||
|
||||
ReadWrite(input, buffer, len);
|
||||
|
||||
while(!input.IsEmpty() && InProgress()) {
|
||||
len = Write(~input, input.GetLength());
|
||||
if(len == input.GetLength())
|
||||
input.Clear();
|
||||
else
|
||||
if(len > 0)
|
||||
input.Remove(0, len);
|
||||
else
|
||||
break;
|
||||
}
|
||||
return IsEof();
|
||||
}
|
||||
|
||||
|
|
@ -313,565 +334,4 @@ SshChannel::~SshChannel()
|
|||
{
|
||||
Exit();
|
||||
}
|
||||
|
||||
/*
|
||||
int SshChannel::AdjustChunkSize(int64 sz)
|
||||
{
|
||||
return (int) clamp(sz, (int64) 1, int64(ssh->chunk_size));
|
||||
}
|
||||
|
||||
void SshChannel::Clear()
|
||||
{
|
||||
result = Null;
|
||||
exitcode = 0;
|
||||
exitsignal = Null;
|
||||
done = 0;
|
||||
total = 0;
|
||||
Zero(filestat);
|
||||
}
|
||||
|
||||
bool SshChannel::Cleanup(Error& e)
|
||||
{
|
||||
Unlock();
|
||||
if(!Ssh::Cleanup(e) || !IsComplexCmd()) {
|
||||
return false;
|
||||
}
|
||||
ssh->ccmd = -1;
|
||||
if(*channel) {
|
||||
LLOG("Cleaning up...");
|
||||
ssh->status = CLEANUP;
|
||||
Close();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SshChannel::Init()
|
||||
{
|
||||
*channel = libssh2_channel_open_session(ssh->session);
|
||||
if(!*channel && !WouldBlock())
|
||||
SetError(-1);
|
||||
if(*channel)
|
||||
LLOG("A new channel is opened.");
|
||||
return *channel != nullptr;
|
||||
}
|
||||
|
||||
void SshChannel::Exit()
|
||||
{
|
||||
ComplexCmd(CHANNEL_EXIT, [=] {
|
||||
Cmd(CHANNEL_EXIT, [=]() mutable {
|
||||
if(!listener)
|
||||
return true;
|
||||
auto rc = libssh2_channel_forward_cancel(listener);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
if(rc == 0)
|
||||
listener = nullptr;
|
||||
return rc == 0;
|
||||
});
|
||||
Cmd(CHANNEL_EXIT, [=]() mutable {
|
||||
if(!channel || *channel == nullptr)
|
||||
return true;
|
||||
auto rc = libssh2_channel_free(*channel);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
if(rc == 0) {
|
||||
*channel = nullptr;
|
||||
LLOG("Channel succesfully freed.");
|
||||
}
|
||||
return rc == 0;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
bool SshChannel::Open()
|
||||
{
|
||||
return Cmd(CHANNEL_OPEN, [=]() mutable {
|
||||
return SshChannel::Init();
|
||||
});
|
||||
}
|
||||
|
||||
bool SshChannel::Close()
|
||||
{
|
||||
return Cmd(CHANNEL_CLOSE, [=]() mutable {
|
||||
if(!channel || !*channel)
|
||||
return true;
|
||||
auto rc = libssh2_channel_close(*channel);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
if(rc == 0)
|
||||
LLOG("Channel close message is sent to the server.");
|
||||
return rc == 0;
|
||||
});
|
||||
}
|
||||
|
||||
bool SshChannel::CloseWait()
|
||||
{
|
||||
return Cmd(CHANNEL_WAIT, [=]() mutable {
|
||||
auto rc = libssh2_channel_wait_closed(*channel);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
if(rc == 0)
|
||||
LLOG("Channel close message is acknowledged by the server.");
|
||||
return rc == 0;
|
||||
});
|
||||
}
|
||||
|
||||
bool SshChannel::Request(const String& request, const String& params)
|
||||
{
|
||||
return Cmd(CHANNEL_REQUEST, [=]() mutable {
|
||||
auto rc = libssh2_channel_process_startup(
|
||||
*channel,
|
||||
request,
|
||||
request.GetLength(),
|
||||
params.GetLength() ? ~params : nullptr,
|
||||
params.GetLength()
|
||||
);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
if(rc == 0)
|
||||
LLOG("\"" << request << "\" request (params: " << params << ") is successful.");
|
||||
return rc == 0;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
bool SshChannel::Terminal(const String& term, int width, int height)
|
||||
{
|
||||
return Cmd(CHANNEL_REQUEST, [=]() mutable {
|
||||
auto rc = libssh2_channel_request_pty_ex(
|
||||
*channel,
|
||||
~term,
|
||||
term.GetLength(),
|
||||
nullptr,
|
||||
0,
|
||||
width,
|
||||
height,
|
||||
LIBSSH2_TERM_WIDTH_PX,
|
||||
LIBSSH2_TERM_HEIGHT_PX
|
||||
);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
if(rc == 0)
|
||||
LLOG("Terminal (" << term << ") [W:" << width << ", H:" << height << "] opened.");
|
||||
return rc == 0;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
bool SshChannel::SetEnv(const String& variable, const String& value)
|
||||
{
|
||||
return Cmd(CHANNEL_SET_ENV, [=]() mutable {
|
||||
auto rc = libssh2_channel_setenv(*channel, variable, value);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
if(rc == 0)
|
||||
LLOG("Environment variable '" << variable << "' set to " << value);
|
||||
return rc == 0;
|
||||
});
|
||||
}
|
||||
|
||||
String SshChannel::Get(int64 size, int sid)
|
||||
{
|
||||
Clear();
|
||||
Cmd(CHANNEL_READ, [=]() mutable { return ReadString((String&)result, size, sid); });
|
||||
return !IsBlocking() ? Null : (String) result;
|
||||
}
|
||||
|
||||
int64 SshChannel::Get(Stream& out, int64 size, int sid)
|
||||
{
|
||||
Clear();
|
||||
Cmd(CHANNEL_READ, [=, &out]() mutable { return ReadStream(out, size, sid); });
|
||||
return !IsBlocking() ? 0 : (int64) result;
|
||||
}
|
||||
|
||||
String SshChannel::GetLine(int maxlen, int sid)
|
||||
{
|
||||
Clear();
|
||||
Cmd(CHANNEL_READ, [=]{
|
||||
bool is_eol = false;
|
||||
String& s = (String&) result;
|
||||
do {
|
||||
int c = Read(sid);
|
||||
if(c == -1)
|
||||
break;
|
||||
else
|
||||
ssh->start_time = msecs();
|
||||
if(c == '\r')
|
||||
continue;
|
||||
if(s.GetLength() >= maxlen)
|
||||
s = Null;
|
||||
is_eol = c == '\n';
|
||||
if(!is_eol)
|
||||
s.Cat(c);
|
||||
}
|
||||
while(!is_eol && !IsEof() && !IsTimeout() && IsBlocking());
|
||||
return is_eol || IsEof();
|
||||
});
|
||||
return !IsBlocking() ? Null : (String) result;
|
||||
}
|
||||
|
||||
int SshChannel::GetNow(int sid)
|
||||
{
|
||||
Cmd(CHANNEL_READ, [=]() mutable {
|
||||
int c = Read(sid);
|
||||
if(c >= 0) result = c;
|
||||
return c >= 0;
|
||||
});
|
||||
return !IsBlocking() ? -1 : (int) result;
|
||||
}
|
||||
|
||||
int SshChannel::GetNow(void* buffer, int sid)
|
||||
{
|
||||
Clear();
|
||||
Cmd(CHANNEL_READ, [=]() mutable {
|
||||
result = Read(buffer, ssh->chunk_size, sid);
|
||||
return true;
|
||||
});
|
||||
return !IsBlocking() ? -1 : (int) result;
|
||||
}
|
||||
|
||||
int64 SshChannel::Put(const String& s, int sid)
|
||||
{
|
||||
Clear();
|
||||
Cmd(CHANNEL_WRITE, [=, &s]() mutable { return WriteString(s, s.GetLength(), sid); });
|
||||
return !IsBlocking() ? Null : (int64) result;
|
||||
}
|
||||
|
||||
int64 SshChannel::Put(Stream& in, int64 size, int sid)
|
||||
{
|
||||
Clear();
|
||||
Cmd(CHANNEL_WRITE, [=, &in]() mutable { return WriteStream(in, size, sid); });
|
||||
return !IsBlocking() ? 0 : (int64) result;
|
||||
}
|
||||
|
||||
bool SshChannel::PutNow(char c, int sid)
|
||||
{
|
||||
return Cmd(CHANNEL_READ, [=]() mutable { return Write(c, sid); });
|
||||
}
|
||||
|
||||
int SshChannel::PutNow(const void* buffer, int64 size, int sid)
|
||||
{
|
||||
Cmd(CHANNEL_WRITE, [=]() mutable {
|
||||
result = Write(buffer, size, sid);
|
||||
return true;
|
||||
});
|
||||
return !IsBlocking() ? -1 : (int) result;
|
||||
}
|
||||
|
||||
int SshChannel::Read(void *buffer, int64 len, int sid)
|
||||
{
|
||||
auto n = libssh2_channel_read_ex(*channel, sid, (char*) buffer, len);
|
||||
if(n < 0 && !WouldBlock(n))
|
||||
SetError(n);
|
||||
if(n > 0) {
|
||||
done += n;
|
||||
total += done;
|
||||
if(WhenProgress(done, len))
|
||||
SetError(-1, "Read aborted.");
|
||||
ssh->start_time = msecs();
|
||||
VLOG("Read stream #" << sid << ": " << n << " bytes read.");
|
||||
}
|
||||
if(IsEof())
|
||||
LLOG("Read stream #" << sid << ": EOF.");
|
||||
return n;
|
||||
}
|
||||
|
||||
int SshChannel::Read(int sid)
|
||||
{
|
||||
char c;
|
||||
auto rc = libssh2_channel_read_ex(*channel, sid, &c, 1);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
return rc == 1 ? int(c) : -1;
|
||||
}
|
||||
|
||||
bool SshChannel::ReadString(String& s, int64 len, int sid, bool nb)
|
||||
{
|
||||
return ReadContent(
|
||||
[&s](const void* buf, int len){
|
||||
s.Cat((const char*) buf, len);
|
||||
},
|
||||
len,
|
||||
sid,
|
||||
nb
|
||||
);
|
||||
}
|
||||
|
||||
bool SshChannel::ReadStream(Stream& s, int64 len, int sid, bool nb)
|
||||
{
|
||||
return ReadContent(
|
||||
[=, &s](const void* buf, int len){
|
||||
s.Put(buf, len);
|
||||
result = done;
|
||||
},
|
||||
len,
|
||||
sid,
|
||||
nb
|
||||
);
|
||||
}
|
||||
|
||||
bool SshChannel::ReadContent(Event<const void*,int>&& consumer, int64 len, int sid, bool nb)
|
||||
{
|
||||
auto l = AdjustChunkSize(len - done);
|
||||
Buffer<char> buffer(l);
|
||||
|
||||
int n = 0;
|
||||
do {
|
||||
n = Read(buffer, l, sid);
|
||||
if(n < 0)
|
||||
return false;
|
||||
if(n > 0) {
|
||||
if(WhenContent)
|
||||
WhenContent(buffer, n);
|
||||
else
|
||||
consumer(buffer, n);
|
||||
}
|
||||
}
|
||||
while(!IsEof() && done < len && !nb);
|
||||
return true;
|
||||
}
|
||||
|
||||
int SshChannel::Write(const void* buffer, int64 len, int sid)
|
||||
{
|
||||
done = 0;
|
||||
auto n = libssh2_channel_write_ex(*channel, sid, (const char*) buffer + done , len - done);
|
||||
if(n < 0 && !WouldBlock(n))
|
||||
SetError(n);
|
||||
if(WouldBlock(n))
|
||||
return 0;
|
||||
if(n > 0) {
|
||||
done += n;
|
||||
total += done;
|
||||
if(WhenProgress(done, len))
|
||||
SetError(-1, "Write aborted.");
|
||||
ssh->start_time = msecs();
|
||||
VLOG("Write stream #" << sid << ": " << n << " bytes written.");
|
||||
}
|
||||
if(IsEof())
|
||||
LLOG("Write stream #" << sid << ": EOF.");
|
||||
return n;
|
||||
}
|
||||
|
||||
bool SshChannel::Write(char c, int sid)
|
||||
{
|
||||
auto rc = libssh2_channel_write_ex(*channel, sid, &c, 1);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
return rc == 1;
|
||||
}
|
||||
|
||||
bool SshChannel::WriteString(const String& s, int64 len, int sid, bool nb)
|
||||
{
|
||||
int n = 0;
|
||||
do {
|
||||
n = Write(s.Begin() + total, len - total, sid);
|
||||
if(n > 0)
|
||||
result = done;
|
||||
if(n == 0)
|
||||
return false;
|
||||
}
|
||||
while(!IsEof() && total < len && !nb);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SshChannel::WriteStream(Stream& s, int64 len, int sid, bool nb)
|
||||
{
|
||||
int n = 0;
|
||||
do {
|
||||
auto l = AdjustChunkSize(len - done);
|
||||
String ss = s.Get(l);
|
||||
n = Write(ss.Begin(), ss.GetLength(), sid);
|
||||
if(n > 0 && n < ss.GetLength()) {
|
||||
s.SeekCur(-(ss.GetLength() - n));
|
||||
result = (int64) s.GetPos();
|
||||
}
|
||||
if(!n)
|
||||
return false;
|
||||
}
|
||||
while(!s.IsEof() && done < len && !nb);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SshChannel::SendEof0()
|
||||
{
|
||||
auto rc = libssh2_channel_send_eof(*channel);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
if(rc == 0)
|
||||
LLOG("EOF message is sent to the server.");
|
||||
return rc == 0;
|
||||
}
|
||||
|
||||
bool SshChannel::RecvEof0()
|
||||
{
|
||||
auto rc = libssh2_channel_wait_eof(*channel);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
if(rc == 0)
|
||||
LLOG("EOF message is acknowledged by the server.");
|
||||
return rc == 0;
|
||||
}
|
||||
|
||||
bool SshChannel::SetWndSz(int64 size, bool force)
|
||||
{
|
||||
auto rc = libssh2_channel_receive_window_adjust2(*channel, size, (char)force, nullptr);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
if(rc == 0)
|
||||
LLOG(Format("Receive window size set is to %d.", size));
|
||||
return rc == 0;
|
||||
}
|
||||
|
||||
int SshChannel::SetPtySz(int w, int h)
|
||||
{
|
||||
auto rc = libssh2_channel_request_pty_size(*channel, w, h);
|
||||
if(!WouldBlock(rc) && rc < 0) rc = 1;
|
||||
if(rc == 1) LLOG("Warning: Couldn't set terminal size.");
|
||||
if(rc == 0) LLOG("Terminal size adjusted. [W:" << w << ", H:" << h << "]");
|
||||
return rc;
|
||||
}
|
||||
|
||||
bool SshChannel::SendEof()
|
||||
{
|
||||
return Cmd(CHANNEL_EOF, [=]() mutable {
|
||||
return SendEof0();
|
||||
});
|
||||
}
|
||||
|
||||
bool SshChannel::RecvEof()
|
||||
{
|
||||
return Cmd(CHANNEL_EOF, [=]() mutable {
|
||||
return RecvEof0();
|
||||
});
|
||||
}
|
||||
|
||||
bool SshChannel::SendRecvEof()
|
||||
{
|
||||
return ComplexCmd(CHANNEL_EOF, [=]() mutable {
|
||||
SendEof();
|
||||
RecvEof();
|
||||
});
|
||||
}
|
||||
|
||||
bool SshChannel::IsEof()
|
||||
{
|
||||
auto rc = libssh2_channel_eof(*channel);
|
||||
return rc != 0;
|
||||
}
|
||||
|
||||
bool SshChannel::SetTerminalSize(int width, int height)
|
||||
{
|
||||
return Cmd(CHANNEL_PTY_SIZE, [=]() mutable {
|
||||
return SetPtySz(width, height);
|
||||
});
|
||||
}
|
||||
|
||||
bool SshChannel::SetReadWindowSize(int64 size, bool force)
|
||||
{
|
||||
return Cmd(CHANNEL_WIN_SIZE, [=]() mutable {
|
||||
return SetWndSz(size, force);
|
||||
});
|
||||
}
|
||||
|
||||
int64 SshChannel::GetReadWindowSize()
|
||||
{
|
||||
return (int64) libssh2_channel_window_read(*channel);
|
||||
}
|
||||
|
||||
int64 SshChannel::GetWriteWindowSize()
|
||||
{
|
||||
return (int64) libssh2_channel_window_write(*channel);
|
||||
}
|
||||
|
||||
int SshChannel::GetExitCode()
|
||||
{
|
||||
if(*channel && *channel) {
|
||||
exitcode = libssh2_channel_get_exit_status(*channel);
|
||||
LLOG("Exit code: " << exitcode);
|
||||
}
|
||||
return exitcode;
|
||||
}
|
||||
|
||||
String SshChannel::GetExitSignal()
|
||||
{
|
||||
if(*channel && *channel) {
|
||||
Buffer<char*> sig(64, 0);
|
||||
auto rc = libssh2_channel_get_exit_signal(*channel, sig, nullptr, nullptr, nullptr, nullptr, nullptr);
|
||||
exitsignal = *sig;
|
||||
LLOG("Exit signal: " << exitsignal);
|
||||
}
|
||||
return exitsignal;
|
||||
}
|
||||
|
||||
dword SshChannel::EventWait(int fd, dword events, int tv)
|
||||
{
|
||||
SocketWaitEvent we;
|
||||
we.Add(fd, events);
|
||||
return we.Wait(tv) > 0 ? we[0] : 0;
|
||||
}
|
||||
|
||||
bool SshChannel::ProcessEvents(String& input)
|
||||
{
|
||||
Buffer<char> buffer(ssh->chunk_size);
|
||||
auto len = Read(buffer, ssh->chunk_size);
|
||||
|
||||
ReadWrite(input, buffer, len);
|
||||
|
||||
while(!input.IsEmpty()) {
|
||||
len = Write(~input, input.GetLength());
|
||||
if(len == input.GetLength())
|
||||
input.Clear();
|
||||
else
|
||||
if(len > 0)
|
||||
input.Remove(0, len);
|
||||
else
|
||||
break;
|
||||
}
|
||||
return IsEof();
|
||||
}
|
||||
|
||||
void SshChannel::ReadWrite(String& in, const void* out, int out_len)
|
||||
{
|
||||
}
|
||||
|
||||
bool SshChannel::Lock()
|
||||
{
|
||||
if(*lock == 0) {
|
||||
LLOG("Channel serialization lock acquired.");
|
||||
*lock = ssh->oid;
|
||||
}
|
||||
return *lock == ssh->oid;
|
||||
}
|
||||
|
||||
void SshChannel::Unlock()
|
||||
{
|
||||
if(*lock == ssh->oid) {
|
||||
*lock = 0;
|
||||
LLOG("Channel serialization lock released.");
|
||||
}
|
||||
}
|
||||
|
||||
SshChannel::SshChannel(SshSession& session)
|
||||
: Ssh()
|
||||
{
|
||||
ssh->otype = CHANNEL;
|
||||
ssh->session = session.GetHandle();
|
||||
ssh->socket = &session.GetSocket();
|
||||
ssh->timeout = session.GetTimeout();
|
||||
ssh->waitstep = session.GetWaitStep();
|
||||
ssh->wait = Proxy(session.WhenWait);
|
||||
|
||||
channel.Create();
|
||||
*channel = nullptr;
|
||||
listener = nullptr;
|
||||
lock = session.GetLockPtr();
|
||||
Clear();
|
||||
}
|
||||
|
||||
SshChannel::~SshChannel()
|
||||
{
|
||||
if(channel) { // Picked?
|
||||
Ssh::Exit();
|
||||
Unlock();
|
||||
Exit();
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
|
@ -6,13 +6,13 @@ public:
|
|||
|
||||
LIBSSH2_CHANNEL* GetHandle() const { return channel ? *channel : nullptr; }
|
||||
int GetDone() const { return done; }
|
||||
|
||||
|
||||
bool IsOpen() const { return channel; }
|
||||
|
||||
|
||||
bool Open();
|
||||
bool Close();
|
||||
bool WaitClose();
|
||||
|
||||
|
||||
bool Request(const String& request, const String& params = Null);
|
||||
bool RequestExec(const String& cmdline) { return Request("exec", cmdline); }
|
||||
bool RequestShell() { return Request("shell", Null); }
|
||||
|
|
@ -20,7 +20,7 @@ public:
|
|||
bool RequestTerminal(const String& term, int width, int height);
|
||||
bool RequestTerminal(const String& term, Size sz) { return RequestTerminal(term, sz.cx, sz.cy); }
|
||||
bool SetEnv(const String& variable, const String& value);
|
||||
|
||||
|
||||
int Get(void *ptr, int size, int sid = 0);
|
||||
String Get(int size, int sid = 0);
|
||||
String GetLine(int maxlen = 65536, int sid = 0);
|
||||
|
|
@ -41,19 +41,20 @@ public:
|
|||
uint32 GetWriteWindowSize() { return libssh2_channel_window_write(*channel); }
|
||||
int GetExitCode();
|
||||
String GetExitSignal();
|
||||
|
||||
|
||||
SshChannel(SshSession& session);
|
||||
virtual ~SshChannel();
|
||||
|
||||
|
||||
SshChannel(SshChannel&&) = default;
|
||||
SshChannel& operator=(SshChannel&&) = default;
|
||||
|
||||
|
||||
protected:
|
||||
bool Init() override;
|
||||
void Exit() override;
|
||||
bool Read(void *ptr, int size, int sid = 0);
|
||||
int Read(int sid = 0);
|
||||
bool Write(const void *ptr, int size, int sid = 0);
|
||||
bool Write(char c, int sid = 0);
|
||||
bool SetWndSz(uint32 size, bool force = false);
|
||||
int SetPtySz(int w, int h);
|
||||
int SetPtySz(Size sz) { return SetPtySz(sz.cx, sz.cy); }
|
||||
|
|
@ -62,8 +63,8 @@ protected:
|
|||
dword EventWait(int fd, dword events, int tv = 10);
|
||||
bool ProcessEvents(String& input);
|
||||
virtual void ReadWrite(String& in, const void* out, int out_len) {}
|
||||
|
||||
|
||||
|
||||
|
||||
One<LIBSSH2_CHANNEL*> channel;
|
||||
int done;
|
||||
};
|
||||
|
|
@ -84,29 +85,35 @@ public:
|
|||
bool LoadFile(Stream& out, const char *path);
|
||||
|
||||
Scp(SshSession& session) : SshChannel(session) { ssh->otype = SCP; ssh->init = true; }
|
||||
|
||||
private:
|
||||
bool Open(int cmd, const String& path, libssh2_struct_stat* fs,
|
||||
int64 size, dword flags, long mode);
|
||||
|
||||
};
|
||||
/*
|
||||
|
||||
class SshTunnel : public SshChannel {
|
||||
public:
|
||||
bool Connect(const String& host, int port);
|
||||
bool Connect(const String& url);
|
||||
bool Listen(int port, int listen_count = 5) { return Listen(Null, port, NULL, listen_count); }
|
||||
bool Listen(const String& host, int port, int* bound_port, int listen_count = 5);
|
||||
bool Accept(SshTunnel& listener);
|
||||
bool Connect(const String& host, int port);
|
||||
bool Connect(const String& url);
|
||||
bool Listen(int port, int listen_count = 5) { return Listen(Null, port, nullptr, listen_count); }
|
||||
bool Listen(const String& host, int port, int* bound_port, int listen_count = 5);
|
||||
bool Accept(SshTunnel& listener);
|
||||
|
||||
SshTunnel(SshSession& session) : SshChannel(session) { ssh->otype = TCPTUNNEL; mode = -1; }
|
||||
SshTunnel() : SshChannel() {}
|
||||
SshTunnel(SshSession& session) : SshChannel(session) { ssh->otype = TUNNEL; mode = NONE; ssh->init = true; }
|
||||
virtual ~SshTunnel() { Exit(); }
|
||||
|
||||
private:
|
||||
bool Init() override { return true; }
|
||||
void Validate();
|
||||
int mode;
|
||||
void Exit() override;
|
||||
bool IsValid();
|
||||
|
||||
int mode;
|
||||
One<LIBSSH2_LISTENER*> listener;
|
||||
|
||||
enum Modes { NONE, CONNECT, LISTEN, ACCEPT };
|
||||
};
|
||||
|
||||
/*
|
||||
class SshShell : public SshChannel {
|
||||
public:
|
||||
bool Run(const String& terminal, Size pagesize) { return Run(GENERIC, terminal, pagesize); }
|
||||
|
|
|
|||
|
|
@ -16,4 +16,4 @@ int SshExec::Execute(const String& cmd, String& out, String& err)
|
|||
}
|
||||
return GetError();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -236,7 +236,7 @@ bool SFtp::RemoveDir(const String& path)
|
|||
if(!WouldBlock(rc) && rc != 0)
|
||||
SetError(rc);
|
||||
if(!rc)
|
||||
LOG(Format("Directory '%s' is succesfully deleted.", path));
|
||||
LLOG(Format("Directory '%s' is succesfully deleted.", path));
|
||||
return !rc;
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ public:
|
|||
SshChannel CreateChannel();
|
||||
SshExec CreateExec();
|
||||
// Scp CreateScp();
|
||||
// SshTunnel CreateTcpTunnel();
|
||||
SshTunnel CreateTunnel();
|
||||
// SshShell CreateShell();
|
||||
|
||||
bool Connect(const String& url);
|
||||
|
|
|
|||
|
|
@ -1,42 +1,53 @@
|
|||
#include "SSH.h"
|
||||
|
||||
namespace Upp {
|
||||
/*
|
||||
|
||||
#define LLOG(x) do { if(SSH::sTrace) RLOG(SSH::GetName(ssh->otype, ssh->oid) << x); } while(false)
|
||||
#define LDUMPHEX(x) do { if(SSH::sTraceVerbose) RDUMPHEX(x); } while(false)
|
||||
|
||||
void SshTunnel::Validate()
|
||||
bool SshTunnel::IsValid()
|
||||
{
|
||||
bool b = false;
|
||||
|
||||
switch(mode) {
|
||||
case CHANNEL_TUNNEL_CONNECT:
|
||||
b = *channel || listener;
|
||||
break;
|
||||
case CHANNEL_TUNNEL_LISTEN:
|
||||
b = *channel || listener;
|
||||
break;
|
||||
case CHANNEL_TUNNEL_ACCEPT:
|
||||
b = *channel;
|
||||
break;
|
||||
default:
|
||||
NEVER();
|
||||
case CONNECT: b = channel || listener; break;
|
||||
case LISTEN: b = channel || listener; break;
|
||||
case ACCEPT: b = channel; break;
|
||||
default: NEVER();
|
||||
}
|
||||
if(b)
|
||||
SetError(-1, "Proxy channel allocation failed.");
|
||||
ReportError(-1, "Invalid channelinstance.");
|
||||
return !b;
|
||||
}
|
||||
|
||||
void SshTunnel::Exit()
|
||||
{
|
||||
if(!listener)
|
||||
return;
|
||||
|
||||
Run([=]() mutable{
|
||||
int rc = libssh2_channel_forward_cancel(*listener);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
if(rc == 0) listener.Clear();
|
||||
return !rc;
|
||||
});
|
||||
}
|
||||
|
||||
bool SshTunnel::Connect(const String& host, int port)
|
||||
{
|
||||
mode = CHANNEL_TUNNEL_CONNECT;
|
||||
return Cmd(CHANNEL_TUNNEL_CONNECT, [=]() mutable {
|
||||
Validate();
|
||||
*channel = libssh2_channel_direct_tcpip(ssh->session, host, port);
|
||||
if(!*channel && !WouldBlock())
|
||||
SetError(-1);
|
||||
if(*channel) {
|
||||
mode = CONNECT;
|
||||
|
||||
if(!IsValid())
|
||||
return false;
|
||||
|
||||
return Run([=]() mutable{
|
||||
LIBSSH2_CHANNEL *ch = libssh2_channel_direct_tcpip(ssh->session, host , port);
|
||||
if(!ch && !WouldBlock()) SetError(-1);
|
||||
if(ch) {
|
||||
channel = MakeOne<LIBSSH2_CHANNEL*>(ch);
|
||||
LLOG("Direct tcp-ip connection to " << host << ":" << port << " is established.");
|
||||
}
|
||||
return *channel != NULL;
|
||||
return ch;
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -45,48 +56,55 @@ bool SshTunnel::Connect(const String& url)
|
|||
UrlInfo u(url);
|
||||
if(!u.host.IsEmpty() && u.port.IsEmpty())
|
||||
return Connect(u.host, StrInt(u.port));
|
||||
else
|
||||
return Cmd(CHANNEL_TUNNEL_CONNECT, [=]{
|
||||
SetError(-1, "Malformed proxy connection URL.");
|
||||
return false; // Just to prevent compiler warnings.
|
||||
});
|
||||
ReportError(-1, "Malformed proxy connection URL.");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SshTunnel::Listen(const String& host, int port, int* bound_port, int listen_count)
|
||||
{
|
||||
mode = CHANNEL_TUNNEL_LISTEN;
|
||||
return Cmd(CHANNEL_TUNNEL_LISTEN, [=]() mutable {
|
||||
Validate();
|
||||
listener =libssh2_channel_forward_listen_ex(
|
||||
mode = LISTEN;
|
||||
|
||||
if(!IsValid())
|
||||
return false;
|
||||
|
||||
return Run([=]() mutable {
|
||||
LIBSSH2_LISTENER *lsn = libssh2_channel_forward_listen_ex(
|
||||
ssh->session,
|
||||
host.IsEmpty() ? NULL : ~host,
|
||||
host.IsEmpty() ? nullptr : ~host,
|
||||
port,
|
||||
bound_port ? bound_port : NULL,
|
||||
bound_port ? bound_port : nullptr,
|
||||
listen_count
|
||||
);
|
||||
if(!listener && !WouldBlock())
|
||||
if(!lsn && !WouldBlock())
|
||||
SetError(-1);
|
||||
if(listener) {
|
||||
if(lsn) {
|
||||
listener = MakeOne<LIBSSH2_LISTENER*>(lsn);
|
||||
LLOG("Started listening on port #" << port);
|
||||
}
|
||||
return listener != NULL;
|
||||
return lsn;
|
||||
});
|
||||
}
|
||||
|
||||
bool SshTunnel::Accept(SshTunnel& listener)
|
||||
{
|
||||
mode = CHANNEL_TUNNEL_ACCEPT;
|
||||
return Cmd(CHANNEL_TUNNEL_ACCEPT, [=, &listener]() mutable {
|
||||
if(IsNull(listener))
|
||||
SetError(-1, "Invalid listener.");
|
||||
Validate();
|
||||
*channel = libssh2_channel_forward_accept(listener.listener);
|
||||
if(!*channel && !WouldBlock())
|
||||
SetError(-1);
|
||||
if(*channel) {
|
||||
mode = ACCEPT;
|
||||
|
||||
if(!IsValid())
|
||||
return false;
|
||||
|
||||
if(!listener.listener) {
|
||||
ReportError(-1, "Invalid listener.");
|
||||
return false;
|
||||
}
|
||||
|
||||
return Run([=, &listener]() mutable {
|
||||
LIBSSH2_CHANNEL *ch = libssh2_channel_forward_accept(*listener.listener);
|
||||
if(!ch && !WouldBlock()) SetError(-1);
|
||||
if(ch) {
|
||||
channel = MakeOne<LIBSSH2_CHANNEL*>(ch);
|
||||
LLOG("Connection accepted.");
|
||||
}
|
||||
return *channel != NULL;
|
||||
return ch;
|
||||
});
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
|
@ -41,123 +41,28 @@ class, and has pick semantics.&]
|
|||
[s3;%- &]
|
||||
[ {{10000F(128)G(128)@1 [s0; [* Public Method List]]}}&]
|
||||
[s3;%- &]
|
||||
[s5;:Upp`:`:Scp`:`:Get`(const Upp`:`:String`&`,Upp`:`:Stream`&`):%- [@(0.0.255) bool]_[* G
|
||||
et]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path],
|
||||
[_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 out])&]
|
||||
[s5;:Upp`:`:Scp`:`:operator`(`)`(const Upp`:`:String`&`,Upp`:`:Stream`&`):%- [@(0.0.255) b
|
||||
ool]_[* operator()]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path],
|
||||
[_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 out])&]
|
||||
[s2; Downloads the remote file at [%-*@3 path] and returns it as a
|
||||
String. Returns an empty string on failure.&]
|
||||
[s5;:Upp`:`:Scp`:`:SaveFile`(const char`*`,const Upp`:`:String`&`):%- [@(0.0.255) bool]_
|
||||
[* SaveFile]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path], [@(0.0.255) const]_[_^Upp`:`:String^ S
|
||||
tring][@(0.0.255) `&]_[*@3 data])&]
|
||||
[s2; [%-*@3 path] [%-*@3 data] .&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Scp`:`:Get`(const Upp`:`:String`&`):%- [_^Upp`:`:String^ String]_[* Get]([@(0.0.255) c
|
||||
onst]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path])&]
|
||||
[s5;:Upp`:`:Scp`:`:operator`(`)`(const Upp`:`:String`&`):%- [_^Upp`:`:String^ String]_[* o
|
||||
perator()]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path])&]
|
||||
[s2; Downloads the content of remote file pointed by [%-*@3 path ]as
|
||||
string. Returns an empty string on failure.&]
|
||||
[s2; In non`-blocking mode, the result of this operation can be obtained
|
||||
using GetResult() method.&]
|
||||
[s5;:Upp`:`:Scp`:`:LoadFile`(const char`*`):%- [_^Upp`:`:String^ String]_[* LoadFile]([@(0.0.255) c
|
||||
onst]_[@(0.0.255) char]_`*[*@3 path])&]
|
||||
[s2; [%-*@3 path] .&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Scp`:`:Put`(Upp`:`:Stream`&`,const Upp`:`:String`&`,long`):%- [@(0.0.255) b
|
||||
ool]_[* Put]([_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 in], [@(0.0.255) const]_[_^Upp`:`:String^ S
|
||||
tring][@(0.0.255) `&]_[*@3 path], [@(0.0.255) long]_[*@3 mode ]`=_[@3 0744])&]
|
||||
[s5;:Upp`:`:Scp`:`:Put`(const Upp`:`:String`&`,const Upp`:`:String`&`,long`):%- [@(0.0.255) b
|
||||
ool]_[* Put]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 in],
|
||||
[@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path],
|
||||
[@(0.0.255) long]_[*@3 mode ]`=_[@3 0744])&]
|
||||
[s5;:Upp`:`:Scp`:`:operator`(`)`(Upp`:`:Stream`&`,const Upp`:`:String`&`,long`):%- [@(0.0.255) b
|
||||
ool]_[* operator()]([_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 in],
|
||||
[@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path],
|
||||
[@(0.0.255) long]_[*@3 mode]_`=_[@3 0744])&]
|
||||
[s5;:Upp`:`:Scp`:`:operator`(`)`(const Upp`:`:String`&`,const Upp`:`:String`&`,long`):%- [@(0.0.255) b
|
||||
ool]_[* operator()]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 in],
|
||||
[@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path],
|
||||
[@(0.0.255) long]_[*@3 mode]_`=_[@3 0744])&]
|
||||
[s2; Uploads [%-*@3 in] to remote file pointed by [%-*@3 path], with
|
||||
access [%-*@3 mode]. Returns true on success.&]
|
||||
[s3; &]
|
||||
[ {{10000F(128)G(128)@1 [s0; [* Multithreaded Transfer Methods]]}}&]
|
||||
[s2;#%- &]
|
||||
[s2;# [%- The following convenience methods use high performance worker
|
||||
threads to transfer data. They all require a valid ssh ][%-*@3 session][%-
|
||||
during the operation, and throw ][%-^topic`:`/`/SSH`/src`/Upp`_Ssh`_Base`_en`-us`#Upp`:`:Ssh`:`:Error`:`:struct^ S
|
||||
Sh`::Error][%- on failures. In all of these methods, except AsyncConsumerGet(),
|
||||
][%-*@3 progress] gate can be used to track the progress of the
|
||||
transfer: The first parameter of this gate indicates a unique
|
||||
id. The second parameter provides the amount of data that has
|
||||
already been transferred. The third parameter may provide the
|
||||
total amount of data to be transferred, but is allowed to be
|
||||
0. Returning true will abort the current data transfer. Note
|
||||
that these worker threads will use their session`'s waitstep
|
||||
value to wait.&]
|
||||
[s3;%- &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Scp`:`:AsyncGet`(Upp`:`:SshSession`&`,const Upp`:`:String`&`,Upp`:`:Gate`<Upp`:`:int64`,Upp`:`:int64`,Upp`:`:int64`>`):%- [@(0.0.255) s
|
||||
tatic] [_^Upp`:`:AsyncWork^ AsyncWork]<[_^Upp`:`:String^ String]>_[* AsyncGet]([_^Upp`:`:SshSession^ S
|
||||
shSession][@(0.0.255) `&]_[*@3 session], [@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&
|
||||
]_[*@3 path], [_^Upp`:`:Gate^ Gate]<[_^Upp`:`:int64^ int64], [_^Upp`:`:int64^ int64],
|
||||
[_^Upp`:`:int64^ int64]>_[*@3 progress])&]
|
||||
[s2; Downloads the remote file at [%-*@3 path] as string.&]
|
||||
[s5;:Upp`:`:Scp`:`:SaveFile`(const char`*`,Upp`:`:Stream`&`):%- [@(0.0.255) bool]_[* Save
|
||||
File]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path], [_^Upp`:`:Stream^ Stream][@(0.0.255) `&
|
||||
]_[*@3 in])&]
|
||||
[s2; [%-*@3 path] [%-*@3 in] .&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Scp`:`:AsyncGet`(Upp`:`:SshSession`&`,const Upp`:`:String`&`,Upp`:`:Stream`&`,Upp`:`:Gate`<Upp`:`:int64`,Upp`:`:int64`,Upp`:`:int64`>`):%- [@(0.0.255) s
|
||||
tatic] [_^Upp`:`:AsyncWork^ AsyncWork]<[@(0.0.255) void]>_[* AsyncGet]([_^Upp`:`:SshSession^ S
|
||||
shSession][@(0.0.255) `&]_[*@3 session], [@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&
|
||||
]_[*@3 path], [_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 out], [_^Upp`:`:Gate^ Gate]<[_^Upp`:`:int64^ i
|
||||
nt64], [_^Upp`:`:int64^ int64], [_^Upp`:`:int64^ int64]>_[*@3 progress])&]
|
||||
[s2; Downloads the remote file pointed by the [%-*@3 path] to [%-*@3 out].&]
|
||||
[s5;:Upp`:`:Scp`:`:LoadFile`(Upp`:`:Stream`&`,const char`*`):%- [@(0.0.255) bool]_[* Load
|
||||
File]([_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 out], [@(0.0.255) const]_[@(0.0.255) ch
|
||||
ar]_`*[*@3 path])&]
|
||||
[s2; [%-*@3 out] [%-*@3 path] .&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Scp`:`:AsyncPut`(Upp`:`:SshSession`&`,Upp`:`:String`&`,const Upp`:`:String`&`,long`,Upp`:`:Gate`<Upp`:`:int64`,Upp`:`:int64`,Upp`:`:int64`>`):%- [@(0.0.255) s
|
||||
tatic] [_^Upp`:`:AsyncWork^ AsyncWork]<[@(0.0.255) void]>_[* AsyncPut]([_^Upp`:`:SshSession^ S
|
||||
shSession][@(0.0.255) `&]_[*@3 session], [_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 in],
|
||||
[@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path],
|
||||
[@(0.0.255) long]_[*@3 mode], [_^Upp`:`:Gate^ Gate]<[_^Upp`:`:int64^ int64],
|
||||
[_^Upp`:`:int64^ int64], [_^Upp`:`:int64^ int64]>_[*@3 progress])&]
|
||||
[s5;:Upp`:`:Scp`:`:AsyncPut`(Upp`:`:SshSession`&`,Upp`:`:Stream`&`,const Upp`:`:String`&`,long`,Upp`:`:Gate`<Upp`:`:int64`,Upp`:`:int64`,Upp`:`:int64`>`):%- [@(0.0.255) s
|
||||
tatic] [_^Upp`:`:AsyncWork^ AsyncWork]<[@(0.0.255) void]>_[* AsyncPut]([_^Upp`:`:SshSession^ S
|
||||
shSession][@(0.0.255) `&]_[*@3 session], [_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 in],
|
||||
[@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path],
|
||||
[@(0.0.255) long]_[*@3 mode], [_^Upp`:`:Gate^ Gate]<[_^Upp`:`:int64^ int64],
|
||||
[_^Upp`:`:int64^ int64], [_^Upp`:`:int64^ int64]>_[*@3 progress])&]
|
||||
[s2; Uploads [%-*@3 in] to the [%-*@3 path].with access [%-*@3 mode].&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Scp`:`:AsyncGetToFile`(Upp`:`:SshSession`&`,const Upp`:`:String`&`,const Upp`:`:String`&`,Upp`:`:Gate`<Upp`:`:int64`,Upp`:`:int64`,Upp`:`:int64`>`):%- [@(0.0.255) s
|
||||
tatic] [_^Upp`:`:AsyncWork^ AsyncWork]<[@(0.0.255) void]>_[* AsyncGetToFile]([_^Upp`:`:SshSession^ S
|
||||
shSession][@(0.0.255) `&]_[*@3 session], [@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&
|
||||
]_[*@3 src], [@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 dest],
|
||||
[_^Upp`:`:Gate^ Gate]<[_^Upp`:`:int64^ int64], [_^Upp`:`:int64^ int64],
|
||||
[_^Upp`:`:int64^ int64]>_[*@3 progress])&]
|
||||
[s2; Downloads the remote file pointed by [%-*@3 src ]to local file
|
||||
pointed by [%-*@3 dest]. Note that, in case of failure this method
|
||||
[/ does not] automatically delete the partially downloaded file.
|
||||
&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Scp`:`:AsyncPutToFile`(Upp`:`:SshSession`&`,const Upp`:`:String`&`,const Upp`:`:String`&`,long`,Upp`:`:Gate`<Upp`:`:int64`,Upp`:`:int64`,Upp`:`:int64`>`):%- [@(0.0.255) s
|
||||
tatic] [_^Upp`:`:AsyncWork^ AsyncWork]<[@(0.0.255) void]>_[* AsyncPutToFile]([_^Upp`:`:SshSession^ S
|
||||
shSession][@(0.0.255) `&]_[*@3 session], [@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&
|
||||
]_[*@3 src], [@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 dest],
|
||||
[@(0.0.255) long]_[*@3 mode], [_^Upp`:`:Gate^ Gate]<[_^Upp`:`:int64^ int64],
|
||||
[_^Upp`:`:int64^ int64], [_^Upp`:`:int64^ int64]>_[*@3 progress])&]
|
||||
[s2; Uploads the local file pointed by [%-*@3 src] to the remote path
|
||||
pointed by [%-*@3 dest].with access [%-*@3 mode].&]
|
||||
[s3; &]
|
||||
[s4;%- &]
|
||||
[s5;:Upp`:`:Scp`:`:AsyncConsumerGet`(Upp`:`:SshSession`&`,const Upp`:`:String`&`,Upp`:`:Event`<Upp`:`:int64`,const void`*`,int`>`):%- [@(0.0.255) s
|
||||
tatic] [_^Upp`:`:AsyncWork^ AsyncWork]<[@(0.0.255) void]>_[* AsyncConsumerGet]([_^Upp`:`:SshSession^ S
|
||||
shSession][@(0.0.255) `&]_[*@3 session], [@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&
|
||||
]_[*@3 path], [_^Upp`:`:Event^ Event]<[_^Upp`:`:int64^ int64], [@(0.0.255) const]_[@(0.0.255) v
|
||||
oid`*], [@(0.0.255) int]>_[*@3 consumer])&]
|
||||
[s2; Downloads the remote file pointed by [%-*@3 path], using a user`-defined
|
||||
[%-*@3 consumer] function. The first parameter of the consumer
|
||||
function is the unique id of the given scp worker.&]
|
||||
[s3; &]
|
||||
[s0; &]
|
||||
[ {{10000F(128)G(128)@1 [s0; [* Constructor detail]]}}&]
|
||||
[s3;%- &]
|
||||
[s5;:Upp`:`:Scp`:`:Scp`(Upp`:`:SshSession`&`):%- [* Scp]([_^Upp`:`:SshSession^ SshSession
|
||||
|
|
@ -352,24 +257,6 @@ possible. Send() method can be used to send data over the channel.&]
|
|||
oid`*], [@(0.0.255) int]>_[* WhenOutput]&]
|
||||
[s2; This event is emitted whenever data is read from the shell.&]
|
||||
[s3;%- &]
|
||||
[ {{10000F(128)G(128)@1 [s0; [* Multithreaded Method]]}}&]
|
||||
[s3;%- &]
|
||||
[s5;:Upp`:`:SshShell`:`:AsyncRun`(Upp`:`:SshSession`&`,Upp`:`:String`,Upp`:`:Size`,Upp`:`:Event`<Upp`:`:SshShell`&`>`,Upp`:`:Event`<const Upp`:`:String`&`>`):%- [@(0.0.255) s
|
||||
tatic] [_^Upp`:`:AsyncWork^ AsyncWork]<[@(0.0.255) void]>_[* AsyncRun]([_^Upp`:`:SshSession^ S
|
||||
shSession][@(0.0.255) `&]_[*@3 session], [_^Upp`:`:String^ String]_[*@3 terminal],
|
||||
[_^Upp`:`:Size^ Size]_[*@3 pagesize], [_^Upp`:`:Event^ Event]<SshShell[@(0.0.255) `&]>_[*@3 i
|
||||
n], [_^Upp`:`:Event^ Event]<[@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]>_
|
||||
[*@3 out])&]
|
||||
[s2; Runs a generic remote command line interface asynchronously.
|
||||
[%-*@3 terminal] should be set to preferred terminal emulation
|
||||
(ansi, vt100, xterm, etc.). The dimensions of the terminal view
|
||||
(as character cells) can be set using the [%-*@3 pagesize] parameter.
|
||||
[%-*@3 in] event should be used to send data. [%-*@3 out] event should
|
||||
be used to receive data. Throws [^topic`:`/`/SSH`/src`/Upp`_Ssh`_Base`$en`-us`#Upp`:`:Ssh`:`:Error`:`:struct^ S
|
||||
sh`::Error] on failure. Requires a valid ssh [%-*@3 session] during
|
||||
the operation.&]
|
||||
[s3;%- &]
|
||||
[s3;%- &]
|
||||
[ {{10000F(128)G(128)@1 [s0; [* Constructor detail]]}}&]
|
||||
[s3;%- &]
|
||||
[s5;:Upp`:`:SshShell`:`:SshShell`(Upp`:`:SshSession`&`):%- [* SshShell]([_^Upp`:`:SshSession^ S
|
||||
|
|
|
|||
|
|
@ -1,21 +1,17 @@
|
|||
TITLE("Channels: Scp, Exec, Tunnel, Shell")
|
||||
COMPRESSED
|
||||
120,156,221,28,139,114,219,198,241,87,110,162,36,37,53,20,13,128,164,72,145,169,199,177,235,164,158,54,142,38,114,166,153,225,80,2,8,28,197,171,65,0,197,67,50,157,38,223,222,221,189,59,188,248,150,169,88,77,156,17,69,224,110,111,119,111,223,183,167,177,232,118,7,35,199,234,141,222,255,227,199,139,145,197,190,252,210,108,25,39,157,190,217,25,244,58,102,215,58,135,31,102,199,180,122,86,167,107,14,172,139,238,160,211,25,24,67,215,119,146,100,50,246,173,193,128,38,89,45,235,196,234,247,44,179,223,29,116,7,102,167,63,176,96,174,101,24,150,209,183,122,102,183,51,176,122,67,143,39,238,100,108,192,240,14,172,113,113,222,185,48,76,195,232,155,166,209,177,250,70,167,215,53,205,142,5,32,172,190,101,26,189,33,15,188,201,248,239,231,35,156,208,133,9,70,239,220,48,140,115,128,214,237,26,0,29,167,117,59,102,199,176,58,61,243,162,119,62,156,242,91,17,76,198,171,36,245,118,146,212,55,134,34,229,11,69,145,211,29,157,190,232,141,76,152,122,
|
||||
222,58,63,233,195,178,221,30,44,118,129,20,117,96,154,101,157,247,46,204,94,23,80,234,26,214,48,230,255,201,68,204,23,60,72,21,4,97,154,150,57,154,154,253,17,160,240,251,239,191,183,205,174,33,57,213,7,92,76,3,240,182,76,120,6,116,244,205,222,133,113,209,27,152,3,163,211,239,90,189,62,144,30,57,177,179,80,148,76,187,214,72,209,49,104,13,78,206,205,115,224,168,49,0,252,123,23,0,192,0,34,224,19,24,217,131,255,59,131,97,170,38,227,60,156,116,209,186,56,1,38,117,122,70,255,194,232,119,251,189,46,80,98,153,231,38,48,210,64,250,97,27,134,65,24,47,28,127,50,198,9,6,242,122,199,127,195,191,241,153,147,249,64,238,175,55,191,125,245,250,237,217,207,87,108,204,126,253,213,196,151,47,26,176,145,237,174,213,54,154,108,156,24,35,54,62,125,209,31,117,217,85,234,4,158,19,123,236,42,153,179,87,115,39,8,184,159,76,38,191,253,246,245,100,156,116,70,12,63,172,17,187,226,110,22,115,150,204,185,239,179,40,14,211,208,13,
|
||||
125,214,184,227,113,34,194,128,89,77,120,200,61,62,19,1,79,88,194,225,185,227,51,87,130,99,233,50,226,73,91,65,82,16,133,217,51,144,133,236,236,191,227,235,52,140,132,107,15,237,103,246,179,171,171,191,219,207,146,216,181,159,253,28,69,246,13,96,101,223,104,180,236,27,30,216,103,89,98,159,224,187,161,61,188,114,233,131,4,255,154,153,109,141,166,231,164,14,115,195,104,169,81,104,79,142,185,106,50,127,253,129,187,165,149,173,54,251,137,47,194,148,195,162,139,5,48,148,113,24,144,165,200,154,71,194,224,93,134,175,74,56,116,218,236,221,171,75,251,236,205,37,67,4,162,48,78,217,44,140,239,97,111,69,112,203,26,1,79,239,195,248,61,110,222,135,101,243,177,208,186,66,1,41,97,213,69,206,56,190,125,150,138,5,111,49,17,164,32,25,110,42,238,56,139,37,199,164,72,53,52,227,124,144,32,57,108,230,184,252,15,195,179,87,198,147,253,98,154,101,222,105,57,110,192,118,46,28,119,78,66,30,195,6,224,203,95,64,220,99,144,247,230,10,138,74,
|
||||
224,95,114,63,188,103,180,14,76,187,143,157,136,165,115,206,110,121,192,99,225,162,222,41,68,229,24,150,134,184,71,119,194,227,140,59,201,18,80,10,17,251,18,87,104,12,192,128,103,73,196,93,225,248,226,35,247,52,154,82,211,12,90,127,167,246,187,81,77,215,205,209,112,141,114,13,191,58,99,227,23,13,163,109,180,193,196,53,59,76,249,154,14,187,153,140,79,59,4,7,191,12,225,107,121,88,148,77,125,225,234,113,47,58,163,78,137,222,137,196,243,132,140,51,123,55,23,137,226,0,15,92,39,74,50,223,73,129,84,39,96,176,185,22,112,153,84,187,162,213,236,77,170,121,5,3,217,130,59,65,130,27,167,6,251,75,150,198,240,104,198,227,24,183,106,38,124,24,55,5,69,224,60,96,126,232,130,141,154,135,73,74,10,227,104,129,196,39,109,164,72,97,3,104,121,176,83,119,192,225,89,28,46,86,54,172,69,211,231,78,194,64,26,223,195,210,32,199,169,112,229,54,116,70,192,185,210,70,124,215,48,173,65,243,123,250,249,194,212,123,193,46,137,79,236,7,
|
||||
158,206,67,143,253,83,36,105,177,45,18,64,210,171,111,204,247,60,181,65,109,2,192,95,191,72,145,76,251,107,187,85,60,224,206,2,30,52,107,27,200,166,97,232,79,110,96,101,128,50,105,148,223,16,68,120,117,115,93,129,122,205,228,103,121,127,153,253,53,194,120,1,251,236,164,243,73,139,85,38,193,202,52,137,163,227,91,55,41,204,210,73,115,45,105,97,4,86,34,13,99,187,97,55,143,64,163,6,215,104,126,118,82,193,30,252,45,188,15,252,208,241,18,50,3,74,232,80,52,153,147,178,241,87,103,249,34,36,87,49,79,179,24,164,90,128,148,162,140,75,212,208,90,201,231,160,30,124,17,165,75,150,208,11,6,38,106,230,8,31,164,191,93,210,234,238,67,164,72,50,116,19,115,142,44,60,15,23,132,221,104,30,127,255,215,239,37,192,75,33,220,100,225,172,178,173,81,136,150,219,99,211,101,121,123,217,4,246,51,57,108,55,97,197,55,1,11,66,112,103,83,48,95,239,113,200,34,244,192,177,74,81,2,155,73,171,167,104,75,37,213,20,130,0,216,41,
|
||||
103,225,52,117,192,117,121,44,75,112,34,108,222,79,52,163,209,4,203,137,134,103,63,137,185,204,64,98,234,202,215,218,160,164,126,8,159,155,53,19,96,193,150,28,164,74,144,77,180,216,209,180,184,244,14,81,85,111,145,167,108,98,255,245,102,12,95,32,62,239,110,16,79,98,197,6,202,63,133,33,159,74,221,83,226,81,85,133,143,36,55,21,141,126,146,226,51,185,57,148,53,71,149,163,163,154,188,207,200,51,176,120,63,71,210,194,42,219,9,200,96,248,187,219,192,194,90,247,2,236,172,227,66,196,156,79,167,117,10,131,155,198,25,71,43,155,100,52,170,100,1,119,68,108,63,128,225,4,232,32,104,30,172,252,78,133,153,42,130,203,19,104,107,116,162,204,40,252,134,40,64,152,11,72,135,62,164,4,148,89,132,193,29,15,4,4,188,92,217,224,132,97,168,63,23,183,115,6,91,56,195,18,0,190,196,212,13,192,203,5,101,252,175,151,196,100,183,141,112,151,204,129,76,74,213,61,32,84,184,131,188,192,99,9,228,245,19,69,60,36,32,152,174,227,87,198,
|
||||
188,140,92,12,122,142,220,85,200,88,22,86,129,140,5,71,237,74,177,94,58,9,95,151,94,225,199,235,56,6,209,134,95,192,151,101,110,10,194,113,5,207,229,99,137,65,225,221,146,54,58,54,68,159,188,23,102,54,138,29,45,72,165,93,30,165,236,219,100,25,184,175,64,240,178,5,143,193,119,53,154,173,156,46,200,1,110,1,72,50,97,183,14,38,225,210,223,1,35,61,197,41,136,203,145,78,61,78,173,146,243,112,40,183,69,196,160,105,84,169,225,144,105,229,142,148,96,138,192,19,174,76,72,88,22,136,255,128,216,8,143,216,142,201,70,136,25,119,62,49,79,73,112,13,103,17,102,50,38,160,170,68,58,135,40,15,147,5,199,199,173,92,2,162,144,139,228,105,10,87,48,97,225,184,12,114,225,44,243,172,144,48,15,83,72,94,234,176,67,36,187,4,171,197,166,89,138,9,140,131,2,39,185,1,35,12,45,255,180,255,168,1,247,2,88,239,76,177,102,64,129,76,6,179,1,176,132,170,224,181,217,91,212,56,34,64,110,81,77,40,9,8,74,47,188,21,
|
||||
177,22,54,251,47,240,198,17,105,146,242,8,69,50,67,228,233,73,37,65,218,18,112,208,206,83,156,90,202,223,21,240,205,6,82,61,248,30,246,204,254,70,125,1,51,113,222,205,95,173,251,246,124,213,166,38,41,168,134,59,41,133,152,132,208,191,128,248,107,150,255,58,249,102,163,53,124,142,6,89,19,81,241,87,57,29,215,172,248,125,189,245,212,170,123,68,67,156,79,66,30,93,51,252,89,166,130,24,114,205,232,163,50,124,191,23,207,213,98,90,53,31,144,254,228,241,241,94,113,233,39,137,73,17,144,252,241,114,83,154,115,23,10,239,233,203,203,190,25,239,103,147,177,45,66,86,138,21,240,85,69,224,192,46,169,239,136,253,1,82,87,73,137,42,82,119,80,56,247,164,100,175,158,154,61,76,246,158,102,156,249,121,4,243,225,178,179,71,174,244,39,151,157,167,147,215,125,62,163,182,62,17,170,91,177,246,198,164,231,32,47,250,46,252,14,204,229,97,190,244,201,68,98,91,61,170,164,236,9,248,85,200,165,142,1,6,18,141,207,232,106,247,242,180,58,253,
|
||||
140,93,54,1,145,149,39,47,27,6,17,57,165,92,3,15,13,33,163,131,180,2,210,28,149,46,202,188,76,102,136,108,252,140,121,33,36,91,65,152,66,204,152,165,225,2,165,4,50,158,37,192,242,121,42,19,38,72,165,82,33,31,42,140,241,60,7,80,104,179,131,252,252,17,245,226,73,218,237,63,171,118,60,69,139,174,13,58,202,231,86,157,64,94,104,91,175,84,140,142,16,54,105,207,17,92,64,169,210,242,160,132,234,245,29,15,210,186,64,203,41,40,116,246,169,221,130,135,143,36,199,37,228,159,128,36,175,228,79,196,155,107,70,31,219,196,108,205,194,53,154,237,211,218,56,152,171,197,205,85,76,120,144,169,86,56,203,147,34,7,171,58,177,125,38,251,123,60,61,38,95,128,205,178,192,197,242,97,123,115,29,141,231,195,243,209,88,152,194,23,121,57,77,143,188,21,192,25,150,184,145,170,48,149,197,214,216,167,56,139,251,79,69,199,48,6,141,72,193,105,236,62,78,199,143,181,130,46,5,244,148,122,28,62,81,152,244,78,148,240,107,179,151,34,80,91,
|
||||
130,61,7,2,222,80,197,183,72,70,245,236,50,27,234,125,5,27,27,60,100,175,210,10,249,165,54,143,90,55,211,206,86,15,5,241,145,219,61,180,153,139,67,178,98,69,63,85,3,127,109,238,110,1,81,51,72,124,81,138,125,221,106,164,59,141,0,86,173,231,227,205,140,45,195,140,5,92,86,74,227,76,142,88,223,190,180,190,97,169,69,16,146,121,152,249,30,73,60,224,21,43,53,210,109,71,186,175,36,72,184,227,181,53,67,63,181,219,100,173,88,28,220,110,178,206,43,20,2,242,154,120,202,247,104,201,216,240,96,197,216,163,189,66,179,173,32,31,225,176,202,93,120,7,23,30,234,197,170,125,230,240,56,94,73,235,11,78,29,216,193,114,40,187,142,122,188,247,135,115,204,24,73,27,160,54,61,41,244,80,171,187,246,52,213,42,29,34,90,209,187,86,209,29,131,181,98,213,201,10,184,69,120,236,17,148,171,121,173,234,24,142,167,80,171,35,17,69,169,97,56,154,127,16,41,172,231,113,44,69,75,159,137,203,201,83,12,50,23,229,128,44,183,84,180,144,
|
||||
60,79,156,101,152,113,148,166,18,52,58,40,161,115,152,3,116,246,48,159,86,72,162,254,117,187,111,83,70,253,24,254,77,239,238,38,39,167,204,221,110,71,167,168,50,246,119,117,178,41,118,187,179,171,53,206,238,225,238,20,212,135,57,60,107,179,171,35,110,160,175,123,247,234,242,217,134,182,221,5,71,71,39,146,69,178,217,211,193,116,150,18,142,212,228,136,94,99,26,66,2,224,250,2,15,241,128,191,178,67,149,22,80,191,194,67,245,218,19,49,167,112,12,93,139,43,29,38,194,87,253,150,149,182,225,118,193,142,99,54,71,110,240,58,197,78,129,40,5,128,228,246,14,176,117,109,16,106,226,17,140,100,22,251,107,204,253,222,40,82,178,243,71,224,137,145,204,154,156,64,101,34,32,93,121,16,250,109,154,98,175,25,238,181,148,30,31,27,25,164,40,186,18,31,140,183,48,237,116,226,91,158,31,206,209,10,229,195,58,4,186,185,163,66,15,67,6,178,69,150,164,212,38,231,128,205,165,115,108,9,154,186,112,3,200,23,10,37,16,1,53,63,200,180,162,241,
|
||||
186,125,219,102,246,23,227,87,50,81,198,241,67,211,24,24,246,23,205,246,132,93,250,28,11,68,65,126,62,125,63,199,180,134,178,142,92,9,64,213,180,244,163,15,129,172,195,149,237,113,96,192,1,29,82,206,120,25,165,120,108,94,29,64,146,173,180,181,164,64,101,220,5,213,159,118,214,146,202,18,131,97,23,15,236,6,74,198,14,241,144,67,171,210,81,219,213,77,91,238,203,85,110,92,236,20,200,27,108,122,91,101,89,99,182,69,148,233,199,233,67,240,126,36,169,94,121,9,169,177,124,61,5,202,61,251,230,225,92,162,174,75,233,202,42,169,115,85,26,232,162,147,2,68,118,24,44,179,8,104,241,85,173,74,14,208,31,21,102,72,200,74,55,240,142,13,9,181,209,170,11,38,5,23,9,247,97,33,122,37,179,113,231,14,2,6,103,10,74,225,45,65,207,32,248,71,64,4,220,169,60,66,216,216,66,196,19,82,4,133,99,153,135,121,248,18,133,17,121,50,79,246,89,81,179,139,155,102,142,47,135,75,112,224,3,196,109,41,148,147,88,182,171,198,164,222,
|
||||
177,67,183,26,102,75,80,99,39,173,93,123,80,108,64,163,0,184,151,116,79,77,18,136,53,165,127,17,120,102,225,99,47,173,100,149,253,5,110,60,252,179,191,104,81,171,81,193,19,199,243,176,48,199,147,156,54,141,201,84,80,166,216,102,111,249,125,101,255,244,64,224,84,134,45,181,224,213,124,42,185,161,1,81,9,31,210,251,45,61,42,90,108,53,225,85,137,91,97,0,151,155,183,112,62,136,69,182,96,65,182,152,202,74,74,196,3,79,117,142,229,184,192,4,66,3,32,128,212,161,124,254,155,75,79,62,203,98,0,3,158,95,217,250,93,5,192,178,21,144,152,151,227,70,245,110,155,195,149,147,106,113,164,156,119,93,142,165,214,41,185,100,73,169,96,37,129,161,131,42,249,163,220,24,87,24,9,179,246,105,234,123,172,96,187,224,90,241,101,87,192,173,88,241,200,37,165,60,94,219,179,176,116,64,180,77,197,140,237,193,118,245,154,213,30,177,182,132,249,208,80,251,100,103,89,169,92,193,81,229,32,9,161,165,98,107,89,48,170,223,36,42,230,129,88,201,
|
||||
234,186,246,2,235,235,64,152,83,22,149,35,57,165,118,171,44,201,34,105,131,235,117,161,7,87,128,106,245,43,89,1,227,69,253,75,163,74,216,4,97,153,168,29,117,171,162,64,245,120,183,154,74,210,242,83,182,57,250,208,15,196,71,190,197,14,1,132,35,132,29,192,158,133,8,28,191,90,234,128,149,97,26,252,204,235,251,183,60,193,175,171,49,213,94,20,237,17,0,30,159,156,181,97,208,189,240,86,250,31,138,183,115,46,110,231,69,254,0,56,161,105,214,247,24,183,170,195,70,219,60,203,124,170,152,228,126,49,199,81,11,227,148,107,7,30,197,92,182,181,230,131,24,95,160,126,83,89,24,20,86,180,216,93,10,2,217,98,31,112,68,139,241,212,109,55,229,161,132,7,106,24,36,228,46,117,243,175,6,114,39,192,183,55,64,159,192,20,160,58,96,130,0,219,150,52,181,87,198,245,11,143,174,16,37,94,177,9,210,170,99,25,201,31,10,63,242,99,20,37,26,197,113,200,30,62,56,151,26,52,234,161,191,177,222,186,53,159,196,137,199,148,25,218,246,115,
|
||||
196,247,39,217,97,158,16,64,68,239,108,234,96,220,226,68,24,114,209,118,228,183,189,149,144,212,70,62,97,89,41,122,156,177,237,64,162,45,239,186,92,93,41,51,93,237,49,72,157,247,200,10,39,230,90,176,228,81,174,158,139,34,128,87,179,196,199,61,58,89,75,123,255,157,244,20,224,52,118,27,142,146,245,168,4,19,8,235,186,228,86,87,54,152,21,171,28,43,75,195,228,233,109,230,251,155,172,136,39,146,200,119,150,197,93,143,141,246,38,113,99,14,217,227,238,129,211,108,70,74,166,71,154,134,213,133,47,167,197,151,66,120,47,127,188,122,243,11,8,149,191,108,23,130,236,172,220,230,214,242,251,58,192,4,33,169,251,110,140,12,74,39,149,36,22,58,192,170,229,54,37,3,161,73,175,71,251,42,186,101,121,107,76,142,5,107,120,242,111,58,192,64,170,58,67,226,39,22,17,136,29,70,40,144,210,216,227,188,30,98,79,134,84,14,201,163,59,201,190,213,212,34,79,13,145,40,57,10,95,40,242,242,249,154,171,121,98,37,35,74,124,38,111,56,58,222,
|
||||
179,251,88,128,186,192,72,188,136,162,153,2,81,66,232,10,74,12,127,126,11,204,134,111,239,57,228,30,76,253,125,10,61,158,32,65,180,99,178,31,94,178,134,8,0,19,39,183,178,171,224,241,10,132,186,226,8,170,153,44,194,144,82,155,210,45,153,102,97,58,236,83,106,17,66,148,84,155,16,24,119,17,28,166,130,50,255,32,13,44,222,194,215,87,121,54,98,159,238,204,133,164,106,149,213,178,2,129,212,179,242,164,170,91,186,138,241,193,52,81,76,30,46,201,121,50,21,208,190,23,25,149,102,218,106,229,225,93,169,203,42,214,43,212,52,65,222,40,225,164,38,158,58,58,73,72,58,83,245,142,4,143,66,206,157,127,177,65,231,73,235,254,96,131,122,5,223,254,53,231,1,96,81,206,145,244,179,9,227,216,84,81,54,227,220,113,231,53,13,37,149,80,52,176,5,94,228,138,124,94,227,202,33,110,250,10,114,114,89,199,91,17,6,106,76,65,97,192,49,155,10,120,238,182,200,81,2,151,30,0,3,148,117,34,183,101,149,53,141,35,18,138,54,178,251,174,
|
||||
189,51,248,216,3,137,195,26,192,242,72,243,50,163,34,128,206,98,116,148,70,129,86,190,125,249,227,132,206,233,101,179,148,8,240,124,143,138,35,7,236,231,37,184,108,202,47,26,171,201,198,129,254,85,131,170,152,128,122,2,145,124,204,73,189,226,170,198,88,141,78,201,84,174,70,168,229,92,254,227,228,200,214,239,123,158,22,140,176,155,180,135,53,22,84,8,97,165,9,147,70,243,102,85,0,116,76,168,195,187,210,77,51,44,96,174,33,89,4,117,146,247,57,56,42,147,160,34,225,50,37,187,136,168,77,1,90,202,7,121,0,59,226,113,97,22,11,90,84,241,147,2,62,237,37,87,226,193,205,38,178,22,111,22,187,137,209,212,234,223,117,216,143,3,104,23,223,160,18,84,137,174,118,160,81,227,92,62,178,114,108,73,230,20,209,229,11,145,82,169,23,134,49,244,203,202,248,87,138,40,64,11,196,244,224,36,162,16,204,242,20,155,107,209,24,228,213,207,213,88,4,120,65,151,12,67,170,162,207,121,222,215,115,40,145,63,210,81,254,54,42,63,165,157,142,21,
|
||||
75,236,102,15,254,245,43,73,21,213,210,29,175,168,89,18,183,14,41,161,84,175,25,203,74,202,158,69,20,234,132,164,186,195,218,246,205,170,61,175,148,85,214,247,112,230,176,191,182,159,215,135,172,119,17,143,211,220,41,107,33,143,117,49,233,65,133,159,205,205,157,154,105,53,116,158,151,47,173,28,32,175,123,58,208,231,171,127,117,230,144,106,13,120,26,224,243,60,14,131,48,75,48,188,252,127,171,205,172,41,187,228,68,224,181,25,169,182,5,17,43,246,168,93,110,29,218,56,60,230,46,199,66,178,190,129,31,135,247,201,238,32,151,238,204,127,185,239,157,249,164,184,51,95,246,1,229,136,191,184,231,95,171,235,175,189,226,95,181,172,143,116,30,82,68,144,250,247,93,167,33,50,130,122,244,195,144,171,106,34,176,171,201,86,183,28,79,38,255,3,215,250,52,181,
|
||||
120,156,213,90,11,111,219,70,18,254,43,139,184,45,36,67,86,248,180,100,233,238,144,54,151,180,193,181,169,81,165,184,2,130,108,174,200,149,181,13,95,199,135,29,165,215,254,246,155,217,7,73,81,111,159,93,220,53,133,37,145,187,179,243,158,111,134,156,114,199,25,142,169,229,142,63,254,227,199,171,177,69,190,248,194,236,25,103,246,192,180,135,174,109,58,214,37,252,49,109,211,114,45,219,49,135,214,149,51,180,237,161,49,242,67,154,231,179,105,104,13,135,98,147,213,179,206,172,129,107,153,3,103,232,12,77,123,48,180,96,175,101,24,150,49,176,92,211,177,135,150,59,10,88,238,207,166,6,44,183,225,140,171,75,251,202,48,13,99,96,154,134,109,13,12,219,117,76,211,182,128,132,53,176,76,195,29,177,56,152,77,191,187,28,227,6,7,54,24,238,165,97,24,151,64,205,113,12,160,142,219,28,219,180,13,203,118,205,43,247,114,52,103,119,60,158,77,55,69,114,15,138,52,48,70,188,96,145,146,136,58,227,243,87,238,216,132,173,151,189,203,179,1,28,235,184,
|
||||
112,216,21,74,100,195,54,203,186,116,175,76,215,1,150,28,195,26,101,236,95,37,207,88,196,226,66,81,224,166,105,153,227,185,57,24,3,11,127,252,241,71,223,116,12,169,169,1,240,98,26,192,183,101,194,53,144,99,96,186,87,198,149,59,52,135,134,61,112,44,119,0,162,167,52,163,145,146,100,238,88,99,37,199,176,55,60,187,52,47,65,163,198,16,248,119,175,128,128,1,66,192,39,40,210,133,255,237,225,168,80,155,113,31,110,186,234,93,157,129,146,108,215,24,92,25,3,103,224,58,32,137,101,94,154,160,72,3,229,7,51,140,226,36,139,104,56,155,226,6,3,117,125,224,191,209,223,217,130,150,33,136,251,219,237,239,95,190,121,127,241,243,132,76,201,111,191,153,120,243,85,7,12,217,119,172,190,209,37,211,220,24,147,233,249,171,193,216,33,147,130,198,1,205,2,50,201,151,228,245,146,198,49,11,243,217,236,247,223,191,154,77,115,123,76,240,195,26,147,9,243,203,140,145,124,201,194,144,164,89,82,36,126,18,146,206,61,203,114,158,196,196,234,194,69,22,
|
||||
176,5,143,89,78,114,6,215,105,72,124,73,142,20,171,148,229,125,69,73,81,228,166,107,160,10,201,197,191,167,55,69,146,114,223,27,121,47,189,151,147,201,119,222,203,60,243,189,151,63,167,169,119,11,92,121,183,154,45,239,150,197,222,69,153,123,103,120,111,228,141,38,190,248,16,142,127,67,204,190,102,51,160,5,37,126,146,174,52,11,253,217,83,158,154,47,223,124,98,126,227,100,171,79,126,98,81,82,48,56,52,138,64,161,132,193,130,178,64,213,60,19,7,31,74,188,213,224,193,238,147,15,175,175,189,139,119,215,4,25,72,147,172,32,139,36,123,0,219,242,248,142,116,98,86,60,36,217,71,52,222,167,85,247,185,216,154,160,131,52,184,114,80,51,52,244,46,10,30,177,30,225,113,1,158,225,23,252,158,145,76,106,76,186,84,71,43,46,4,15,146,203,22,212,103,127,26,159,110,147,79,242,139,105,54,117,167,253,184,3,230,140,168,191,20,78,158,129,1,240,230,47,224,238,25,248,123,119,131,69,229,240,223,176,48,121,32,226,28,216,246,144,209,148,20,75,
|
||||
70,238,88,204,50,238,99,220,41,70,229,26,82,36,104,163,123,30,48,194,104,190,2,150,18,228,190,161,21,177,6,104,192,181,60,101,62,167,33,255,204,2,205,166,140,52,67,156,127,48,250,253,180,21,235,230,120,180,37,184,70,95,94,144,233,171,142,209,55,250,144,226,186,54,81,181,198,38,183,179,233,185,45,232,224,143,17,252,108,46,75,203,121,200,125,189,238,149,61,182,27,242,206,36,159,103,34,57,147,15,75,158,43,13,176,216,167,105,94,134,180,0,81,105,76,192,184,22,104,89,132,246,90,84,147,119,133,214,21,44,36,17,163,113,142,134,83,139,195,21,41,50,184,180,96,89,134,166,90,240,16,214,205,33,16,24,139,73,152,248,144,163,150,73,94,136,128,161,218,33,241,74,31,37,82,220,0,91,1,88,234,30,52,188,200,146,104,195,96,61,177,125,73,115,2,222,248,17,142,6,63,46,184,47,205,96,143,65,115,13,67,188,237,152,214,176,251,173,248,251,202,212,182,32,215,66,79,228,7,86,44,147,128,124,207,243,162,54,139,36,144,187,109,195,76,232,
|
||||
61,123,11,18,121,16,59,49,8,1,74,201,188,115,175,39,127,233,181,5,74,238,125,229,117,91,38,36,243,36,9,103,183,112,182,166,51,235,52,111,11,42,112,191,121,9,14,152,221,122,231,104,72,146,210,98,57,235,145,109,91,110,111,214,14,191,33,242,179,233,25,196,251,10,207,6,58,152,170,103,93,93,27,166,95,94,84,196,245,15,177,130,244,27,62,234,236,212,201,247,9,13,182,232,68,10,191,139,47,84,130,222,248,8,37,108,103,254,56,126,119,217,176,102,148,209,232,25,173,215,84,9,156,36,84,194,16,168,108,51,21,224,184,189,134,130,251,39,155,169,45,104,111,139,221,182,137,221,176,215,73,50,36,101,177,195,107,79,178,49,146,217,105,239,3,177,254,26,15,204,74,191,128,60,21,176,130,242,240,136,88,135,143,78,163,122,177,28,97,87,229,24,231,34,1,55,85,81,173,185,33,245,247,237,42,201,213,77,45,99,131,191,62,249,134,199,65,46,234,21,38,68,14,119,104,236,51,172,63,74,122,189,187,105,248,118,210,219,89,125,36,144,218,16,191,81,
|
||||
131,90,80,235,96,29,82,20,159,185,22,169,74,1,165,7,138,113,222,0,123,29,252,218,61,92,159,212,14,168,73,148,228,240,17,106,28,164,97,16,208,106,21,164,119,11,178,74,74,18,51,168,67,160,126,128,31,98,197,118,108,181,29,77,245,4,133,124,153,148,97,32,252,30,248,202,72,137,12,16,141,137,116,209,139,115,70,131,190,86,232,127,91,10,183,186,197,201,181,112,91,66,169,29,228,141,208,105,149,74,219,5,176,119,240,194,70,182,1,197,137,100,163,40,111,79,177,39,85,59,63,10,218,105,247,224,30,149,178,78,218,3,128,71,198,243,86,77,37,41,56,10,132,183,215,241,186,207,160,46,77,190,211,253,127,212,152,49,150,57,64,25,61,175,227,80,135,187,108,115,3,50,95,137,196,168,18,33,50,186,22,119,189,140,21,101,6,1,207,11,104,137,117,155,13,188,165,101,1,186,106,150,146,222,250,26,224,5,114,196,198,74,100,81,70,24,174,102,159,56,212,201,4,186,4,42,19,180,60,142,220,211,176,100,34,93,200,139,173,76,37,14,42,125,252,181,
|
||||
40,195,112,213,220,42,168,61,112,72,2,115,70,140,83,240,235,105,53,173,246,68,253,117,127,109,83,73,253,41,234,155,182,238,174,34,167,210,221,225,66,167,164,50,142,47,117,178,99,223,95,236,90,93,253,17,229,78,81,125,92,193,179,118,151,58,161,13,172,117,31,94,95,191,220,49,83,136,24,22,58,158,71,249,238,74,7,219,73,33,120,20,29,24,86,141,121,82,44,225,72,206,226,2,245,43,219,103,113,128,250,10,23,213,237,128,103,204,199,202,138,165,197,151,5,19,233,171,102,112,109,166,209,175,213,241,148,157,219,142,170,83,91,10,92,41,6,38,119,37,210,221,24,86,109,124,130,36,89,102,225,150,116,127,52,139,61,200,220,127,10,159,136,100,90,240,91,21,13,196,209,224,93,21,8,253,186,40,88,148,22,104,107,233,61,33,24,81,185,162,47,249,65,188,133,115,16,154,221,177,66,71,169,56,129,208,234,183,32,138,179,29,153,138,33,228,25,98,43,149,1,251,122,25,42,144,68,37,118,30,73,12,233,43,22,254,175,72,139,17,65,76,35,86,7,1,
|
||||
143,23,56,156,69,30,250,164,243,166,127,215,39,222,139,233,107,57,83,192,245,35,211,24,26,222,139,110,127,70,174,67,70,115,240,85,204,195,197,18,88,123,88,66,227,34,14,168,131,0,66,77,123,63,214,144,50,230,190,160,142,9,28,216,17,193,153,173,210,130,5,189,214,2,225,217,42,90,27,1,212,228,29,226,0,78,215,32,236,40,167,70,216,197,98,175,131,158,113,192,61,228,210,117,239,104,89,117,151,201,67,121,202,173,159,148,120,205,251,43,180,97,54,113,247,250,178,230,108,143,43,139,63,231,143,225,251,153,188,122,227,166,119,174,110,207,65,242,192,187,125,188,150,32,86,222,169,82,150,55,43,254,186,55,136,167,48,138,144,200,195,144,153,121,44,14,223,140,170,252,132,248,81,48,67,82,86,177,129,15,0,132,83,27,189,182,99,10,112,145,179,16,14,18,183,22,60,195,241,219,61,0,6,58,135,160,8,86,16,103,0,254,145,144,32,78,215,46,33,109,124,174,195,114,17,8,138,199,166,14,43,248,146,38,169,168,100,1,92,129,114,131,135,65,1,41,
|
||||
105,40,151,75,114,80,3,248,93,3,202,73,46,251,235,201,132,248,208,246,1,197,50,151,157,151,24,185,46,86,16,198,180,104,205,100,149,26,48,41,0,239,141,216,83,155,56,114,45,218,191,20,42,51,15,139,149,86,149,247,2,13,15,255,188,23,80,149,64,132,90,39,52,8,50,38,103,199,74,54,205,201,156,139,78,177,79,222,179,135,53,251,233,133,160,169,18,150,130,219,112,160,8,38,195,4,162,26,62,148,247,107,113,169,211,133,122,141,205,86,37,248,186,199,109,40,128,73,227,69,244,19,143,202,136,196,101,52,7,219,38,11,146,178,88,14,204,27,188,192,6,193,6,80,0,175,67,255,252,149,201,74,190,40,51,32,3,149,95,229,250,67,179,163,102,22,144,156,55,113,163,186,183,175,224,202,77,45,28,41,247,221,52,177,212,182,32,151,42,97,89,93,161,4,49,44,80,141,122,84,37,227,53,69,194,174,221,33,180,103,110,242,68,96,187,214,90,253,227,16,224,86,170,120,230,145,82,133,215,142,28,44,157,128,182,197,48,99,63,216,94,127,6,116,4,214,
|
||||
150,52,31,11,181,207,14,142,149,154,19,28,53,14,146,20,122,10,91,203,129,81,251,49,71,189,15,220,74,100,187,170,101,221,62,7,194,158,178,158,28,201,45,173,71,94,121,153,202,28,220,158,11,61,122,2,212,154,95,201,9,24,171,231,95,154,85,193,77,156,52,133,58,48,183,170,7,84,207,247,200,165,225,45,63,149,187,209,135,190,192,63,179,61,121,8,40,60,1,236,0,245,68,60,166,225,250,168,3,78,134,109,240,87,227,15,122,199,114,252,185,137,169,142,146,232,8,0,248,244,226,108,133,65,15,60,216,120,228,84,223,93,50,126,183,172,251,7,224,9,83,179,126,200,186,55,28,118,230,230,69,25,138,137,73,85,23,43,30,181,51,206,153,46,224,105,198,240,49,35,58,183,90,68,88,132,241,45,198,194,16,176,188,71,238,11,112,200,30,249,132,43,122,132,21,126,191,219,135,164,0,176,7,194,48,206,69,185,76,36,160,170,136,220,115,168,237,29,136,39,124,40,1,225,128,13,2,152,45,239,234,170,140,231,215,21,93,49,42,116,69,102,40,171,198,50,
|
||||
82,63,2,126,84,15,46,148,107,16,241,118,10,3,218,71,212,224,202,107,48,169,39,225,206,121,235,222,126,18,55,62,165,207,8,179,95,34,191,63,201,215,126,114,65,16,217,187,152,83,196,45,52,69,200,37,204,81,189,138,162,156,164,181,242,127,216,87,222,87,61,36,143,53,219,36,194,169,221,100,162,210,52,45,139,4,27,83,232,67,113,184,71,63,162,42,40,20,9,229,88,242,169,183,222,139,46,0,2,131,23,128,142,79,176,253,91,89,41,160,104,28,78,28,141,236,177,6,38,144,214,77,163,172,110,24,152,212,167,60,85,151,134,205,211,251,50,12,119,101,145,128,231,105,72,87,85,147,101,236,204,55,185,159,49,232,30,15,47,156,151,11,17,100,122,165,105,88,14,62,92,172,127,212,206,123,253,227,228,221,47,224,84,225,170,95,59,50,221,120,213,68,251,239,155,24,27,132,188,93,187,17,25,136,55,76,160,76,199,10,72,104,128,213,234,109,26,9,66,139,222,70,251,10,221,138,246,70,248,78,197,5,233,4,242,133,51,88,40,166,206,208,248,241,40,5,
|
||||
183,67,132,2,45,141,55,173,230,33,222,108,36,198,33,21,186,147,234,219,108,45,170,214,16,133,146,171,240,134,18,175,218,175,181,90,53,86,18,81,226,53,244,116,64,55,193,203,135,140,67,184,192,74,8,182,74,41,128,18,18,159,139,198,240,231,247,160,108,248,245,145,65,239,65,212,203,115,122,189,160,4,104,199,36,63,124,67,58,60,6,78,104,149,101,55,201,71,116,133,113,132,4,32,52,243,40,73,68,107,147,66,214,192,65,17,104,190,91,167,14,239,188,64,36,136,44,201,198,11,147,59,143,79,11,65,217,127,136,8,172,239,194,207,215,85,55,178,247,1,122,181,189,133,241,215,40,136,240,92,187,178,30,91,122,138,241,201,52,209,77,30,239,201,85,51,21,11,187,215,29,149,86,218,230,228,65,128,105,165,190,76,159,208,138,4,49,249,0,172,141,97,18,168,71,39,185,240,206,66,221,19,142,39,32,231,193,215,201,116,159,180,237,109,50,117,11,126,253,115,201,98,224,162,217,35,233,107,51,194,32,32,139,102,26,103,212,95,182,34,84,132,132,146,129,64,
|
||||
85,40,120,26,178,150,86,78,41,211,19,232,201,229,28,111,195,25,238,19,30,200,151,72,240,181,222,29,3,60,127,31,114,148,196,247,191,179,177,231,148,29,239,94,84,126,149,31,123,246,65,240,113,4,19,39,85,147,188,66,154,215,165,24,2,232,46,70,163,52,1,180,42,243,85,151,115,241,156,94,188,189,7,95,240,249,158,24,142,156,96,207,107,40,217,162,191,232,108,54,27,39,214,87,77,106,45,5,180,27,136,252,115,37,234,132,169,25,227,58,58,21,169,114,19,161,54,123,249,207,179,39,206,126,223,178,162,86,132,215,21,54,108,169,96,77,16,210,216,48,235,116,111,55,29,64,99,66,13,239,112,60,95,2,72,131,84,129,3,204,45,34,243,184,45,242,49,15,142,154,34,40,36,220,148,228,144,16,173,45,32,75,243,65,30,208,78,89,86,167,197,90,22,53,252,20,128,79,87,201,13,60,184,59,69,182,240,102,109,77,68,83,152,151,23,148,135,101,198,78,210,0,230,197,119,24,4,235,66,191,193,44,121,67,196,199,236,47,127,67,193,171,149,107,143,45,
|
||||
69,58,69,118,89,196,11,49,234,133,101,4,235,178,74,254,107,67,20,144,5,48,61,20,137,52,129,180,12,21,161,47,146,65,53,253,220,196,34,160,11,241,38,121,34,166,232,75,86,189,215,115,170,144,63,138,71,249,251,164,60,144,21,49,125,65,86,220,196,152,149,118,228,17,135,213,131,175,230,75,169,196,44,157,6,245,204,82,104,235,57,159,250,215,169,91,127,63,52,134,148,169,235,217,167,144,147,245,10,124,232,237,54,53,139,36,179,217,127,0,126,201,176,118,
|
||||
|
||||
|
|
|
|||
|
|
@ -320,81 +320,45 @@ Intended to be called from WhenWait routine.&]
|
|||
[s5;:Upp`:`:SFtp`:`:Get`(Upp`:`:SFtpHandle`,void`*`,int`): [@(0.0.255) int]_[* Get]([_^Upp`:`:SFtpHandle^ S
|
||||
FtpHandle]_[*@3 handle], [@(0.0.255) void]_`*[*@3 ptr], [@(0.0.255) int]_[*@3 size]_`=_INT`_
|
||||
MAX)&]
|
||||
[s2;%% [%-*@3 handle] [%-*@3 ptr] [%-*@3 size] .&]
|
||||
[s2;%% Reads at most [%-*@3 size] bytes data from the remote file object
|
||||
associated with [%-*@3 handle] into the buffer pointed by [%-*@3 ptr],
|
||||
trying to do so at most for a specified timeout. Returns the
|
||||
number of bytes actually written.&]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:Upp`:`:SFtp`:`:Put`(Upp`:`:SFtpHandle`,const void`*`,int`): [@(0.0.255) bool]_[* Put
|
||||
]([_^Upp`:`:SFtpHandle^ SFtpHandle]_[*@3 handle], [@(0.0.255) const]_[@(0.0.255) void]_`*
|
||||
[*@3 ptr], [@(0.0.255) int]_[*@3 size])&]
|
||||
[s2;%% [%-*@3 handle] [%-*@3 ptr] [%-*@3 size] .&]
|
||||
[s2;%% Writes at most [%-*@3 size] bytes from buffer pointed by [%-*@3 ptr]
|
||||
into the remote file object associated with [%-*@3 handle], trying
|
||||
to do so at most for a specified timeout. Returns the number
|
||||
of bytes actually written.&]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:Upp`:`:SFtp`:`:SaveFile`(const char`*`,const Upp`:`:String`&`): [@(0.0.255) bool]_
|
||||
[* SaveFile]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path], [@(0.0.255) const]_[_^Upp`:`:String^ S
|
||||
tring][@(0.0.255) `&]_[*@3 data])&]
|
||||
[s2;%% [%-*@3 path] [%-*@3 data] .&]
|
||||
[s2;%% Saves the content of [%-*@3 data ]to remote [%-*@3 path]. Returns
|
||||
true on success.&]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:Upp`:`:SFtp`:`:LoadFile`(const char`*`): [_^Upp`:`:String^ String]_[* LoadFile]([@(0.0.255) c
|
||||
onst]_[@(0.0.255) char]_`*[*@3 path])&]
|
||||
[s2;%% [%-*@3 path] .&]
|
||||
[s2;%% Returns the content of the remote [%-*@3 path].&]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:Upp`:`:SFtp`:`:SaveFile`(const char`*`,Upp`:`:Stream`&`): [@(0.0.255) bool]_[* SaveF
|
||||
ile]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 path], [_^Upp`:`:Stream^ Stream][@(0.0.255) `&
|
||||
]_[*@3 in])&]
|
||||
[s2;%% [%-*@3 path] [%-*@3 in] .&]
|
||||
[s2;%% Saves the content of [%-*@3 in] to remote [%-*@3 path] . Returns
|
||||
true on success.&]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:Upp`:`:SFtp`:`:LoadFile`(Upp`:`:Stream`&`,const char`*`): [@(0.0.255) bool]_[* LoadF
|
||||
ile]([_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 out], [@(0.0.255) const]_[@(0.0.255) cha
|
||||
r]_`*[*@3 path])&]
|
||||
[s2;%% [%-*@3 out] [%-*@3 path] .&]
|
||||
[s3;%% &]
|
||||
[s3; &]
|
||||
[s5;:Upp`:`:SFtp`:`:Get`(Upp`:`:SFtpHandle`*`,Upp`:`:Stream`&`): [@(0.0.255) bool]_[* Get
|
||||
]([_^Upp`:`:SFtpHandle^ SFtpHandle][@(0.0.255) `*]_[*@3 handle], [_^Upp`:`:Stream^ Stream
|
||||
][@(0.0.255) `&]_[*@3 out])&]
|
||||
[s5;:Upp`:`:SFtp`:`:Get`(const Upp`:`:String`&`,Upp`:`:Stream`&`): [@(0.0.255) bool]_[* G
|
||||
et]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path],
|
||||
[_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 out])&]
|
||||
[s5;:Upp`:`:SFtp`:`:Get`(const Upp`:`:String`&`,Upp`:`:Stream`&`,Upp`:`:int64`): [@(0.0.255) b
|
||||
ool]_[* Get]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path],
|
||||
[_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 out], [_^Upp`:`:int64^ int64]_[*@3 offset])&]
|
||||
[s2;%% Downloads the content of remote file pointed by [%-*@3 handle]
|
||||
or [%-*@3 path] to [%-*@3 out]. Returns true on success. [%-*@3 offset]
|
||||
can be used to start or restart a partial download. Setting [%-*@3 offset]
|
||||
to zero or a negative value will result in full download.&]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:Upp`:`:SFtp`:`:Get`(Upp`:`:SFtpHandle`*`): [_^Upp`:`:String^ String]_[* Get]([_^Upp`:`:SFtpHandle^ S
|
||||
FtpHandle][@(0.0.255) `*]_[*@3 handle])&]
|
||||
[s5;:Upp`:`:SFtp`:`:Get`(const Upp`:`:String`&`): [_^Upp`:`:String^ String]_[* Get]([@(0.0.255) c
|
||||
onst]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 path])&]
|
||||
[s2;%% Downloads the content of remote file pointed by [%-*@3 handle]
|
||||
or [%-*@3 path ]as string. Returns an empty string on failure.&]
|
||||
[s2;%% In non`-blocking mode, the result of this operation can be
|
||||
obtained using GetResult() method.&]
|
||||
[s3;%% &]
|
||||
[s4; &]
|
||||
[s5;:Upp`:`:SFtp`:`:Put`(Upp`:`:SFtpHandle`*`,Upp`:`:Stream`&`): [@(0.0.255) bool]_[* Put
|
||||
]([_^Upp`:`:SFtpHandle^ SFtpHandle][@(0.0.255) `*]_[*@3 handle], [_^Upp`:`:Stream^ Stream
|
||||
][@(0.0.255) `&]_[*@3 in])&]
|
||||
[s5;:Upp`:`:SFtp`:`:Put`(Upp`:`:Stream`&`,const Upp`:`:String`&`): [@(0.0.255) bool]_[* P
|
||||
ut]([_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 in], [@(0.0.255) const]_[_^Upp`:`:String^ S
|
||||
tring][@(0.0.255) `&]_[*@3 path])&]
|
||||
[s5;:Upp`:`:SFtp`:`:Put`(Upp`:`:Stream`&`,const Upp`:`:String`&`,Upp`:`:dword`,long`): [@(0.0.255) b
|
||||
ool]_[* Put]([_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 in], [@(0.0.255) const]_[_^Upp`:`:String^ S
|
||||
tring][@(0.0.255) `&]_[*@3 path], [_^Upp`:`:dword^ dword]_[*@3 flags],
|
||||
[@(0.0.255) long]_[*@3 mode])&]
|
||||
[s5;:Upp`:`:SFtp`:`:Put`(Upp`:`:Stream`&`,const Upp`:`:String`&`,Upp`:`:int64`): [@(0.0.255) b
|
||||
ool]_[* Put]([_^Upp`:`:Stream^ Stream][@(0.0.255) `&]_[*@3 in], [@(0.0.255) const]_[_^Upp`:`:String^ S
|
||||
tring][@(0.0.255) `&]_[*@3 path], [_^Upp`:`:int64^ int64]_[*@3 offset])&]
|
||||
[s2;%% Uploads [%-*@3 in] to remote file pointed by [%-*@3 handle]. or
|
||||
[%-*@3 path], optionally with access [%-*@3 flags] and [%-*@3 mode].
|
||||
Returns true on success. [%-*@3 offset ]can be used to start or
|
||||
restart a partial upload. Setting [%-*@3 offset] to zero or a negative
|
||||
value will result in full upload. Returns true on success.&]
|
||||
[s2;%% Returns the content of remote [%-*@3 path ]into [%-*@3 out]. Returns
|
||||
true on success.&]
|
||||
[s3;%% &]
|
||||
[ {{10000F(128)G(128)@1 [s0;%% [* Constructor detail]]}}&]
|
||||
[s3; &]
|
||||
|
|
|
|||
|
|
@ -1,22 +1,21 @@
|
|||
TITLE("SFtp")
|
||||
COMPRESSED
|
||||
120,156,213,93,141,83,227,56,178,255,87,84,53,183,123,129,202,48,182,147,144,144,236,109,193,2,203,80,7,3,197,199,206,188,162,2,113,98,133,232,198,177,115,150,3,195,238,219,249,219,95,183,36,127,37,118,108,39,102,217,55,53,67,130,45,181,186,127,221,106,73,173,150,230,142,53,155,157,158,105,180,122,95,255,125,177,215,51,200,63,254,161,215,181,119,141,182,222,232,180,26,122,211,216,133,31,122,67,55,90,70,163,169,119,140,189,102,167,209,232,104,221,145,109,114,222,191,179,141,78,71,84,50,234,198,59,163,221,50,244,118,179,211,236,232,141,118,199,128,186,134,166,25,90,219,104,233,205,70,199,104,117,45,202,71,253,59,13,138,55,160,141,189,221,198,158,166,107,90,91,215,181,134,209,214,26,173,166,174,55,12,32,97,180,13,93,107,117,169,99,245,239,62,238,246,176,66,19,42,104,173,93,77,211,118,129,90,179,169,1,117,172,214,108,232,13,205,104,180,244,189,214,110,119,72,31,153,211,191,91,22,169,149,43,82,91,235,50,159,78,149,68,102,179,183,189,
|
||||
223,234,233,80,117,183,190,251,174,13,205,54,91,208,216,30,74,212,128,106,134,177,219,218,211,91,77,96,169,169,25,93,143,254,119,206,60,58,165,142,175,40,48,93,55,244,222,80,111,247,128,133,239,223,191,239,232,77,77,34,213,6,94,116,13,248,54,116,120,6,114,180,245,214,158,182,215,234,232,29,173,209,110,26,173,54,136,62,51,61,115,170,36,25,54,141,158,146,163,83,239,188,219,213,119,1,81,173,3,252,183,246,128,128,6,66,192,39,0,217,130,191,141,78,215,87,149,177,30,86,218,171,239,189,3,144,26,45,173,189,167,181,155,237,86,19,36,49,244,93,29,128,212,80,126,80,67,215,113,189,169,105,247,239,176,130,134,88,231,252,233,30,209,177,57,183,65,220,63,30,254,36,119,228,143,63,116,124,188,95,3,21,238,52,141,29,109,139,220,113,173,247,195,15,228,110,123,191,221,107,146,235,95,253,89,191,255,231,159,63,246,239,120,163,71,240,67,239,117,111,103,179,65,119,208,197,151,248,41,172,170,75,238,246,107,218,142,182,3,2,110,53,136,178,180,6,
|
||||
121,232,223,109,55,4,29,130,191,118,225,247,120,185,217,124,104,179,81,80,112,191,209,131,178,124,210,199,134,180,222,59,161,20,224,230,102,194,184,36,73,168,51,50,103,124,110,155,62,229,196,116,200,245,245,71,3,200,223,92,18,62,31,242,23,14,230,176,67,78,125,98,218,182,251,204,201,216,245,136,73,60,211,121,164,196,29,19,119,70,61,211,103,174,195,137,235,16,208,189,235,83,50,102,54,37,178,42,113,135,255,161,35,159,215,129,218,104,66,76,46,94,126,176,192,76,70,190,235,189,144,145,71,69,253,58,177,168,77,229,55,143,58,230,148,57,143,117,73,201,135,214,248,152,122,64,36,170,103,51,238,67,17,224,223,31,237,72,56,164,60,32,152,69,61,246,68,45,50,246,220,41,74,79,134,38,167,242,117,29,68,180,200,4,248,152,177,209,87,194,233,212,116,124,54,226,59,145,66,2,37,254,90,211,141,206,214,137,248,185,175,71,122,36,151,2,98,114,78,253,137,107,145,51,96,100,65,163,173,37,141,222,176,41,117,231,254,160,198,28,127,176,5,170,125,184,
|
||||
143,149,184,151,102,17,211,35,25,252,216,127,128,166,84,189,126,45,254,14,104,224,203,253,6,153,242,254,22,54,104,32,103,215,212,231,196,151,21,200,147,105,207,41,148,36,83,6,72,209,145,235,88,124,135,92,81,127,238,129,170,6,219,62,26,0,234,114,42,165,24,77,76,230,0,158,10,7,32,135,95,154,89,242,124,54,153,127,237,211,89,105,129,130,138,37,36,154,80,2,70,198,92,139,141,152,255,130,70,55,2,91,4,94,201,221,189,239,130,26,161,213,15,131,15,96,183,131,15,220,27,13,62,32,35,15,160,118,248,65,57,7,139,26,60,80,103,240,126,206,7,239,2,30,249,36,120,133,194,76,168,131,124,221,147,224,91,95,33,23,64,71,134,212,127,166,212,17,45,3,142,170,215,7,40,115,162,107,83,78,106,96,54,147,223,183,42,132,249,112,50,119,190,94,179,223,105,105,156,195,154,89,64,243,223,211,128,30,97,53,194,161,30,241,93,114,247,195,123,85,84,200,96,153,62,244,124,106,90,92,116,162,103,15,134,10,0,227,6,234,89,10,144,88,125,16,
|
||||
124,183,249,239,234,176,56,161,254,71,104,214,6,44,6,91,160,20,238,11,52,206,78,127,65,143,5,186,6,151,53,120,248,120,240,233,232,236,248,158,164,62,78,2,181,45,128,10,201,246,107,91,15,241,247,162,137,126,8,81,32,7,162,100,179,33,231,19,131,240,49,120,29,46,13,9,124,10,82,65,47,8,158,110,68,209,213,124,186,61,59,195,7,99,147,217,115,143,198,124,76,182,152,23,51,176,213,154,104,156,4,175,124,15,96,26,252,56,168,171,7,214,179,235,89,131,186,237,194,211,37,155,144,210,72,203,80,146,161,156,72,55,105,11,82,192,135,88,109,209,14,212,20,159,41,86,5,182,48,51,253,73,191,30,107,82,240,114,79,196,135,42,51,182,205,71,142,133,98,4,144,215,160,139,187,22,149,182,167,245,130,241,8,185,147,216,198,135,16,180,185,208,225,155,126,96,143,130,7,242,204,124,24,79,4,210,193,11,217,176,48,78,245,68,180,21,117,72,83,210,77,81,21,214,89,84,23,249,53,42,12,195,219,208,7,123,133,81,101,206,209,247,8,107,86,150,
|
||||
60,157,131,178,134,200,187,77,97,164,137,138,80,114,104,187,156,214,182,130,146,207,224,96,128,7,135,241,9,181,118,66,227,10,191,96,139,106,224,76,19,173,155,168,209,134,233,21,76,1,123,38,76,175,186,135,190,103,11,151,113,252,233,230,248,170,43,230,90,109,67,128,139,36,14,129,198,213,241,193,81,255,253,255,74,172,5,16,204,17,253,89,192,180,147,73,242,236,248,215,155,144,224,247,69,170,159,175,78,111,142,151,200,10,231,144,67,247,234,244,228,227,10,194,7,151,151,199,159,150,25,54,103,240,107,30,203,55,23,151,217,132,15,1,8,193,242,33,206,61,104,64,122,76,152,79,44,151,114,103,240,79,159,208,111,48,174,39,26,200,164,119,252,229,240,236,246,250,244,55,65,210,156,131,67,32,202,148,255,59,167,96,25,224,73,209,164,176,5,124,12,115,27,156,155,96,155,166,141,240,191,200,198,192,149,74,206,132,178,165,81,153,54,119,209,178,248,140,142,216,152,65,61,65,4,29,41,150,129,79,104,206,202,198,225,151,139,155,155,139,243,108,40,110,174,110,
|
||||
63,29,30,44,234,15,59,131,239,205,97,98,136,232,48,33,193,239,212,115,73,13,230,179,195,23,225,245,207,149,205,99,251,178,47,198,152,79,186,244,213,150,45,186,40,12,158,48,198,79,153,112,165,124,43,221,206,35,41,224,183,232,135,156,149,161,52,167,87,183,215,87,117,114,250,89,126,124,145,31,87,159,191,220,130,124,183,156,122,36,214,72,170,110,227,216,156,94,157,92,93,34,53,249,241,69,126,0,181,19,160,118,226,185,243,89,156,92,62,181,139,155,143,72,77,126,124,145,31,64,237,2,168,93,70,116,196,8,233,130,157,120,69,56,60,56,59,131,234,87,216,135,21,170,98,126,110,219,249,117,63,203,186,159,69,71,45,91,249,139,172,124,252,141,142,230,190,57,4,155,25,190,20,171,9,18,31,160,54,28,15,186,134,199,70,62,77,101,61,127,62,128,246,138,130,103,13,150,101,6,70,164,83,213,224,24,205,170,100,143,82,3,90,98,236,66,73,177,231,227,236,231,239,60,56,21,211,130,48,161,42,212,32,8,253,213,122,192,145,74,232,65,0,250,12,147,
|
||||
126,68,75,44,75,165,187,93,30,21,254,127,171,76,144,24,212,150,84,34,84,21,131,115,232,186,182,92,75,96,5,80,75,1,53,2,178,82,190,24,252,162,186,156,220,9,180,148,6,84,185,0,76,28,112,226,16,102,161,37,134,26,212,40,128,0,218,195,111,71,204,11,17,225,217,224,69,248,174,131,218,21,198,36,50,173,188,158,109,252,105,136,74,98,21,88,186,107,91,193,140,124,83,82,14,125,94,232,55,146,203,208,202,19,179,113,17,90,81,154,12,152,136,45,25,3,98,81,87,89,82,111,49,216,143,48,40,180,210,185,164,225,43,107,85,239,73,36,221,152,45,47,44,74,178,197,45,38,237,245,139,51,42,211,51,177,252,250,29,19,107,79,60,215,129,213,122,76,164,153,203,28,244,124,48,160,39,123,42,170,55,182,66,227,96,7,230,35,46,253,159,216,136,110,44,57,165,95,211,36,15,150,188,192,211,110,179,76,0,4,9,150,133,38,190,174,21,13,222,19,241,17,24,131,203,25,6,40,19,129,19,250,149,199,236,62,44,34,86,42,137,197,108,38,174,21,
|
||||
198,139,78,168,127,233,242,44,11,202,148,141,200,122,235,91,82,60,56,50,154,123,30,117,252,16,10,82,3,40,196,162,97,75,122,13,44,36,182,40,80,48,12,231,21,197,169,248,140,4,70,132,42,230,35,64,166,82,31,146,22,239,200,12,112,188,213,44,163,130,25,198,185,249,149,174,80,65,20,184,74,243,105,170,114,133,177,170,188,48,148,156,165,168,88,128,153,169,17,210,79,9,57,45,4,152,214,115,126,87,96,254,79,171,16,203,158,71,168,138,175,55,212,133,157,51,215,80,215,20,30,247,79,132,232,217,206,63,156,12,48,15,75,175,0,68,17,219,196,241,47,52,118,79,212,151,116,212,112,27,42,134,154,194,69,60,85,238,208,5,111,6,238,16,252,220,18,144,49,87,183,98,102,156,50,119,186,137,79,102,113,197,226,197,52,64,159,160,199,138,110,27,27,173,163,70,161,38,157,206,252,151,162,51,176,80,63,171,99,210,235,232,168,242,96,244,70,186,187,120,162,158,237,154,214,78,33,45,22,155,246,85,163,169,34,251,6,232,54,207,152,243,53,87,79,121,
|
||||
62,37,32,84,197,234,196,99,143,73,253,20,168,228,155,222,35,245,83,61,51,127,153,14,93,220,122,181,129,191,96,58,26,44,66,176,45,230,152,184,150,79,217,128,222,220,69,155,86,37,240,6,132,94,197,252,215,129,247,138,114,24,67,150,225,93,220,111,1,184,153,207,97,101,247,45,124,161,104,85,128,173,13,107,144,75,104,166,10,120,3,90,127,43,132,109,9,241,200,157,206,108,250,13,83,28,108,48,213,39,177,170,6,220,17,113,106,165,2,78,199,99,176,95,44,90,45,234,48,231,63,240,125,47,117,181,16,119,234,178,80,54,226,1,157,77,199,92,65,68,22,151,244,82,193,53,197,171,8,219,147,96,231,26,95,176,225,28,29,5,56,233,101,7,144,185,174,32,253,104,249,38,169,87,135,108,254,144,89,2,221,87,25,45,95,27,245,197,41,116,213,88,95,175,178,226,36,252,5,208,190,94,223,150,87,106,103,109,160,175,211,129,14,131,53,197,76,188,191,243,122,176,23,138,135,150,131,254,21,214,125,111,166,146,148,81,180,106,95,115,234,140,221,194,209,14,
|
||||
53,59,62,118,124,239,69,138,62,232,134,15,2,143,131,20,171,95,81,70,225,140,160,189,0,36,127,2,48,225,20,219,100,240,158,65,235,222,84,36,5,18,115,136,201,108,9,4,151,226,31,115,152,85,47,37,217,20,48,224,52,220,22,16,90,109,175,69,96,90,130,60,196,58,21,50,42,94,229,26,91,138,161,121,116,230,81,78,23,250,191,164,151,101,100,155,0,8,102,34,19,211,10,24,94,90,188,113,57,55,173,74,27,67,200,68,22,26,128,149,105,61,131,247,250,90,134,179,74,238,229,120,117,134,241,84,41,127,78,220,26,129,72,179,169,32,189,15,113,234,47,0,85,129,95,58,51,185,127,238,90,108,252,130,89,172,133,12,5,11,222,139,164,215,192,76,146,68,94,215,96,108,104,11,3,122,108,204,70,210,253,96,54,173,66,101,9,161,24,38,155,249,161,98,56,37,71,84,81,114,165,115,122,29,224,114,70,213,152,254,210,151,70,248,38,197,18,151,145,15,214,58,80,225,181,108,243,64,212,217,208,54,35,34,127,129,109,170,208,179,0,229,53,173,49,31,
|
||||
153,117,172,177,122,168,94,211,26,99,88,103,121,128,77,237,16,55,106,142,69,230,95,217,184,127,84,243,21,173,14,101,98,11,86,22,206,50,130,93,169,130,162,30,5,65,205,245,228,93,168,254,150,66,135,225,217,194,91,250,83,12,247,173,39,119,162,242,91,74,157,8,13,22,149,220,29,125,165,254,154,130,199,234,190,169,220,130,143,130,2,95,178,217,154,253,57,170,249,150,194,202,196,228,25,240,82,80,224,95,108,128,103,61,137,99,85,223,82,228,33,178,33,179,171,77,187,140,67,187,150,85,214,119,225,75,4,222,18,134,209,196,244,204,145,79,189,117,160,128,153,208,145,235,36,142,229,44,159,56,34,170,84,137,83,54,206,124,58,4,142,96,208,21,217,35,100,230,185,56,184,130,137,90,115,196,0,157,49,158,72,10,142,7,238,144,83,220,164,179,160,128,47,146,230,241,176,86,112,10,48,56,217,69,60,119,238,51,39,126,22,39,247,188,223,141,106,64,157,248,227,177,211,126,217,144,164,6,36,159,92,102,13,182,7,245,224,48,87,58,78,155,69,31,177,141,
|
||||
254,195,96,91,90,132,239,45,188,142,157,0,195,101,225,195,224,95,15,167,159,110,6,15,231,7,95,34,203,89,204,252,10,44,7,168,197,87,141,125,82,212,51,206,211,241,144,93,102,5,42,145,135,156,111,8,75,208,161,214,70,234,245,208,185,54,159,40,250,129,192,133,96,111,68,60,74,58,20,69,37,221,143,196,31,1,249,72,236,138,178,71,177,39,166,64,36,125,141,250,69,148,41,10,202,153,107,90,41,160,36,3,154,73,198,68,114,129,170,182,6,10,89,220,111,168,197,136,87,106,78,95,77,127,113,76,160,29,129,9,197,227,239,105,202,98,78,158,170,160,68,121,69,45,74,90,95,210,92,106,58,72,164,177,82,66,224,177,232,220,46,94,68,203,72,104,149,198,51,15,117,103,120,249,18,58,47,230,236,19,226,111,175,216,69,45,136,218,214,10,113,114,183,223,139,8,244,26,219,238,127,149,100,197,2,184,111,44,103,78,192,215,29,143,121,34,3,225,200,125,118,48,181,41,43,153,105,49,241,118,113,132,115,189,172,93,44,228,102,69,250,83,80,74,50,4,
|
||||
51,50,39,60,51,8,52,184,111,122,62,17,103,161,228,87,19,232,123,62,206,63,45,197,241,14,134,101,68,78,207,2,169,224,72,162,184,142,194,161,143,50,155,66,30,200,87,137,86,28,79,164,51,135,140,49,22,22,18,44,60,169,77,239,219,121,3,208,230,93,186,188,17,23,227,169,234,4,209,146,54,181,210,164,72,223,228,132,139,198,99,121,207,142,204,127,83,47,22,195,153,130,139,83,135,56,174,51,120,47,22,114,88,8,19,114,235,42,159,78,24,128,171,14,204,134,55,149,4,86,184,144,26,13,32,93,137,26,97,238,243,102,147,219,18,195,64,177,201,109,149,195,64,48,3,200,145,102,97,36,47,28,206,88,144,167,24,67,21,204,66,35,19,221,76,176,172,139,22,254,126,194,86,117,21,67,53,120,173,30,52,255,62,72,21,25,51,111,103,210,187,197,102,196,48,230,20,60,209,179,48,96,214,193,251,160,235,49,109,251,101,173,139,43,86,15,172,164,95,124,96,157,207,42,29,86,3,114,69,118,66,114,3,45,135,168,92,111,142,225,117,98,81,240,206,118,
|
||||
238,197,74,226,51,52,211,232,90,31,233,156,182,229,241,176,184,209,133,69,238,73,244,61,221,108,212,205,46,241,84,228,136,193,29,242,11,115,212,224,135,141,0,34,0,181,51,74,92,156,163,8,36,7,18,45,17,117,90,125,85,88,60,57,39,132,66,209,89,190,55,44,76,91,233,22,186,67,44,74,69,129,39,5,238,17,59,119,159,40,158,245,199,135,63,45,81,248,249,65,93,50,150,184,99,204,1,3,4,155,156,80,27,134,223,232,134,46,22,139,212,113,54,157,217,108,252,34,111,122,50,61,174,142,133,165,220,34,70,106,248,48,118,15,24,195,95,18,155,19,240,59,222,8,182,165,18,237,101,247,12,149,36,24,216,137,18,144,36,67,43,175,3,91,185,169,21,194,13,179,135,79,226,124,112,252,110,162,149,51,178,79,226,4,112,241,104,40,20,39,53,244,38,91,43,210,205,242,146,163,214,145,235,150,89,169,98,165,101,245,64,217,18,50,205,241,74,14,102,17,208,129,59,98,226,188,189,112,142,5,133,75,205,223,41,37,218,73,9,209,78,74,137,246,40,238,
|
||||
7,121,75,217,100,150,82,65,225,100,54,82,97,233,130,212,170,20,65,130,195,158,217,18,173,43,80,152,209,194,104,186,214,86,100,15,65,149,50,247,123,165,38,2,109,208,237,214,148,86,102,76,148,146,54,168,82,86,218,133,212,146,191,78,78,149,70,188,156,169,90,32,59,55,150,29,159,49,137,173,178,49,185,128,116,61,88,123,213,50,146,116,212,189,112,234,106,128,48,99,83,206,25,0,32,113,180,59,29,219,210,216,133,236,124,207,216,121,91,55,231,57,18,244,123,142,21,29,200,43,65,197,83,24,55,3,35,10,78,102,101,194,80,90,214,83,46,35,204,169,114,134,235,11,89,170,168,229,171,77,209,12,75,103,11,9,46,101,120,13,179,85,242,25,14,139,86,200,245,98,134,74,25,214,85,194,73,62,227,170,96,133,108,167,165,152,148,98,93,238,92,23,96,93,22,172,144,245,149,219,231,101,100,16,89,17,249,18,136,98,21,242,159,153,5,81,134,119,204,97,201,103,29,75,85,200,249,82,202,74,41,139,17,201,61,5,12,70,148,171,210,212,227,89,69,101,
|
||||
56,198,195,163,184,2,203,231,57,40,89,25,215,158,34,184,6,215,226,90,175,98,108,135,69,43,227,27,175,247,90,147,111,196,240,194,177,11,184,241,160,100,53,92,227,114,20,225,30,188,119,129,166,26,85,215,224,63,186,157,47,95,130,168,108,101,200,211,144,100,105,222,111,92,21,90,44,184,156,14,202,151,152,245,198,79,25,101,28,93,20,83,0,81,200,55,173,112,119,226,98,238,207,230,209,182,130,58,219,15,223,56,155,50,219,244,112,246,115,235,176,111,196,198,153,209,116,10,243,228,193,63,57,110,148,65,181,53,144,248,50,181,139,195,0,133,43,199,192,33,223,166,246,194,230,12,13,240,8,47,204,3,175,6,191,2,1,44,236,155,143,245,104,185,43,66,23,43,142,200,113,113,206,217,167,223,252,110,34,62,214,212,27,141,110,171,179,219,254,9,35,74,63,183,154,205,158,253,193,216,245,224,159,255,65,111,14,225,223,190,254,94,6,16,255,37,35,136,120,35,115,23,39,64,50,98,214,237,66,133,22,84,104,65,133,22,84,104,237,27,162,56,145,175,146,180,
|
||||
106,122,187,179,21,82,59,8,39,174,80,54,124,122,233,114,206,240,190,203,223,48,36,90,227,91,217,109,72,150,14,137,255,2,67,94,64,3,159,29,10,20,98,151,217,215,131,35,224,117,53,52,212,197,144,86,151,3,243,224,189,26,153,235,209,68,35,246,76,220,21,218,143,243,136,141,206,153,181,208,230,65,160,177,48,243,79,228,208,57,50,16,32,67,188,75,100,30,171,33,35,210,161,42,160,51,13,214,242,73,90,103,233,235,117,230,144,255,129,63,221,243,115,12,163,30,145,143,31,225,107,247,250,90,117,234,37,234,102,176,118,78,161,30,95,31,151,165,27,187,37,118,129,180,247,252,77,254,93,136,115,23,76,76,92,35,94,30,247,45,225,247,154,10,150,135,225,220,216,250,54,184,234,126,20,11,125,151,117,98,81,67,217,251,136,241,214,171,222,170,14,111,16,9,54,148,163,59,86,132,163,72,218,96,226,136,71,177,45,224,50,194,174,62,26,93,61,12,175,118,16,26,80,245,205,228,133,89,57,104,202,33,33,121,254,121,195,173,145,248,255,190,177,74,61,226,
|
||||
78,34,248,138,206,216,162,227,228,60,72,61,140,195,242,155,144,232,158,200,207,254,79,133,142,244,254,172,206,170,8,166,66,156,146,204,202,21,128,36,27,156,121,70,156,22,118,123,8,181,197,255,163,147,152,247,9,156,250,253,255,3,226,40,118,41,
|
||||
120,156,213,92,11,115,219,182,178,254,43,152,201,105,143,156,81,28,146,146,44,89,234,233,216,117,92,199,115,236,216,227,71,147,59,30,217,162,68,200,194,9,69,234,16,144,29,183,183,249,237,119,23,0,95,18,41,145,50,93,247,102,146,72,34,129,197,238,183,139,197,98,241,184,97,205,102,167,103,91,173,222,215,127,159,237,246,44,242,143,127,152,117,227,77,163,109,54,58,173,134,217,180,118,224,63,179,97,90,45,171,209,52,59,214,110,179,211,104,116,140,238,200,181,57,239,223,184,86,167,35,43,89,117,235,141,213,110,89,102,187,217,105,118,204,70,187,99,65,93,203,48,44,163,109,181,204,102,163,99,181,186,14,229,163,254,141,1,197,27,208,198,238,78,99,215,48,13,163,109,154,70,195,106,27,141,86,211,52,27,22,144,176,218,150,105,180,186,212,115,250,55,31,119,122,88,161,9,21,140,214,142,97,24,59,64,173,217,52,128,58,86,107,54,204,134,97,53,90,230,110,107,167,59,164,247,204,235,223,44,139,212,90,43,82,219,232,50,65,167,90,34,187,217,123,187,
|
||||
215,234,153,80,117,167,190,243,166,13,205,54,91,208,216,46,74,212,128,106,150,181,211,218,53,91,77,96,169,105,88,221,128,254,119,206,2,58,165,158,208,20,152,105,90,102,111,104,182,123,192,194,247,239,223,183,205,166,161,144,106,3,47,166,1,124,91,38,60,3,57,218,102,107,215,216,109,117,204,142,209,104,55,173,86,27,68,159,217,129,61,213,146,12,155,86,79,203,209,169,119,222,236,152,59,128,168,209,1,254,91,187,64,192,0,33,224,19,128,108,193,223,70,167,43,116,101,172,135,149,118,235,187,111,0,164,70,203,104,239,26,237,102,187,213,4,73,44,115,199,4,32,13,148,31,212,208,245,252,96,106,187,253,27,172,96,32,214,107,254,116,63,208,177,61,119,65,220,63,238,254,36,55,228,143,63,76,124,188,87,3,21,110,55,173,109,99,139,220,112,163,247,195,15,228,230,237,94,187,215,36,151,191,138,89,191,255,231,159,63,246,111,120,163,71,240,195,236,117,175,103,179,65,119,208,197,151,248,41,173,170,75,110,246,106,198,182,177,13,2,110,53,136,182,180,6,
|
||||
185,235,223,188,109,72,58,4,127,118,225,119,178,220,108,62,116,217,40,44,184,215,232,65,89,62,233,99,67,70,239,141,84,10,112,115,53,97,92,145,36,212,27,217,51,62,119,109,65,57,177,61,114,121,249,209,2,242,87,231,132,207,135,252,137,131,57,108,147,99,65,108,215,245,31,57,25,251,1,177,73,96,123,247,148,248,99,226,207,104,96,11,230,123,156,248,30,1,221,251,130,146,49,115,41,81,85,137,63,252,15,29,9,94,7,106,163,9,177,185,124,249,222,1,51,25,9,63,120,34,163,128,202,250,117,226,80,151,170,111,1,245,236,41,243,238,235,138,146,128,214,248,152,6,64,36,174,231,50,46,160,8,240,47,70,219,10,14,37,15,8,230,208,128,61,80,135,140,3,127,138,210,147,161,205,169,122,93,7,17,29,50,1,62,102,108,244,149,112,58,181,61,193,70,124,59,86,72,168,196,95,107,166,213,217,58,146,255,239,153,177,30,201,185,132,152,156,82,49,241,29,114,2,140,44,104,180,181,164,209,43,54,165,254,92,12,106,204,19,131,45,80,237,221,109,162,
|
||||
196,173,50,139,132,30,201,224,199,254,29,52,165,235,245,107,201,119,64,3,95,238,53,200,148,247,183,176,65,11,57,187,164,130,19,161,42,144,7,219,157,83,40,73,166,12,144,162,35,223,115,248,54,185,160,98,30,128,170,6,111,5,26,0,234,114,170,164,24,77,108,230,1,158,26,7,32,135,95,154,121,242,124,182,153,184,20,116,86,90,160,176,98,9,137,38,148,128,145,49,223,97,35,38,158,208,232,70,96,139,192,43,185,185,21,62,168,17,90,125,63,120,15,118,59,120,207,131,209,224,61,50,114,7,106,135,255,40,231,96,81,131,59,234,13,222,205,249,224,77,200,35,159,132,175,80,152,9,245,144,175,91,18,126,235,107,228,66,232,200,144,138,71,74,61,217,50,224,168,123,125,136,50,39,166,49,229,164,6,102,51,249,125,171,66,152,15,38,115,239,235,37,251,157,150,198,57,170,153,7,52,255,61,11,232,17,86,35,28,234,17,225,147,155,31,222,233,162,82,6,199,22,208,243,169,237,112,217,137,30,3,24,42,0,140,43,168,231,104,64,18,245,65,240,157,230,
|
||||
191,171,195,226,136,138,143,208,172,11,88,12,182,64,41,92,72,52,78,142,127,65,143,5,186,6,151,53,184,251,184,255,233,195,201,225,45,201,124,156,6,234,173,4,42,34,219,175,109,221,37,223,203,38,250,17,68,161,28,136,146,203,134,156,79,44,194,199,224,117,184,50,36,240,41,72,5,189,32,120,186,17,69,87,243,233,250,228,4,31,140,109,230,206,3,154,240,49,249,98,158,205,192,86,107,178,113,18,190,18,1,192,52,248,113,80,215,15,156,71,63,112,6,117,215,135,167,75,54,161,164,81,150,161,37,67,57,145,110,218,22,148,128,119,137,218,178,29,168,41,63,51,172,10,108,97,102,139,73,191,158,104,82,242,114,75,228,135,46,51,118,237,123,142,133,18,4,144,215,176,139,251,14,85,182,103,244,194,241,8,185,83,216,38,135,16,180,185,200,225,219,34,180,71,201,3,121,100,2,198,19,137,116,248,66,53,44,141,83,63,145,109,197,29,210,86,116,51,84,133,117,22,213,69,126,141,11,195,240,54,20,96,175,48,170,204,57,250,30,105,205,218,146,167,115,80,
|
||||
214,16,121,119,41,140,52,113,17,74,14,92,159,211,218,86,88,242,17,28,12,240,224,49,62,161,206,118,100,92,209,23,108,81,15,156,89,162,117,83,53,218,16,94,65,8,216,179,33,188,234,30,136,192,149,46,227,240,211,213,225,69,87,198,90,109,75,130,139,36,14,128,198,197,225,254,135,254,187,255,85,88,75,32,152,39,251,179,132,105,59,151,228,201,225,175,87,17,193,239,139,84,63,95,28,95,29,46,145,149,206,97,13,221,139,227,163,143,43,8,239,159,159,31,126,90,102,216,158,193,207,117,44,95,157,157,231,19,62,0,32,36,203,7,24,123,208,144,244,152,48,65,28,159,114,111,240,79,65,232,55,24,215,83,13,228,210,59,252,114,112,114,125,121,252,155,36,105,207,193,33,16,109,202,255,157,83,176,12,240,164,104,82,216,2,62,134,216,6,99,19,108,211,118,17,254,39,213,24,184,82,197,153,84,182,50,42,219,229,62,90,22,159,209,17,27,51,168,39,137,160,35,197,50,240,9,205,57,249,56,252,114,118,117,117,118,154,15,197,213,197,245,167,131,253,69,
|
||||
253,97,103,16,193,28,2,67,68,135,73,9,126,167,129,79,106,16,207,14,159,164,215,63,213,54,143,237,171,190,152,96,62,237,210,87,91,182,236,162,48,120,194,24,63,101,210,149,242,173,108,59,143,165,128,95,241,127,42,42,67,105,142,47,174,47,47,234,228,248,179,250,248,162,62,46,62,127,185,6,249,174,57,13,72,162,145,76,221,38,177,57,190,56,186,56,71,106,234,227,139,250,0,106,71,64,237,40,240,231,179,36,185,245,212,206,174,62,34,53,245,241,69,125,0,181,51,160,118,30,211,145,35,164,15,118,18,20,225,112,255,228,4,170,95,96,31,214,168,202,248,220,117,215,215,253,172,234,126,150,29,181,108,229,47,170,242,225,55,58,154,11,123,8,54,51,124,42,86,19,36,222,71,109,120,1,116,141,128,141,4,205,100,125,125,60,128,246,138,130,231,13,150,101,6,70,164,83,213,224,24,71,85,170,71,233,1,45,53,118,161,164,216,243,49,250,249,59,15,78,197,180,32,77,168,10,53,72,66,127,181,30,112,164,146,122,144,128,62,66,208,143,104,201,105,169,
|
||||
114,183,203,163,194,255,111,149,73,18,131,218,146,74,164,170,18,112,14,125,223,85,115,9,172,0,106,41,160,70,64,86,201,151,128,95,86,87,193,157,68,75,107,64,151,11,193,196,1,39,9,97,30,90,114,168,65,141,2,8,160,61,252,246,129,5,17,34,60,31,188,24,223,77,80,187,192,156,68,174,149,215,243,141,63,11,81,69,172,2,75,247,93,39,140,200,159,75,202,163,143,11,253,70,113,25,89,121,42,26,151,169,21,173,201,144,137,196,148,49,36,22,119,149,37,245,22,131,253,3,38,133,86,58,151,44,124,85,173,234,61,137,162,155,176,229,133,73,73,190,184,197,164,189,124,242,70,101,122,38,150,223,188,99,98,237,73,224,123,48,91,79,136,52,243,153,135,158,15,6,244,116,79,69,245,38,102,104,28,236,192,190,199,169,255,3,27,209,103,75,78,233,215,44,201,195,41,47,240,180,211,44,147,0,65,130,101,161,73,206,107,101,131,183,68,126,132,198,224,115,134,9,202,84,226,132,126,229,9,187,143,138,200,153,74,106,50,155,139,107,133,249,162,35,42,206,
|
||||
125,158,103,65,185,178,17,85,111,115,75,74,38,71,70,243,32,160,158,136,160,32,53,128,66,78,26,182,148,215,192,66,114,137,2,5,195,116,94,81,156,138,71,36,48,34,84,17,143,0,153,74,125,72,86,190,35,55,193,241,90,81,70,5,17,198,169,253,149,174,80,65,156,184,202,242,105,186,114,133,185,170,117,105,40,21,165,232,92,128,157,171,17,210,207,72,57,45,36,152,54,115,126,23,96,254,15,171,16,203,143,35,116,197,151,27,234,162,206,185,214,80,55,20,30,215,79,164,232,249,206,63,10,6,88,128,165,87,0,162,137,61,199,241,47,52,118,75,244,151,108,212,112,25,42,129,154,198,69,62,213,238,208,7,111,6,238,16,252,220,18,144,9,87,183,34,50,206,136,157,174,146,193,44,206,88,130,132,6,232,3,244,88,217,109,19,163,117,220,40,212,164,211,153,120,42,26,129,69,250,89,157,147,222,68,71,149,39,163,159,165,187,179,7,26,184,190,237,108,23,210,98,177,176,175,26,77,21,89,55,64,183,121,194,188,175,107,245,180,206,167,132,132,170,152,157,
|
||||
4,236,62,173,159,2,149,132,29,220,83,145,233,153,249,211,116,232,227,210,171,11,252,133,225,104,56,9,193,182,152,103,227,92,62,99,1,250,249,46,218,118,42,129,55,36,244,34,230,191,9,188,23,148,195,24,178,12,239,226,122,11,192,205,4,135,153,221,183,232,133,166,85,1,182,46,204,65,206,161,153,42,224,13,105,253,173,16,118,21,196,35,127,58,115,233,55,220,226,224,130,169,62,200,89,53,224,142,136,83,39,19,112,58,30,131,253,98,209,106,81,135,152,127,95,136,32,115,182,144,116,234,170,80,62,226,33,157,231,142,185,146,136,42,174,232,101,130,107,203,87,49,182,71,225,202,53,190,96,195,57,58,10,112,210,203,14,32,119,94,65,250,241,244,77,81,175,14,217,245,67,102,9,116,95,100,180,124,105,212,23,67,232,170,177,190,92,101,197,105,248,11,160,125,185,185,45,175,212,206,198,64,95,102,3,29,37,107,138,153,120,127,251,229,96,47,148,15,45,7,253,11,204,251,94,77,37,25,163,104,213,190,230,216,27,251,133,179,29,58,58,62,244,68,240,164,
|
||||
68,31,116,163,7,161,199,65,138,213,207,40,227,116,70,216,94,8,146,152,0,76,24,98,219,12,222,51,104,61,152,202,77,129,196,30,226,102,182,20,130,75,249,143,57,68,213,75,155,108,10,24,112,22,110,11,8,173,182,215,34,48,45,65,30,97,157,9,25,149,175,214,26,91,134,161,5,116,22,80,78,23,250,191,162,151,103,100,207,1,16,204,68,109,76,43,96,120,89,249,198,229,189,105,85,218,24,66,38,119,161,1,88,185,214,51,120,103,110,100,56,171,228,94,206,87,231,24,79,149,242,175,201,91,35,16,89,54,21,110,239,67,156,250,11,64,85,224,151,78,108,46,78,125,135,141,159,112,23,107,33,67,193,130,183,114,211,107,104,38,105,34,47,107,48,46,180,133,9,61,54,102,35,229,126,112,55,173,70,101,9,161,4,38,207,243,67,197,112,74,143,168,178,228,74,231,244,50,192,173,25,85,19,250,203,158,26,225,155,12,75,92,70,62,156,235,64,133,151,178,205,125,89,231,153,182,25,19,249,11,108,83,167,158,37,40,47,105,141,235,145,217,196,26,171,135,
|
||||
234,37,173,49,129,117,158,7,120,174,29,226,66,205,161,220,249,87,54,239,31,215,124,65,171,67,153,216,130,149,69,81,70,184,42,85,80,212,15,97,82,115,51,121,23,170,191,166,208,81,122,182,240,146,254,20,211,125,155,201,157,170,252,154,82,167,82,131,69,37,247,71,95,169,216,80,240,68,221,87,149,91,242,81,80,224,115,54,219,176,63,199,53,95,83,88,181,49,121,6,188,20,20,248,23,23,224,217,76,226,68,213,215,20,121,136,108,168,221,213,182,91,198,161,93,170,42,155,187,240,37,2,175,9,195,104,98,7,246,72,208,96,19,40,32,18,250,224,123,169,99,57,203,39,142,136,46,85,226,148,141,55,159,14,129,35,24,116,229,238,17,50,11,124,28,92,193,68,157,57,98,128,206,24,79,36,133,199,3,183,201,49,46,210,57,80,64,200,77,243,120,88,43,60,5,24,158,236,34,129,63,23,204,75,158,197,89,123,222,239,74,55,160,79,252,241,196,105,191,124,72,50,19,146,15,62,115,6,111,7,245,240,48,87,54,78,207,203,62,98,27,253,187,193,91,101,
|
||||
17,34,88,120,157,56,1,134,211,194,187,193,191,238,142,63,93,13,238,78,247,191,36,45,71,30,242,194,152,156,139,228,60,177,175,117,33,129,143,118,243,164,206,236,232,188,23,7,215,201,228,22,90,185,107,98,97,43,25,112,161,86,239,134,243,49,34,187,156,185,84,156,139,224,73,110,91,241,137,227,131,51,142,88,82,167,80,227,83,17,250,216,227,246,74,3,2,11,159,131,73,60,201,45,191,96,41,69,221,250,60,91,153,170,191,175,80,105,236,222,231,207,212,105,232,13,54,86,115,172,90,185,199,122,165,110,165,90,87,234,37,86,95,105,205,255,61,84,122,105,63,80,244,188,161,211,70,255,135,74,44,233,194,53,149,108,207,157,124,4,228,99,93,85,180,95,23,187,96,114,246,98,63,208,165,189,10,26,123,217,91,113,233,165,212,222,133,130,219,67,124,219,201,128,50,157,120,78,139,35,55,129,232,106,27,96,151,179,237,48,150,58,97,152,41,73,159,103,27,177,44,212,158,190,152,85,36,49,131,118,36,102,20,175,49,200,50,1,230,21,52,0,40,72,178,213,
|
||||
79,170,211,255,34,64,245,37,131,200,220,13,20,27,66,41,217,241,84,252,90,39,185,129,241,44,99,68,250,210,221,133,251,76,230,69,151,222,215,198,21,7,200,112,48,199,217,36,113,168,176,153,187,246,30,1,249,25,33,29,159,98,87,230,248,86,237,134,78,34,25,21,185,37,241,247,108,68,245,65,230,228,206,155,152,193,109,242,11,243,28,133,150,188,108,129,193,43,219,27,165,206,137,107,2,105,203,49,82,65,214,234,155,49,146,107,81,17,20,154,206,242,53,25,209,42,77,183,208,149,25,241,202,11,60,41,112,109,198,169,255,64,241,104,27,62,252,105,137,194,207,119,250,78,141,212,149,26,30,229,56,240,77,168,59,131,97,42,186,144,130,37,2,83,206,166,51,151,141,159,212,197,6,118,192,245,46,232,140,75,51,72,13,31,38,174,189,96,248,35,53,23,135,223,120,1,198,150,222,87,166,134,234,72,73,146,129,237,120,189,77,49,180,242,246,139,149,57,156,8,110,136,82,63,201,227,48,201,163,248,249,222,94,23,47,19,252,67,113,82,195,238,183,181,98,117,
|
||||
117,221,90,224,38,114,93,67,60,151,37,86,214,34,22,148,45,33,211,28,79,160,50,103,41,66,42,40,92,230,114,85,41,209,142,74,136,118,84,74,180,123,121,28,246,53,101,83,139,114,5,133,83,139,111,133,165,11,87,18,51,4,9,207,54,228,75,180,169,64,209,2,14,4,195,153,130,173,88,44,131,42,101,174,179,200,92,247,122,70,183,219,80,90,181,64,80,74,218,176,74,89,105,23,86,82,254,58,57,245,174,153,229,141,25,5,54,163,36,54,131,109,189,124,99,234,102,39,31,98,55,221,92,238,53,40,250,36,92,180,65,65,197,12,0,144,156,211,101,99,91,26,187,136,157,239,57,137,166,77,183,248,196,130,126,95,99,69,251,234,6,44,249,20,198,205,208,136,194,141,200,185,48,148,150,245,152,171,136,58,83,206,40,114,86,165,138,90,190,206,1,230,88,58,91,88,207,41,195,107,180,56,179,158,225,168,104,133,92,47,46,200,148,97,93,175,175,172,103,92,23,172,144,237,172,21,149,82,172,171,68,109,1,214,85,193,10,89,95,153,45,46,35,131,92,4,
|
||||
88,47,129,44,86,33,255,185,73,255,50,188,227,146,205,122,214,177,84,133,156,47,173,208,148,178,24,185,150,85,192,96,100,185,42,77,61,185,136,86,134,99,76,67,227,12,108,61,207,97,201,202,184,14,52,193,13,184,150,25,214,98,108,71,69,43,227,27,243,160,27,242,141,24,158,121,110,1,55,30,150,172,134,107,156,142,34,220,131,119,62,208,212,163,234,6,252,199,151,209,172,151,32,46,91,25,242,52,34,89,154,247,43,95,231,154,11,78,167,195,242,37,162,222,228,166,218,156,157,250,50,4,144,133,132,237,96,244,34,111,69,57,155,139,217,92,167,85,227,163,108,240,141,179,41,115,237,0,163,159,107,143,125,35,46,70,70,211,41,196,201,131,127,114,76,147,65,181,13,144,248,50,117,139,195,0,133,43,199,192,35,223,166,110,36,254,69,152,86,81,15,162,251,97,192,171,193,79,32,128,133,133,125,95,143,167,187,50,117,177,98,71,56,151,199,122,4,253,38,186,169,252,88,211,108,52,186,173,206,78,251,39,204,40,253,220,106,54,123,238,123,107,39,128,127,226,
|
||||
189,217,28,194,191,61,243,157,74,32,254,75,101,16,241,2,194,46,6,64,42,99,214,237,66,133,22,84,104,65,133,22,84,104,237,89,178,56,81,175,210,180,106,102,187,179,21,81,219,143,2,87,40,27,61,61,247,57,103,120,189,211,111,120,211,101,141,111,229,183,161,88,58,32,226,9,134,188,144,6,62,59,144,40,36,238,110,173,135,39,158,234,122,104,168,203,33,173,174,6,230,193,59,61,50,215,227,64,35,241,76,94,141,213,79,242,136,141,206,153,179,208,230,126,168,177,104,161,91,46,25,123,42,17,160,110,238,92,34,115,95,13,25,185,154,86,1,157,105,56,151,79,211,58,201,158,175,51,143,252,15,252,233,158,158,98,26,245,3,249,248,17,190,118,47,47,117,167,94,162,110,135,115,231,12,234,201,249,113,89,186,137,75,209,22,72,7,143,223,212,223,133,60,119,193,117,248,13,242,229,73,223,18,125,175,233,100,121,148,206,77,204,111,195,155,93,71,137,212,119,89,39,22,55,148,191,158,152,108,189,234,125,31,209,129,89,79,157,31,78,28,41,150,142,34,109,
|
||||
131,27,44,145,149,17,118,245,73,160,234,97,120,177,115,63,128,170,176,211,247,67,172,65,51,181,254,173,143,251,60,115,105,36,121,217,244,42,245,200,35,248,240,21,157,177,67,199,233,56,72,63,76,194,242,155,148,232,150,168,207,254,79,133,78,176,252,172,183,102,74,166,226,117,200,20,179,106,6,160,200,134,71,124,16,167,133,213,30,66,93,121,109,124,42,238,147,56,245,251,255,7,122,249,168,171,
|
||||
|
||||
|
|
|
|||
|
|
@ -159,8 +159,8 @@ hannel]()&]
|
|||
[s2;%% Creates an scp channel instance.&]
|
||||
[s3; &]
|
||||
[s4; &]
|
||||
[s5;:Upp`:`:SshSession`:`:CreateTcpTunnel`(`): [_^Upp`:`:SshTunnel^ SshTunnel]_[* CreateT
|
||||
cpTunnel]()&]
|
||||
[s5;:Upp`:`:SshSession`:`:CreateTunnel`(`): [_^Upp`:`:SshTunnel^ SshTunnel]_[* CreateTunn
|
||||
el]()&]
|
||||
[s2;%% Creates a tcp`-ip and port forwarding channel instance.&]
|
||||
[s3; &]
|
||||
[s4; &]
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@ COMPRESSED
|
|||
59,34,61,182,82,82,95,17,32,16,168,220,33,212,88,148,171,115,34,230,252,58,76,10,236,199,111,112,63,187,65,16,33,130,229,166,137,22,98,145,100,75,54,41,102,51,164,23,228,93,185,214,91,195,27,228,5,143,20,158,59,173,104,189,27,235,64,221,48,20,63,83,172,248,208,181,169,25,110,11,218,249,50,21,180,76,42,198,106,174,115,166,190,202,192,174,57,220,242,225,52,19,208,155,178,156,60,227,49,210,167,44,47,67,37,57,3,217,192,92,26,236,212,84,176,123,69,109,238,27,246,172,185,242,132,5,95,150,246,164,92,14,54,141,74,110,13,6,230,156,33,188,231,180,159,24,159,107,0,160,124,174,39,77,240,100,37,156,145,129,232,75,255,200,64,64,62,69,212,145,224,107,228,32,64,122,149,63,206,191,119,199,21,193,218,182,243,15,60,125,26,172,20,117,215,161,3,75,131,30,126,173,1,120,119,123,222,140,132,4,72,134,187,54,179,156,39,69,52,173,0,129,75,251,123,122,251,76,57,140,217,160,197,157,9,29,186,50,1,91,74,202,176,211,68,234,
|
||||
124,218,32,64,240,155,180,213,236,125,43,218,10,99,178,50,22,98,152,70,226,142,91,213,100,125,59,204,255,56,190,111,77,184,252,26,209,218,175,125,40,170,54,151,113,109,211,174,97,149,34,216,46,74,219,38,84,26,96,39,169,130,246,58,221,46,234,62,74,89,85,57,96,215,127,162,182,54,155,221,212,213,245,161,138,231,159,86,213,19,248,217,11,108,149,79,4,118,141,205,110,170,206,201,211,169,242,251,212,168,2,136,73,194,159,234,194,54,151,221,20,189,50,35,253,61,236,79,34,227,122,203,174,65,147,40,18,241,165,216,55,85,186,168,127,98,67,124,125,9,222,79,179,66,197,194,54,193,113,204,17,16,37,50,41,213,56,136,169,126,240,247,56,145,42,145,183,105,117,79,134,165,178,24,99,66,211,201,146,229,226,160,24,104,229,125,101,94,105,130,238,14,246,248,78,228,39,96,22,137,202,30,175,94,190,160,62,6,202,180,227,211,211,151,111,94,159,179,219,119,214,141,242,92,25,165,226,83,25,197,82,17,177,58,156,192,32,94,213,47,153,43,90,106,155,200,
|
||||
34,8,4,53,61,94,255,244,234,21,221,152,241,48,42,50,177,155,14,47,168,50,203,72,7,85,9,172,1,187,94,9,24,97,245,0,8,123,113,183,140,168,64,181,53,208,205,28,137,213,74,3,89,56,99,252,26,146,18,234,187,137,250,45,164,16,25,192,67,22,248,120,121,173,81,59,8,77,189,168,130,54,207,105,120,41,116,86,181,210,197,255,151,212,1,136,34,45,146,82,150,241,27,54,89,230,66,214,215,128,33,239,141,153,88,164,40,243,181,80,31,12,211,105,18,92,137,252,246,210,59,11,82,253,224,156,85,63,55,45,188,138,129,189,240,74,117,57,83,137,0,234,45,81,22,7,165,179,73,53,104,55,73,171,156,110,93,212,205,121,24,91,13,48,162,57,195,178,143,185,146,175,204,107,169,12,67,234,179,33,187,150,107,118,167,53,94,25,94,15,94,153,157,157,86,92,236,36,140,241,76,172,146,47,60,156,44,153,255,25,69,8,255,51,195,177,244,90,43,191,158,135,193,188,44,49,171,124,77,26,168,237,148,220,212,102,141,205,211,232,220,207,255,204,46,14,
|
||||
17,223,203,156,144,198,192,203,162,228,70,100,1,85,168,145,200,177,23,236,86,67,193,210,20,122,183,193,131,90,48,201,0,142,250,30,127,181,117,85,253,199,160,102,241,218,9,57,20,204,183,99,122,105,207,85,108,175,192,187,86,226,172,193,119,54,167,110,116,4,99,144,145,103,168,75,183,176,83,102,11,10,100,184,113,78,237,231,82,132,1,12,94,166,132,132,45,174,212,214,64,41,188,186,164,165,173,82,11,125,185,113,7,6,86,218,248,149,153,190,205,225,219,26,135,187,247,182,129,114,164,42,103,162,187,179,171,170,177,244,169,214,201,138,208,94,194,250,174,178,151,156,229,105,217,103,83,13,9,142,245,188,195,202,213,172,142,52,131,13,91,188,121,162,182,120,243,219,18,172,188,179,73,54,134,173,92,80,71,231,201,210,29,191,19,193,6,209,232,182,146,139,126,88,66,169,203,205,214,18,120,244,116,121,78,131,187,176,5,132,90,176,6,90,176,21,179,224,35,64,134,192,127,86,108,1,77,63,80,182,209,63,45,177,170,113,155,65,203,161,219,94,152,234,124,137,
|
||||
2,45,82,173,27,172,2,90,116,79,55,28,29,1,109,202,35,233,190,206,34,233,151,109,68,117,189,81,210,76,44,40,104,234,99,165,167,136,150,96,100,144,111,235,28,215,7,27,187,156,204,12,251,8,157,222,34,139,172,110,132,225,171,18,84,174,15,200,116,246,177,106,76,210,230,97,181,15,105,188,149,31,103,133,157,38,54,217,170,232,88,198,57,127,87,166,52,63,253,248,138,58,126,212,36,80,81,149,142,40,143,192,205,31,81,34,254,39,124,20,31,8,46,254,159,180,104,252,241,96,127,223,31,81,20,31,84,65,244,208,31,83,204,244,71,3,242,20,127,60,30,29,177,230,120,151,205,233,1,219,55,84,227,111,167,214,253,167,135,139,84,190,213,76,95,181,16,201,16,31,163,211,78,134,254,40,29,123,131,213,142,14,198,171,54,152,210,118,173,235,76,26,110,119,183,93,208,255,38,148,65,233,0,183,129,187,78,194,169,2,110,69,100,135,129,213,221,213,177,145,173,203,14,235,191,60,44,179,99,210,241,53,146,135,115,166,190,198,95,169,220,167,58,83,171,100,
|
||||
120,57,211,197,168,32,42,125,68,61,11,99,58,55,8,213,101,24,95,39,87,116,120,96,78,253,212,105,56,82,199,200,156,92,200,121,121,0,15,10,132,89,117,104,182,52,201,55,75,112,83,229,53,118,63,119,70,101,45,50,118,117,124,232,58,206,201,239,171,222,61,101,41,241,84,31,119,92,82,179,64,165,92,51,33,166,19,30,92,81,34,105,119,18,56,157,108,232,196,73,222,78,63,149,100,229,209,157,41,154,33,58,29,176,83,178,187,64,58,156,169,35,68,197,216,104,173,124,36,19,83,20,221,65,121,208,167,142,25,77,113,177,58,212,163,50,170,180,102,197,102,71,192,224,196,179,240,242,17,144,105,194,21,104,103,107,136,137,69,152,231,218,223,201,188,234,189,27,117,106,97,130,100,154,37,121,18,36,145,42,191,229,156,95,225,214,156,50,113,90,59,20,53,181,145,113,5,88,178,37,229,254,82,104,94,119,74,149,29,53,164,68,251,17,250,169,182,202,122,26,190,155,138,101,205,119,43,153,126,172,154,27,115,240,154,172,239,166,236,207,88,34,179,165,173,238,
|
||||
119,240,185,115,70,159,150,178,154,108,147,186,151,212,215,177,214,28,159,209,209,9,47,195,210,172,136,54,97,121,71,189,107,53,129,82,76,21,250,252,146,83,70,97,85,52,87,113,114,19,51,122,247,129,122,236,117,69,86,85,48,170,50,225,17,12,55,231,81,94,118,20,84,152,82,54,205,18,43,70,62,214,54,111,179,228,221,195,166,81,84,119,99,83,105,151,114,145,98,197,149,167,119,165,169,178,240,114,78,167,125,136,64,58,48,133,113,152,135,60,42,3,209,74,129,242,5,161,133,160,151,117,86,198,203,195,40,252,93,159,245,133,25,29,150,102,40,225,252,61,20,88,81,113,73,229,147,255,25,139,69,142,125,232,138,108,240,110,201,248,148,167,84,201,50,122,213,100,74,239,235,76,63,169,13,127,113,221,237,107,9,228,120,254,35,69,86,153,223,234,212,85,246,5,133,178,110,119,200,222,190,57,125,249,11,36,143,150,36,179,105,51,34,31,45,244,186,250,197,222,130,110,199,28,101,124,147,82,43,213,192,215,82,175,58,166,45,83,225,42,161,149,38,60,195,157,
|
||||
211,92,141,202,180,192,234,125,31,241,240,59,36,166,84,147,27,95,34,81,121,121,249,174,154,149,136,239,104,230,178,221,109,219,250,219,34,86,170,157,179,242,215,61,93,134,218,214,39,141,237,13,191,123,30,213,43,252,74,209,54,5,143,106,43,83,47,191,41,64,171,28,251,131,251,240,38,20,234,198,133,10,38,10,251,80,74,149,48,233,227,61,90,114,21,43,105,182,80,37,128,42,112,52,103,253,18,30,15,230,43,82,197,53,43,151,172,165,66,227,206,219,123,201,164,60,137,87,65,174,100,138,172,130,14,150,173,56,176,208,204,56,189,155,23,136,213,59,117,45,172,214,105,72,42,33,38,84,199,210,146,213,240,204,180,183,40,119,83,167,218,97,30,169,19,116,186,32,207,205,10,237,214,99,205,206,188,216,146,44,82,74,33,207,136,90,221,183,73,75,177,116,35,200,76,80,6,7,10,87,165,2,85,32,19,212,46,227,249,10,51,178,182,29,78,170,182,146,233,208,169,129,20,93,110,7,23,142,157,18,132,187,188,55,120,148,24,217,19,122,175,9,166,142,30,249,
|
||||
222,160,117,165,147,223,231,246,41,138,157,234,154,247,49,130,213,76,59,44,75,255,253,157,137,236,8,247,126,252,224,188,83,81,77,203,144,109,36,11,158,155,92,54,136,18,41,164,157,69,216,130,57,101,21,224,172,89,242,222,55,107,173,23,34,202,38,163,177,166,55,52,133,44,123,33,104,211,9,237,54,227,157,151,46,116,107,183,70,109,220,186,126,67,213,244,6,107,186,181,90,183,58,147,112,26,196,75,120,118,112,197,47,69,211,154,172,114,129,182,219,106,13,58,253,110,47,218,247,186,25,254,229,251,110,123,130,127,135,238,158,118,134,127,107,111,64,148,97,199,239,40,119,190,20,227,241,96,0,250,14,232,59,160,239,128,190,115,232,41,106,166,31,173,179,170,185,189,126,189,98,6,78,32,170,46,85,243,28,105,213,70,158,127,182,45,25,142,152,237,0,131,31,142,207,78,222,124,227,95,28,255,114,116,242,245,235,239,142,199,37,87,34,62,98,211,112,134,130,207,223,163,104,143,93,216,223,187,204,146,34,117,253,61,36,72,110,69,203,30,53,168,253,247,141,242,
|
||||
247,132,177,242,71,24,237,117,186,227,77,128,220,194,150,78,173,9,149,191,15,86,247,97,88,79,222,156,158,125,127,252,235,45,84,213,81,234,84,202,109,102,81,207,51,201,31,163,246,145,126,111,174,118,164,75,85,44,166,125,132,186,83,149,226,212,255,78,99,60,194,26,71,199,175,143,126,252,245,237,25,29,185,234,200,115,47,249,169,69,190,110,32,46,36,188,194,223,11,242,140,109,51,34,104,220,3,79,209,60,141,68,207,52,9,88,45,11,127,139,167,92,68,234,210,63,140,150,146,83,216,141,194,162,137,4,227,193,89,38,193,125,36,94,255,94,146,22,226,252,211,8,2,46,243,135,102,225,89,64,71,55,15,60,6,151,109,20,49,82,167,199,184,237,15,95,31,177,19,174,254,207,194,63,239,187,189,71,184,46,4,126,148,207,18,221,186,73,230,11,30,232,64,230,239,153,88,182,201,114,54,89,199,245,30,36,219,26,84,87,20,254,222,193,3,211,45,166,157,7,9,30,230,146,133,169,88,76,221,174,195,106,183,110,248,135,73,42,98,196,179,102,144,44,182,174,
|
||||
16,237,52,58,145,80,247,198,227,255,3,204,69,215,142,
|
||||
17,223,203,156,144,198,192,203,162,228,70,100,1,85,168,145,200,177,23,236,86,67,193,210,20,122,183,193,131,90,48,201,0,142,250,30,127,181,117,85,253,199,160,102,241,218,9,57,20,204,183,99,122,105,207,85,108,175,192,187,86,226,172,193,119,54,167,110,116,4,99,144,145,103,168,75,183,176,83,102,11,10,100,184,113,78,237,231,82,132,1,12,94,166,132,132,45,174,212,214,64,41,188,186,164,165,173,82,11,125,185,113,7,6,86,218,248,149,153,190,205,225,219,26,135,187,247,182,129,114,164,42,103,162,187,179,171,170,177,244,169,214,201,138,208,94,194,250,174,178,151,156,229,105,217,103,83,13,9,142,245,188,195,202,213,172,142,52,131,13,91,188,121,162,182,120,243,219,18,172,188,179,73,54,134,173,92,80,71,231,201,210,29,191,19,193,6,209,232,182,146,139,126,88,66,169,203,205,214,18,120,244,116,121,78,131,187,176,5,132,90,176,6,90,176,21,179,224,35,64,118,86,108,65,76,63,80,134,209,63,45,153,204,141,141,112,229,208,106,47,76,117,166,68,33,22,
|
||||
73,214,13,252,159,150,219,211,77,70,135,63,155,50,72,186,175,243,71,250,101,155,79,93,111,148,52,19,11,10,151,250,64,233,41,162,37,24,25,228,219,122,198,245,193,198,254,38,51,195,62,66,143,183,200,34,171,15,97,248,170,212,148,235,163,49,157,119,172,90,146,180,109,88,141,67,26,111,101,198,89,97,39,136,77,182,42,55,150,113,206,223,149,201,204,79,63,190,162,94,31,181,7,84,60,165,195,201,35,112,243,71,148,130,255,9,239,196,7,194,138,255,39,45,23,127,60,216,223,247,71,20,191,7,85,248,60,244,199,20,45,253,209,128,60,197,31,143,71,71,172,57,222,101,91,122,192,246,13,213,242,219,169,105,255,233,225,34,149,111,181,209,87,205,67,50,196,199,232,177,147,161,63,74,175,222,96,181,163,131,241,170,1,166,180,93,235,55,147,134,219,221,109,23,244,191,9,101,80,58,192,109,224,174,147,112,170,128,91,17,217,97,96,117,119,117,96,100,235,178,195,250,47,143,201,236,152,116,124,141,180,225,156,169,175,241,87,42,235,169,78,211,42,25,94,206,
|
||||
116,25,42,136,74,31,78,207,194,152,78,12,66,117,25,198,215,201,21,29,27,152,243,62,117,14,142,164,49,50,103,22,114,94,30,189,131,2,97,86,29,151,45,77,218,205,18,220,84,25,141,221,201,157,81,65,139,92,93,29,28,186,142,115,242,251,170,107,79,249,73,60,213,7,29,151,212,38,80,201,214,76,136,233,132,7,87,148,66,218,61,4,78,103,26,58,101,146,183,19,79,37,89,121,104,103,202,101,136,78,71,235,148,230,46,144,8,103,234,240,80,49,54,90,43,31,201,196,20,229,118,80,30,241,169,3,70,83,86,172,142,243,168,128,42,173,89,177,217,17,48,56,241,44,188,124,4,100,154,112,5,218,217,26,98,98,17,230,185,246,119,50,175,122,227,70,157,87,152,32,153,102,73,158,4,73,164,10,111,57,231,87,184,53,167,28,156,214,14,69,77,109,100,92,1,150,108,73,89,191,20,154,215,157,34,101,71,13,41,197,126,132,126,170,161,178,158,128,239,166,98,89,237,221,74,163,31,171,230,198,236,187,38,235,187,41,251,51,150,200,108,105,171,251,29,124,
|
||||
238,156,209,167,165,172,38,219,164,238,37,117,116,172,53,199,103,116,104,194,203,176,52,43,162,77,88,222,81,239,90,77,160,20,83,37,62,191,228,148,81,88,181,204,85,156,220,196,140,222,122,160,238,122,93,145,85,181,139,170,73,120,4,195,205,121,148,151,189,4,21,166,148,77,179,196,138,145,143,181,205,219,44,121,247,176,105,20,213,221,216,84,218,165,92,164,88,113,229,185,93,105,170,44,188,156,211,57,31,34,144,14,76,97,28,230,33,143,202,64,180,82,160,124,53,104,33,232,53,157,149,241,242,48,10,127,215,167,124,97,70,199,164,25,138,55,127,15,165,85,84,92,82,225,228,127,198,98,145,99,31,186,34,27,188,91,50,62,229,41,213,176,140,94,50,153,210,155,58,211,79,106,195,95,92,119,251,90,2,57,158,255,72,145,85,230,183,122,116,149,125,65,161,172,219,29,178,183,111,78,95,254,2,201,163,37,201,108,26,140,200,71,11,189,174,126,177,183,160,219,49,71,25,223,164,212,74,53,240,181,212,171,14,104,203,84,184,74,104,165,9,207,112,231,52,87,
|
||||
163,50,45,176,122,211,71,60,252,246,136,41,210,228,198,215,71,84,94,94,190,165,102,37,226,59,154,185,108,116,219,182,254,182,136,149,106,231,172,252,117,79,127,161,182,245,73,99,123,171,239,158,71,245,10,191,82,180,77,193,163,218,202,212,107,111,10,208,42,199,254,224,14,188,9,133,186,101,161,130,137,194,62,148,82,37,76,250,96,143,150,92,197,74,154,45,84,9,160,10,28,205,89,191,126,199,131,249,138,84,113,205,202,37,107,169,208,184,243,222,94,50,41,207,224,85,144,43,153,34,171,160,35,101,43,14,44,52,51,78,111,229,5,98,245,54,93,11,171,117,26,146,74,136,9,213,129,180,100,53,60,51,141,45,202,221,212,121,118,152,71,234,236,156,46,200,115,179,66,187,245,88,179,51,175,180,36,139,148,82,200,51,162,86,247,109,210,82,44,221,2,50,19,148,193,129,194,85,169,64,21,200,4,53,202,120,190,194,140,172,109,135,147,170,161,100,122,115,106,32,69,151,219,193,133,99,167,4,225,46,111,12,30,37,70,246,132,222,104,130,169,163,71,190,49,104,
|
||||
93,233,228,247,185,125,126,98,167,186,230,77,140,96,53,211,14,203,210,127,127,103,34,59,194,189,31,63,56,239,84,84,211,50,100,27,201,130,231,38,151,13,162,68,10,105,103,17,182,96,78,89,5,56,107,150,188,247,157,90,235,85,136,178,189,104,172,233,13,77,33,203,94,8,218,116,66,187,193,120,231,117,11,221,212,173,81,3,183,174,223,77,53,93,193,154,110,170,214,173,158,36,156,6,241,18,158,29,92,241,75,209,180,38,171,92,160,237,182,90,131,78,191,219,139,246,189,110,134,127,249,190,219,158,224,223,161,187,167,157,225,223,218,27,16,101,216,241,59,202,157,47,197,120,60,24,128,190,3,250,14,232,59,160,239,28,122,138,154,233,71,235,172,106,110,175,95,175,152,129,19,136,170,75,213,54,71,90,181,145,231,159,109,75,134,35,102,59,192,224,135,227,179,147,55,223,248,23,199,191,28,157,124,253,250,187,227,113,201,149,136,143,216,52,156,161,224,243,247,40,218,99,23,246,247,46,179,164,72,93,127,15,9,146,91,209,178,71,13,106,255,125,163,252,61,97,
|
||||
172,252,17,70,123,157,238,120,19,32,183,176,165,243,106,66,229,239,131,213,125,24,214,147,55,167,103,223,31,255,122,11,85,117,136,58,149,114,155,89,212,243,76,242,199,168,125,164,223,152,171,29,233,82,21,139,105,31,161,238,84,165,56,245,191,211,24,143,176,198,209,241,235,163,31,127,125,123,70,135,173,58,242,220,75,126,106,145,175,27,136,11,9,175,240,247,130,60,99,219,140,8,26,247,192,83,52,79,35,209,51,77,2,86,203,194,223,226,41,23,145,186,244,15,163,165,228,20,118,163,176,104,34,193,120,112,150,73,112,31,137,215,191,151,164,133,56,255,52,130,128,203,252,161,89,120,22,208,161,205,3,143,193,101,27,69,140,212,233,49,110,251,195,215,71,236,132,171,255,173,240,207,251,110,239,17,174,11,129,31,229,179,68,183,110,146,249,130,7,58,144,249,123,38,150,109,178,156,77,214,113,189,7,201,182,6,213,21,133,191,119,240,192,116,139,105,231,65,130,135,185,100,97,42,22,83,183,235,176,218,173,27,254,97,146,138,24,241,172,25,36,139,173,43,68,59,
|
||||
141,78,36,212,189,241,248,255,186,252,213,64,
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue