Architecture
┌───────────────────┐
│ LaunchWindow │
│ (choose a role) │
└─────────┬─────────┘
Server role │ Client role
┌─────────────────────┴─────────────────────┐
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ ServerWindow │ │ ClientWindow │
│ status + activity │ │ remote file browser │
│ log │ │ + transfer dock │
└──────────┬───────────┘ └──────────┬───────────┘
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ Server (QSslServer) │ │ Client (state machine)│
│ accepts TLS conns │ │ upload/download queues│
└──────────┬───────────┘ └──────────┬───────────┘
│ │
│ creates one Session per client │
▼ │
┌──────────────────────┐ │
│ Session │ │
│ owns both sockets, │ │
│ parses commands, │ │
│ drives FileTransfer │ │
└──────────┬───────────┘ │
│ │
│ TLS (OpenSSL-backed) │
│ ┌─────────────────────────────────────┐ │
├──▶│ Control channel (commands/replies) │◀─┤
│ │ list dir · request · status · error │ │
│ └─────────────────────────────────────┘ │
│ ┌─────────────────────────────────────┐ │
└──▶│ Data channel (raw file byte stream)│◀─┘
│ chunked + SHA-256 verified │
└─────────────────────────────────────┘
Tech Stack
| Layer | Technology |
|---|---|
| Language | C++17 |
| GUI / App framework | Qt 6 (6.10.3) — modules: Widgets, Network, Concurrent, CorePrivate |
| Networking & security | Qt Network (QSslServer / QSslSocket) over TLS, OpenSSL (libssl / libcrypto) backend |
| Integrity | SHA-256 via QCryptographicHash |
| Build system | CMake 3.10+ (Qt AUTOMOC / AUTOUIC / AUTORCC) |
| Compiler / toolchain | MinGW (x86_64) |
| Packaging | Inno Setup (installer.iss) for Windows distribution |