feat: initial x3-ssh client
- 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)
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
#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_;
|
||||
};
|
||||
Reference in New Issue
Block a user