Add threaded session backend architecture with real SSH backend
This commit is contained in:
52
src/ssh_session_backend.h
Normal file
52
src/ssh_session_backend.h
Normal file
@@ -0,0 +1,52 @@
|
||||
#ifndef ORBITHUB_SSH_SESSION_BACKEND_H
|
||||
#define ORBITHUB_SSH_SESSION_BACKEND_H
|
||||
|
||||
#include "session_backend.h"
|
||||
|
||||
#include <QProcess>
|
||||
#include <QString>
|
||||
#include <QTimer>
|
||||
|
||||
class QTemporaryFile;
|
||||
|
||||
class SshSessionBackend : public SessionBackend
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit SshSessionBackend(const Profile& profile, QObject* parent = nullptr);
|
||||
~SshSessionBackend() override;
|
||||
|
||||
public slots:
|
||||
void connectSession(const SessionConnectOptions& options) override;
|
||||
void disconnectSession() override;
|
||||
void reconnectSession(const SessionConnectOptions& options) override;
|
||||
|
||||
private slots:
|
||||
void onProcessStarted();
|
||||
void onProcessErrorOccurred(QProcess::ProcessError error);
|
||||
void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
|
||||
void onReadyReadStandardError();
|
||||
void onConnectedProbeTimeout();
|
||||
|
||||
private:
|
||||
QProcess* m_process;
|
||||
QTimer* m_connectedProbeTimer;
|
||||
SessionState m_state;
|
||||
bool m_userInitiatedDisconnect;
|
||||
bool m_reconnectPending;
|
||||
SessionConnectOptions m_reconnectOptions;
|
||||
QString m_lastRawError;
|
||||
QTemporaryFile* m_askPassScript;
|
||||
|
||||
void setState(SessionState state, const QString& message);
|
||||
bool startSshProcess(const SessionConnectOptions& options);
|
||||
bool configureAskPass(const SessionConnectOptions& options,
|
||||
QProcessEnvironment& environment,
|
||||
QString& error);
|
||||
void cleanupAskPassScript();
|
||||
QString mapSshError(const QString& rawError) const;
|
||||
QString knownHostsFileForNullDevice() const;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user