58 lines
1.8 KiB
C++
58 lines
1.8 KiB
C++
#ifndef ORBITHUB_SSH_SESSION_BACKEND_H
|
|
#define ORBITHUB_SSH_SESSION_BACKEND_H
|
|
|
|
#include "session_backend.h"
|
|
|
|
#include <QProcess>
|
|
#include <QString>
|
|
#include <QTimer>
|
|
|
|
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;
|
|
void sendInput(const QString& input) override;
|
|
void confirmHostKey(bool trustHost) override;
|
|
|
|
private slots:
|
|
void onProcessStarted();
|
|
void onProcessErrorOccurred(QProcess::ProcessError error);
|
|
void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
|
|
void onReadyReadStandardOutput();
|
|
void onReadyReadStandardError();
|
|
void onConnectedProbeTimeout();
|
|
|
|
private:
|
|
QProcess* m_process;
|
|
QTimer* m_connectedProbeTimer;
|
|
SessionState m_state;
|
|
bool m_userInitiatedDisconnect;
|
|
bool m_reconnectPending;
|
|
SessionConnectOptions m_reconnectOptions;
|
|
SessionConnectOptions m_activeOptions;
|
|
QString m_lastRawError;
|
|
QString m_askPassScriptPath;
|
|
bool m_waitingForPasswordPrompt;
|
|
bool m_waitingForHostKeyConfirmation;
|
|
bool m_passwordSubmitted;
|
|
|
|
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
|