Skip to content
API Documentation
BastionGuard™
UIServer.hpp
Go to the documentation of this file.
1/*
2 * BastionGuard™ Secure Connection
3 * Copyright (C) 2025–2026 Calogero Scarnà
4 * GPL-3.0
5 */
6
7#pragma once
8
9#include <glibmm/dispatcher.h>
10#include <sigc++/sigc++.h>
11
12#include <atomic>
13#include <condition_variable>
14#include <cstdint>
15#include <deque>
16#include <memory>
17#include <mutex>
18#include <string>
19#include <thread>
20#include <unordered_map>
21#include <vector>
22
23// ---------------------------------------------------------------------------
24// ConnectionInfo — campi disponibili dal messaggio Connection JSON
25// ---------------------------------------------------------------------------
27 std::string app_path;
28 std::string app_comm; // /proc/<pid>/comm — nome reale del processo
29 std::string app_cwd;
30 std::vector<std::string> app_args;
31 uint32_t pid = 0;
32 uint32_t uid = 0;
33
34 std::string protocol;
35 std::string src_ip;
36 uint32_t src_port = 0;
37 std::string dest_host;
38 std::string dest_ip;
39 uint32_t dest_port = 0;
40};
41
48
50 uint64_t id = 0;
51 int type = 0;
52 std::string data;
53};
54
55// Tipi semplici per l'alert mostrato alla UI. I codici `what` e `type` sono
56// tenuti come int per compatibilita' con il vecchio enum protobuf: la UI ne
57// usa solo due valori, CONNECTION (3) e FIREWALL (2).
58struct AlertInfo {
59 uint64_t id = 0;
60 int type = 0; // 0 error, 1 warning, 2 info
61 int action = 0; // 0 none, 1 show_alert, 2 save_to_db
62 int priority = 0; // 0 low, 1 medium, 2 high
63 int what = 0; // 0 generic, 2 firewall, 3 connection
64 std::string text;
65 std::string rule_name;
66 std::string firewall_table;
67 std::string firewall_chain;
69 bool has_connection = false;
70};
71
72class UIServer {
73public:
74 UIServer();
75 ~UIServer();
76
77 // Apre il socket Unix in listen e avvia il thread di accept.
78 // `socketPath` accetta sia "/tmp/x.sock" sia "unix:///tmp/x.sock".
79 void start(const std::string& socketPath = "unix:///tmp/bsd-daemon.sock");
80 void stop();
81
82 // Invia il verdetto in risposta all'ultima richiesta ask_rule pending.
83 void sendReply(ReplyAction action);
84
85 // Accoda una notification da spedire al daemon alla prossima chance.
86 void queueNotification(int type, const std::string& data = {});
87
88 // ── Segnali emessi nel thread principale GTK via Glib::Dispatcher ──
89 sigc::signal<void()> signal_daemon_connected;
90 sigc::signal<void()> signal_daemon_disconnected;
91 sigc::signal<void(const ConnectionInfo&)> signal_new_connection;
92 sigc::signal<void(const AlertInfo&)> signal_alert;
93
94private:
95 class Impl;
96 std::unique_ptr<Impl> impl_;
97};
ReplyAction
Definition UIServer.hpp:42
sigc::signal< void(const ConnectionInfo &)> signal_new_connection
Definition UIServer.hpp:91
sigc::signal< void()> signal_daemon_disconnected
Definition UIServer.hpp:90
void sendReply(ReplyAction action)
Definition UIServer.cpp:422
void stop()
Definition UIServer.cpp:421
void queueNotification(int type, const std::string &data={})
Definition UIServer.cpp:423
sigc::signal< void(const AlertInfo &)> signal_alert
Definition UIServer.hpp:92
sigc::signal< void()> signal_daemon_connected
Definition UIServer.hpp:89
std::unique_ptr< Impl > impl_
Definition UIServer.hpp:96
void start(const std::string &socketPath="unix:///tmp/bsd-daemon.sock")
Definition UIServer.cpp:420
std::string firewall_table
Definition UIServer.hpp:66
ConnectionInfo connection
Definition UIServer.hpp:68
std::string firewall_chain
Definition UIServer.hpp:67
bool has_connection
Definition UIServer.hpp:69
int priority
Definition UIServer.hpp:62
std::string rule_name
Definition UIServer.hpp:65
std::string text
Definition UIServer.hpp:64
uint32_t src_port
Definition UIServer.hpp:36
uint32_t pid
Definition UIServer.hpp:31
std::string src_ip
Definition UIServer.hpp:35
std::string app_cwd
Definition UIServer.hpp:29
std::string protocol
Definition UIServer.hpp:34
std::string dest_host
Definition UIServer.hpp:37
uint32_t dest_port
Definition UIServer.hpp:39
std::string app_path
Definition UIServer.hpp:27
uint32_t uid
Definition UIServer.hpp:32
std::vector< std::string > app_args
Definition UIServer.hpp:30
std::string dest_ip
Definition UIServer.hpp:38
std::string app_comm
Definition UIServer.hpp:28
std::string data
Definition UIServer.hpp:52