mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-21 06:45:39 -06:00
Core/SSH: SetError internal method is renamed as ThrowError to better describe its function.
git-svn-id: svn://ultimatepp.org/upp/trunk@15504 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
ce6e887992
commit
13766bd1c6
8 changed files with 81 additions and 81 deletions
|
|
@ -12,7 +12,7 @@ bool SshChannel::Init()
|
|||
|
||||
LIBSSH2_CHANNEL *ch = libssh2_channel_open_session(ssh->session);
|
||||
if(!ch && !WouldBlock())
|
||||
SetError(-1);
|
||||
ThrowError(-1);
|
||||
if(ch) {
|
||||
channel = MakeOne<LIBSSH2_CHANNEL*>(ch);
|
||||
LLOG("A new channel is opened.");
|
||||
|
|
@ -28,7 +28,7 @@ void SshChannel::Exit()
|
|||
Run([=]() mutable {
|
||||
int rc = libssh2_channel_free(*channel);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(!rc) {
|
||||
ssh->init = false;
|
||||
channel.Clear();
|
||||
|
|
@ -49,7 +49,7 @@ bool SshChannel::Close()
|
|||
{
|
||||
return Run([=]() mutable {
|
||||
int rc = libssh2_channel_close(*channel);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
if(!WouldBlock(rc) && rc < 0) ThrowError(rc);
|
||||
if(!rc) LLOG("Channel close message is sent to the server.");
|
||||
return !rc;
|
||||
});
|
||||
|
|
@ -59,7 +59,7 @@ bool SshChannel::WaitClose()
|
|||
{
|
||||
return Run([=]() mutable {
|
||||
int rc = libssh2_channel_wait_closed(*channel);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
if(!WouldBlock(rc) && rc < 0) ThrowError(rc);
|
||||
if(!rc) LLOG("Channel close message is acknowledged by the server.");
|
||||
return !rc;
|
||||
});
|
||||
|
|
@ -76,7 +76,7 @@ bool SshChannel::Request(const String& request, const String& params)
|
|||
params.GetLength()
|
||||
);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(!rc)
|
||||
LLOG("\"" << request << "\" request (params: " << params << ") is successful.");
|
||||
return !rc;
|
||||
|
|
@ -98,7 +98,7 @@ bool SshChannel::RequestTerminal(const String& term, int width, int height, cons
|
|||
LIBSSH2_TERM_HEIGHT_PX
|
||||
);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(!rc)
|
||||
LLOG("Terminal (" << term << ") [W:" << width << ", H:" << height << "] opened.");
|
||||
return !rc;
|
||||
|
|
@ -109,7 +109,7 @@ bool SshChannel::SetEnv(const String& variable, const String& value)
|
|||
{
|
||||
return Run([=]() mutable {
|
||||
int rc = libssh2_channel_setenv(*channel, variable, value);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
if(!WouldBlock(rc) && rc < 0) ThrowError(rc);
|
||||
if(!rc) LLOG("Environment variable '" << variable << "' set to " << value);
|
||||
return !rc;
|
||||
});
|
||||
|
|
@ -119,7 +119,7 @@ bool SshChannel::PutEof()
|
|||
{
|
||||
return Run([=]() mutable {
|
||||
int rc = libssh2_channel_send_eof(*channel);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
if(!WouldBlock(rc) && rc < 0) ThrowError(rc);
|
||||
if(!rc) LLOG("EOF message is sent to the server.");
|
||||
return !rc;
|
||||
});
|
||||
|
|
@ -129,7 +129,7 @@ bool SshChannel::GetEof()
|
|||
{
|
||||
return Run([=]() mutable {
|
||||
int rc = libssh2_channel_wait_eof(*channel);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
if(!WouldBlock(rc) && rc < 0) ThrowError(rc);
|
||||
if(!rc) LLOG("EOF message is acknowledged by the server.");;
|
||||
return !rc;
|
||||
});
|
||||
|
|
@ -169,7 +169,7 @@ bool SshChannel::SetReadWindowSize(uint32 size, bool force)
|
|||
bool SshChannel::SetWndSz(uint32 size, bool force)
|
||||
{
|
||||
int rc = libssh2_channel_receive_window_adjust2(*channel, size, (unsigned char) force, nullptr);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
if(!WouldBlock(rc) && rc < 0) ThrowError(rc);
|
||||
if(!rc) LLOG(Format("Receive window size set is to %d.", AsString(size)));
|
||||
return !rc;
|
||||
}
|
||||
|
|
@ -205,9 +205,9 @@ int SshChannel::Get(void *ptr, int size, int sid)
|
|||
Run([=]() mutable {
|
||||
while(done < size && !IsEof() && !IsTimeout()) {
|
||||
int rc = Read(ptr, size, sid);
|
||||
if(rc > 0) UpdateClient();
|
||||
if(rc < 0) return false;
|
||||
if(!rc) break;
|
||||
UpdateClient();
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
|
@ -255,9 +255,9 @@ int SshChannel::Put(const void *ptr, int size, int sid)
|
|||
Run([=]() mutable {
|
||||
while(done < size && !IsEof() && !IsTimeout()) {
|
||||
int rc = Write(ptr, size, sid);
|
||||
if(rc > 0) UpdateClient();
|
||||
if(rc < 0) return false;
|
||||
if(!rc) break;
|
||||
UpdateClient();
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
|
@ -272,7 +272,7 @@ int SshChannel::Read(void *ptr, int size, int sid)
|
|||
libssh2_channel_read_ex(*channel, sid, (char*) ptr + done, size_t(sz))
|
||||
);
|
||||
if(rc < 0 && !WouldBlock(rc)) {
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
}
|
||||
else
|
||||
if(rc > 0) {
|
||||
|
|
@ -298,7 +298,7 @@ int SshChannel::Write(const void *ptr, int size, int sid)
|
|||
libssh2_channel_write_ex(*channel, sid, (const char*) ptr + done, size_t(sz))
|
||||
);
|
||||
if(rc < 0 && !WouldBlock(rc)) {
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
}
|
||||
else
|
||||
if(rc > 0) {
|
||||
|
|
@ -350,7 +350,7 @@ bool SshChannel::Shut(const String& msg, bool nowait)
|
|||
if(Close() && eof)
|
||||
WaitClose();
|
||||
if(!IsNull(msg))
|
||||
ReportError(-1, msg);
|
||||
SetError(-1, msg);
|
||||
return !IsError();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -54,13 +54,13 @@ bool Ssh::Run(Gate<>&& fn, bool abortable)
|
|||
Mutex::Lock __(sLoopLock);
|
||||
|
||||
if(IsTimeout())
|
||||
SetError(-1, "Operation timed out.");
|
||||
ThrowError(-1, "Operation timed out.");
|
||||
|
||||
if(abortable && ssh->status == ABORTED)
|
||||
SetError(-1, "Operation aborted.");
|
||||
ThrowError(-1, "Operation aborted.");
|
||||
|
||||
if(ssh->socket && ssh->socket->IsError())
|
||||
SetError(-1, "[Socket error]: " << ssh->socket->GetErrorDesc());
|
||||
ThrowError(-1, "[Socket error]: " << ssh->socket->GetErrorDesc());
|
||||
|
||||
if(!ssh->init)
|
||||
ssh->init = Init();
|
||||
|
|
@ -77,10 +77,10 @@ bool Ssh::Run(Gate<>&& fn, bool abortable)
|
|||
ssh->status = IDLE;
|
||||
}
|
||||
catch(const Error& e) {
|
||||
ReportError(e.code, e);
|
||||
SetError(e.code, e);
|
||||
}
|
||||
catch(...) {
|
||||
ReportError(-1, "Unhandled exception.");
|
||||
SetError(-1, "Unhandled exception.");
|
||||
}
|
||||
|
||||
return !IsError();
|
||||
|
|
@ -101,7 +101,7 @@ void Ssh::Wait()
|
|||
we.Wait(ssh->waitstep);
|
||||
}
|
||||
|
||||
void Ssh::SetError(int rc, const String& reason)
|
||||
void Ssh::ThrowError(int rc, const String& reason)
|
||||
{
|
||||
if(IsNull(reason) && ssh && ssh->session) {
|
||||
Buffer<char*> libmsg(256, 0);
|
||||
|
|
@ -112,7 +112,7 @@ void Ssh::SetError(int rc, const String& reason)
|
|||
throw Error(rc, reason);
|
||||
}
|
||||
|
||||
void Ssh::ReportError(int rc, const String& reason)
|
||||
void Ssh::SetError(int rc, const String& reason)
|
||||
{
|
||||
ssh->status = FAILED;
|
||||
ssh->error.a = rc;
|
||||
|
|
|
|||
|
|
@ -61,8 +61,8 @@ protected:
|
|||
bool WouldBlock(int rc) { return rc == LIBSSH2_ERROR_EAGAIN; }
|
||||
bool WouldBlock() { return ssh->session && WouldBlock(libssh2_session_last_errno(ssh->session)); }
|
||||
bool IsTimeout() const { return !IsNull(ssh->timeout) && ssh->timeout > 0 && msecs(ssh->start_time) >= ssh->timeout; }
|
||||
void SetError(int rc, const String& reason = Null);
|
||||
void ReportError(int rc, const String& reason);
|
||||
void ThrowError(int rc, const String& reason = Null);
|
||||
void SetError(int rc, const String& reason);
|
||||
void UpdateClient() { WhenWait ? WhenWait() : ssh->whenwait(); }
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -8,10 +8,10 @@ namespace Upp {
|
|||
bool SFtp::Init()
|
||||
{
|
||||
if(!ssh->session)
|
||||
SetError(-1, "SSH session is invalid.");
|
||||
ThrowError(-1, "SSH session is invalid.");
|
||||
auto session = libssh2_sftp_init(ssh->session);
|
||||
if(!session && !WouldBlock())
|
||||
SetError(-1);
|
||||
ThrowError(-1);
|
||||
if(session) {
|
||||
sftp_session = MakeOne<LIBSSH2_SFTP*>(session);
|
||||
LLOG("Session successfully initialized.");
|
||||
|
|
@ -53,7 +53,7 @@ SFtpHandle SFtp::Open(const String& path, dword flags, long mode)
|
|||
Run([=, &h] () mutable {
|
||||
h = libssh2_sftp_open(*sftp_session, path, flags, mode);
|
||||
if(!h && !WouldBlock())
|
||||
SetError(-1);
|
||||
ThrowError(-1);
|
||||
if(h)
|
||||
LLOG(Format("File '%s' is successfully opened.", path));
|
||||
return h;
|
||||
|
|
@ -78,7 +78,7 @@ bool SFtp::Rename(const String& oldpath, const String& newpath)
|
|||
return Run([=] () mutable {
|
||||
int rc = libssh2_sftp_rename(*sftp_session, oldpath, newpath);
|
||||
if(!WouldBlock(rc) && rc != 0)
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(rc == 0)
|
||||
LLOG(Format("'%s' is successfully renamed to '%s'", oldpath, newpath));
|
||||
return !rc;
|
||||
|
|
@ -90,7 +90,7 @@ bool SFtp::Delete(const String& path)
|
|||
return Run([=] () mutable {
|
||||
int rc = libssh2_sftp_unlink(*sftp_session, path);
|
||||
if(!WouldBlock(rc) && rc != 0)
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(rc == 0)
|
||||
LLOG(Format("File '%s' is successfully deleted.", path));
|
||||
return !rc;
|
||||
|
|
@ -102,7 +102,7 @@ bool SFtp::Sync(SFtpHandle handle)
|
|||
return Run([=] () mutable {
|
||||
int rc = libssh2_sftp_fsync(handle);
|
||||
if(!WouldBlock(rc) && rc != 0)
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(rc == 0)
|
||||
LLOG("File successfully synchronized to disk.");
|
||||
return !rc;
|
||||
|
|
@ -142,7 +142,7 @@ int SFtp::Get(SFtpHandle handle, void *ptr, int size)
|
|||
);
|
||||
if(rc < 0) {
|
||||
if(!WouldBlock(rc))
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
|
|
@ -171,7 +171,7 @@ int SFtp::Put(SFtpHandle handle, const void *ptr, int size)
|
|||
);
|
||||
if(rc < 0) {
|
||||
if(!WouldBlock(rc))
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
|
|
@ -254,7 +254,7 @@ SFtpHandle SFtp::OpenDir(const String& path)
|
|||
Run([=, &h] () mutable {
|
||||
h = libssh2_sftp_opendir(*sftp_session, path);
|
||||
if(!h && !WouldBlock())
|
||||
SetError(-1);
|
||||
ThrowError(-1);
|
||||
if(h)
|
||||
LLOG(Format("Directory '%s' is successfully opened.", path));
|
||||
return h;
|
||||
|
|
@ -267,7 +267,7 @@ bool SFtp::MakeDir(const String& path, long mode)
|
|||
return Run([=] () mutable {
|
||||
int rc = libssh2_sftp_mkdir(*sftp_session, path, mode);
|
||||
if(!WouldBlock(rc) && rc != 0)
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(!rc)
|
||||
LLOG(Format("Directory '%s' is succesfully created.", path));
|
||||
return !rc;
|
||||
|
|
@ -279,7 +279,7 @@ bool SFtp::RemoveDir(const String& path)
|
|||
return Run([=] () mutable {
|
||||
int rc = libssh2_sftp_rmdir(*sftp_session, path);
|
||||
if(!WouldBlock(rc) && rc != 0)
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(!rc)
|
||||
LLOG(Format("Directory '%s' is succesfully deleted.", path));
|
||||
return !rc;
|
||||
|
|
@ -303,7 +303,7 @@ bool SFtp::ListDir(SFtpHandle handle, DirList& list)
|
|||
);
|
||||
if(rc < 0) {
|
||||
if(!WouldBlock(rc))
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
|
@ -349,7 +349,7 @@ bool SFtp::SymLink(const String& path, String& target, int type)
|
|||
type
|
||||
);
|
||||
if(!WouldBlock(rc) && rc != 0)
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(!rc) {
|
||||
target.Set(buffer, rc);
|
||||
LLOG(Format("Symbolic link '%s' for path '%s' is successfult created.", target, path));
|
||||
|
|
@ -368,7 +368,7 @@ bool SFtp::SymLink(const String& path, String& target, int type)
|
|||
type
|
||||
);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(rc > 0) {
|
||||
target.Set(buffer, rc);
|
||||
LLOG("Symbolic link operation is successful. Target: " << target);
|
||||
|
|
@ -394,7 +394,7 @@ bool SFtp::GetAttrs(SFtpHandle handle, SFtpAttrs& attrs)
|
|||
{
|
||||
return Run([=, &attrs] () mutable {
|
||||
int rc = FStat(handle, attrs, false);
|
||||
if(rc < 0) SetError(rc);
|
||||
if(rc < 0) ThrowError(rc);
|
||||
if(!rc) LLOG("File attributes successfully retrieved.");
|
||||
return !rc;
|
||||
});
|
||||
|
|
@ -404,7 +404,7 @@ bool SFtp::GetAttrs(const String& path, SFtpAttrs& attrs)
|
|||
{
|
||||
return Run([=, &path, &attrs] () mutable {
|
||||
int rc = LStat(path, attrs, LIBSSH2_SFTP_STAT);
|
||||
if(rc < 0) SetError(rc);
|
||||
if(rc < 0) ThrowError(rc);
|
||||
if(!rc) LLOG(Format("File attributes of '%s' is successfully retrieved.", path));
|
||||
return !rc;
|
||||
});
|
||||
|
|
@ -414,7 +414,7 @@ bool SFtp::SetAttrs(SFtpHandle handle, const SFtpAttrs& attrs)
|
|||
{
|
||||
return Run([=, &attrs] () mutable {
|
||||
int rc = FStat(handle, const_cast<SFtpAttrs&>(attrs), true);
|
||||
if(rc < 0) SetError(rc);
|
||||
if(rc < 0) ThrowError(rc);
|
||||
if(!rc) LLOG("File attributes successfully modified.");
|
||||
return !rc;
|
||||
});
|
||||
|
|
@ -424,7 +424,7 @@ bool SFtp::SetAttrs(const String& path, const SFtpAttrs& attrs)
|
|||
{
|
||||
return Run([=, &attrs] () mutable {
|
||||
int rc = LStat(path, const_cast<SFtpAttrs&>(attrs), LIBSSH2_SFTP_SETSTAT);
|
||||
if(rc < 0) SetError(rc);
|
||||
if(rc < 0) ThrowError(rc);
|
||||
if(!rc) LLOG(Format("File attributes of '%s' is successfully modified.", path));
|
||||
return !rc;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ bool Scp::OpenRead(const String& path, ScpAttrs& attrs)
|
|||
LIBSSH2_CHANNEL *ch = libssh2_scp_recv2(ssh->session, path, &attrs);
|
||||
if(!ch && !WouldBlock()) {
|
||||
LLOG("Unable to open file " << path);
|
||||
SetError(-1);
|
||||
ThrowError(-1);
|
||||
}
|
||||
if(ch) {
|
||||
channel = MakeOne<LIBSSH2_CHANNEL*>(ch);
|
||||
|
|
@ -28,7 +28,7 @@ bool Scp::OpenWrite(const String& path, int64 size, long mode)
|
|||
LIBSSH2_CHANNEL *ch = libssh2_scp_send64(ssh->session, path, mode, size, 0, 0);
|
||||
if(!ch && !WouldBlock()) {
|
||||
LLOG("Unable to open file " << path);
|
||||
SetError(-1);
|
||||
ThrowError(-1);
|
||||
}
|
||||
if(ch) {
|
||||
channel = MakeOne<LIBSSH2_CHANNEL*>(ch);
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ bool SshSession::Connect(const String& url)
|
|||
auto b = findarg(u.scheme, "ssh", "sftp", "scp", "exec") >= 0 || (u.scheme.IsEmpty() && !u.host.IsEmpty());
|
||||
int port = (u.port.IsEmpty() || !b) ? 22 : StrInt(u.port);
|
||||
if(b) return Connect(u.host, port, u.username, u.password);
|
||||
ReportError(-1, "Malformed secure shell URL.");
|
||||
SetError(-1, "Malformed secure shell URL.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -111,7 +111,7 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
|
|||
|
||||
if(!Run([=, &ipinfo] () mutable {
|
||||
if(host.IsEmpty())
|
||||
SetError(-1, "Host is not specified.");
|
||||
ThrowError(-1, "Host is not specified.");
|
||||
ssh->session = nullptr;
|
||||
session->socket.Timeout(0);
|
||||
if(!WhenProxy) {
|
||||
|
|
@ -129,7 +129,7 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
|
|||
if(ipinfo.InProgress())
|
||||
return false;
|
||||
if(!ipinfo.GetResult())
|
||||
SetError(-1, "DNS lookup failed.");
|
||||
ThrowError(-1, "DNS lookup failed.");
|
||||
WhenPhase(PHASE_CONNECTION);
|
||||
return true;
|
||||
})) goto Bailout;
|
||||
|
|
@ -151,7 +151,7 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
|
|||
else {
|
||||
if(!Run([=] () mutable {
|
||||
if(!WhenProxy())
|
||||
SetError(-1, "Proxy connection attempt failed.");
|
||||
ThrowError(-1, "Proxy connection attempt failed.");
|
||||
LLOG("Proxy connection to " << host << ":" << port << " is successful.");
|
||||
return true;
|
||||
})) goto Bailout;
|
||||
|
|
@ -166,7 +166,7 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
|
|||
ssh->session = libssh2_session_init_ex(nullptr, nullptr, nullptr, this);
|
||||
#endif
|
||||
if(!ssh->session)
|
||||
SetError(-1, "Failed to initalize libssh2 session.");
|
||||
ThrowError(-1, "Failed to initalize libssh2 session.");
|
||||
#ifdef flagLIBSSH2TRACE
|
||||
if(libssh2_trace_sethandler(ssh->session, this, &ssh_session_libtrace))
|
||||
LLOG("Warning: Unable to set trace (debug) handler for libssh2.");
|
||||
|
|
@ -190,7 +190,7 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
|
|||
int method = session->iomethods.GetKey(0);
|
||||
String mnames = GetMethodNames(method);
|
||||
int rc = libssh2_session_method_pref(ssh->session, method, ~mnames);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
if(!WouldBlock(rc) && rc < 0) ThrowError(rc);
|
||||
if(!rc && !session->iomethods.IsEmpty()) {
|
||||
LLOG("Transport method: #" << method << " is set to [" << mnames << "]");
|
||||
session->iomethods.Remove(0);
|
||||
|
|
@ -201,7 +201,7 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
|
|||
|
||||
if(!Run([=] () mutable {
|
||||
int rc = libssh2_session_handshake(ssh->session, session->socket.GetSOCKET());
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
if(!WouldBlock(rc) && rc < 0) ThrowError(rc);
|
||||
if(!rc) {
|
||||
LLOG("Handshake successful.");
|
||||
WhenPhase(PHASE_AUTHORIZATION);
|
||||
|
|
@ -227,7 +227,7 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
|
|||
break;
|
||||
}
|
||||
if(WhenVerify && !WhenVerify(host, port))
|
||||
SetError(-1);
|
||||
ThrowError(-1);
|
||||
return true;
|
||||
})) goto Bailout;
|
||||
|
||||
|
|
@ -242,7 +242,7 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
|
|||
}
|
||||
else
|
||||
if(!WouldBlock())
|
||||
SetError(-1);
|
||||
ThrowError(-1);
|
||||
return false;
|
||||
}
|
||||
LLOG("Authentication methods list successfully retrieved: [" << session->authmethods << "]");
|
||||
|
|
@ -287,7 +287,7 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
|
|||
break;
|
||||
case HOSTBASED:
|
||||
if(!session->keyfile)
|
||||
SetError(-1, "Keys cannot be loaded from memory.");
|
||||
ThrowError(-1, "Keys cannot be loaded from memory.");
|
||||
else
|
||||
rc = libssh2_userauth_hostbased_fromfile(
|
||||
ssh->session,
|
||||
|
|
@ -311,7 +311,7 @@ bool SshSession::Connect(const String& host, int port, const String& user, const
|
|||
|
||||
}
|
||||
if(rc != 0 && !WouldBlock(rc))
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(rc == 0 && libssh2_userauth_authenticated(ssh->session)) {
|
||||
LLOG("Client succesfully authenticated.");
|
||||
WhenPhase(PHASE_SUCCESS);
|
||||
|
|
@ -421,14 +421,14 @@ int SshSession::TryAgent(const String& username)
|
|||
LLOG("Attempting to authenticate via ssh-agent...");
|
||||
auto agent = libssh2_agent_init(ssh->session);
|
||||
if(!agent)
|
||||
SetError(-1, "Couldn't initialize ssh-agent support.");
|
||||
ThrowError(-1, "Couldn't initialize ssh-agent support.");
|
||||
if(libssh2_agent_connect(agent)) {
|
||||
libssh2_agent_free(agent);
|
||||
SetError(-1, "Couldn't connect to ssh-agent.");
|
||||
ThrowError(-1, "Couldn't connect to ssh-agent.");
|
||||
}
|
||||
if(libssh2_agent_list_identities(agent)) {
|
||||
FreeAgent(agent);
|
||||
SetError(-1, "Couldn't request identities to ssh-agent.");
|
||||
ThrowError(-1, "Couldn't request identities to ssh-agent.");
|
||||
}
|
||||
libssh2_agent_publickey *id = nullptr, *previd = nullptr;
|
||||
|
||||
|
|
@ -436,7 +436,7 @@ int SshSession::TryAgent(const String& username)
|
|||
auto rc = libssh2_agent_get_identity(agent, &id, previd);
|
||||
if(rc < 0) {
|
||||
FreeAgent(agent);
|
||||
SetError(-1, "Unable to obtain identity from ssh-agent.");
|
||||
ThrowError(-1, "Unable to obtain identity from ssh-agent.");
|
||||
}
|
||||
if(rc != 1) {
|
||||
if(libssh2_agent_userauth(agent, ~username, id)) {
|
||||
|
|
@ -451,7 +451,7 @@ int SshSession::TryAgent(const String& username)
|
|||
}
|
||||
else {
|
||||
FreeAgent(agent);
|
||||
SetError(-1, "Couldn't authenticate via ssh-agent");
|
||||
ThrowError(-1, "Couldn't authenticate via ssh-agent");
|
||||
}
|
||||
previd = id;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ void SshShell::ReadWrite(String& in, const void* out, int out_len)
|
|||
|
||||
auto rc = sigtimedwait(&set, nullptr, &timeout);
|
||||
if(rc < 0 && errno != EAGAIN)
|
||||
SetError(-1, "sigtimedwait() failed.");
|
||||
ThrowError(-1, "sigtimedwait() failed.");
|
||||
if(rc > 0)
|
||||
LLOG("SIGWINCH received.");
|
||||
resized = rc > 0;
|
||||
|
|
@ -78,14 +78,14 @@ void SshShell::ReadWrite(String& in, const void* out, int out_len)
|
|||
case WAIT_ABANDONED:
|
||||
return;
|
||||
default:
|
||||
SetError(-1, "WaitForSingleObject() failed.");
|
||||
ThrowError(-1, "WaitForSingleObject() failed.");
|
||||
}
|
||||
|
||||
DWORD n = 0;
|
||||
INPUT_RECORD ir[1];
|
||||
|
||||
if(!PeekConsoleInput(stdinput, ir, 1, &n))
|
||||
SetError(-1, "Unable to peek console input events.");
|
||||
ThrowError(-1, "Unable to peek console input events.");
|
||||
if(n) {
|
||||
switch(ir[0].EventType) {
|
||||
case KEY_EVENT:
|
||||
|
|
@ -103,10 +103,10 @@ void SshShell::ReadWrite(String& in, const void* out, int out_len)
|
|||
case FOCUS_EVENT:
|
||||
break;
|
||||
default:
|
||||
SetError(-1, "Unknown console event type encountered.");
|
||||
ThrowError(-1, "Unknown console event type encountered.");
|
||||
}
|
||||
if(!ReadConsoleInput(stdinput, ir, 1, &n))
|
||||
SetError(-1, "Unable to filter console input events.");
|
||||
ThrowError(-1, "Unable to filter console input events.");
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
|
@ -142,10 +142,10 @@ bool SshShell::ConsoleInit()
|
|||
#ifdef PLATFORM_WIN32
|
||||
stdinput = GetStdHandle(STD_INPUT_HANDLE);
|
||||
if(!stdinput)
|
||||
SetError(-1, "Unable to obtain a handle for stdin.");
|
||||
ThrowError(-1, "Unable to obtain a handle for stdin.");
|
||||
stdoutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
if(!stdoutput)
|
||||
SetError(-1, "Unable to obtain a handle for stdout.");
|
||||
ThrowError(-1, "Unable to obtain a handle for stdout.");
|
||||
#endif
|
||||
ConsoleRawMode();
|
||||
return true;
|
||||
|
|
@ -163,7 +163,7 @@ void SshShell::ConsoleRead()
|
|||
Send(String(buffer, n));
|
||||
else
|
||||
if(n == -1 && errno != EAGAIN)
|
||||
SetError(-1, "Couldn't read input from console.");
|
||||
ThrowError(-1, "Couldn't read input from console.");
|
||||
}
|
||||
|
||||
void SshShell::ConsoleWrite(const void* buffer, int len)
|
||||
|
|
@ -172,7 +172,7 @@ void SshShell::ConsoleWrite(const void* buffer, int len)
|
|||
return;
|
||||
auto n = write(STDOUT_FILENO, buffer, size_t(len));
|
||||
if(n == -1 && errno != EAGAIN)
|
||||
SetError(-1, "Couldn't write output to console.");
|
||||
ThrowError(-1, "Couldn't write output to console.");
|
||||
}
|
||||
|
||||
void SshShell::ConsoleRawMode(bool b)
|
||||
|
|
@ -213,7 +213,7 @@ void SshShell::ConsoleRead()
|
|||
const int RBUFSIZE = 1024 * 16;
|
||||
Buffer<char> buffer(RBUFSIZE);
|
||||
if(!ReadConsole(stdinput, buffer, RBUFSIZE, &n, nullptr))
|
||||
SetError(-1, "Couldn't read input from console.");
|
||||
ThrowError(-1, "Couldn't read input from console.");
|
||||
if(n > 0)
|
||||
Send(String(buffer, n));
|
||||
}
|
||||
|
|
@ -222,7 +222,7 @@ void SshShell::ConsoleWrite(const void* buffer, int len)
|
|||
{
|
||||
DWORD n = 0;
|
||||
if(!WriteConsole(stdoutput, buffer, len, &n, nullptr))
|
||||
SetError(-1, "Couldn't Write output to console.");
|
||||
ThrowError(-1, "Couldn't Write output to console.");
|
||||
}
|
||||
|
||||
void SshShell::ConsoleRawMode(bool b)
|
||||
|
|
@ -265,12 +265,12 @@ bool SshShell::X11Init()
|
|||
#ifdef PLATFORM_POSIX
|
||||
int rc = libssh2_channel_x11_req(*channel, xscreen);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(rc);
|
||||
ThrowError(rc);
|
||||
if(!rc)
|
||||
LLOG("X11 tunnel succesfully initialized.");
|
||||
return !rc;
|
||||
#elif PLATFORM_WIN32
|
||||
SetError(-1, "X11 tunneling is not (yet) supported on Windows platform");
|
||||
ThrowError(-1, "X11 tunneling is not (yet) supported on Windows platform");
|
||||
return false;
|
||||
#endif
|
||||
});
|
||||
|
|
@ -291,7 +291,7 @@ void SshShell::X11Loop()
|
|||
libssh2_channel_read(xhandle, xbuffer, size_t(xbuflen))
|
||||
);
|
||||
if(!WouldBlock(rc) && rc < 0)
|
||||
SetError(-1, "[X11]: Read failed.");
|
||||
ThrowError(-1, "[X11]: Read failed.");
|
||||
if(rc > 0)
|
||||
write(sock, xbuffer, rc);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ bool SshTunnel::IsValid()
|
|||
default: NEVER();
|
||||
}
|
||||
if(b)
|
||||
ReportError(-1, "Invalid channel instance.");
|
||||
SetError(-1, "Invalid channel instance.");
|
||||
return !b;
|
||||
}
|
||||
|
||||
|
|
@ -27,7 +27,7 @@ void SshTunnel::Exit()
|
|||
|
||||
Run([=]() mutable{
|
||||
int rc = libssh2_channel_forward_cancel(*listener);
|
||||
if(!WouldBlock(rc) && rc < 0) SetError(rc);
|
||||
if(!WouldBlock(rc) && rc < 0) ThrowError(rc);
|
||||
if(rc == 0) listener.Clear();
|
||||
return !rc;
|
||||
});
|
||||
|
|
@ -42,7 +42,7 @@ bool SshTunnel::Connect(const String& host, int port)
|
|||
|
||||
return Run([=]() mutable{
|
||||
LIBSSH2_CHANNEL *ch = libssh2_channel_direct_tcpip(ssh->session, host , port);
|
||||
if(!ch && !WouldBlock()) SetError(-1);
|
||||
if(!ch && !WouldBlock()) ThrowError(-1);
|
||||
if(ch) {
|
||||
channel = MakeOne<LIBSSH2_CHANNEL*>(ch);
|
||||
LLOG("Direct tcp-ip connection to " << host << ":" << port << " is established.");
|
||||
|
|
@ -56,7 +56,7 @@ bool SshTunnel::Connect(const String& url)
|
|||
UrlInfo u(url);
|
||||
if(!u.host.IsEmpty() && u.port.IsEmpty())
|
||||
return Connect(u.host, StrInt(u.port));
|
||||
ReportError(-1, "Malformed proxy connection URL.");
|
||||
SetError(-1, "Malformed proxy connection URL.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -76,7 +76,7 @@ bool SshTunnel::Listen(const String& host, int port, int* bound_port, int listen
|
|||
listen_count
|
||||
);
|
||||
if(!lsn && !WouldBlock())
|
||||
SetError(-1);
|
||||
ThrowError(-1);
|
||||
if(lsn) {
|
||||
listener = MakeOne<LIBSSH2_LISTENER*>(lsn);
|
||||
LLOG("Started listening on port #" << port);
|
||||
|
|
@ -93,13 +93,13 @@ bool SshTunnel::Accept(SshTunnel& listener)
|
|||
return false;
|
||||
|
||||
if(!listener.listener) {
|
||||
ReportError(-1, "Invalid listener.");
|
||||
SetError(-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 && !WouldBlock()) ThrowError(-1);
|
||||
if(ch) {
|
||||
channel = MakeOne<LIBSSH2_CHANNEL*>(ch);
|
||||
LLOG("Connection accepted.");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue