- GTK3 GUI with VTE terminal emulation - Tabbed SSH sessions - Server management (add/edit/remove) - SSH key management (generate/import/delete) - Quick connect bar - libssh for SSH connections - autotools build system (configure && make)
40 lines
1.1 KiB
C++
40 lines
1.1 KiB
C++
#pragma once
|
|
#include <gtk/gtk.h>
|
|
#include <vte/vte.h>
|
|
#include <libssh/libssh.h>
|
|
#include <atomic>
|
|
#include <string>
|
|
#include <functional>
|
|
|
|
class SshTerminal {
|
|
public:
|
|
SshTerminal();
|
|
~SshTerminal();
|
|
|
|
bool connect(const std::string& host, int port, const std::string& user,
|
|
const std::string& keyfile, const std::string& password);
|
|
void disconnect();
|
|
bool is_connected() const { return connected_; }
|
|
GtkWidget* widget() const { return GTK_WIDGET(vte_box_); }
|
|
const std::string& server_name() const { return server_name_; }
|
|
void set_server_name(const std::string& name) { server_name_ = name; }
|
|
|
|
std::function<void(bool, const std::string&)> on_status_change;
|
|
|
|
private:
|
|
void cleanup();
|
|
static gpointer io_thread_func(gpointer data);
|
|
static void on_size_changed(VteTerminal* term, guint cols, guint rows, gpointer data);
|
|
|
|
GtkWidget* vte_box_;
|
|
VteTerminal* terminal_;
|
|
ssh_session session_;
|
|
ssh_channel channel_;
|
|
int pty_master_;
|
|
int pty_slave_;
|
|
std::atomic<bool> running_;
|
|
std::atomic<bool> connected_;
|
|
GThread* thread_;
|
|
std::string server_name_;
|
|
};
|