TNT's Not Tunnel
Find a file
m1ngsama 90ddd7fade Add development and testing infrastructure
Added build targets:
- make asan        - AddressSanitizer for memory bugs
- make debug       - Debug symbols
- make valgrind    - Valgrind helper
- make check       - Static analysis (cppcheck, clang-tidy)

Added test scripts:
- test_basic.sh    - Basic functionality tests
  * Server startup
  * SSH connection
  * Message logging

- test_stress.sh   - Load testing
  * Configurable client count
  * Configurable duration
  * Automatic cleanup

Updated .gitignore:
- test.log
- *.dSYM/

Philosophy: Simple, minimal, Unix-style tools.
No dependencies on complex test frameworks.
2025-12-02 10:00:00 +08:00
include Replace telnet with SSH and fix full-screen display 2025-11-24 16:48:14 +08:00
src Fix passwordless login and display alignment issues 2025-11-24 17:01:08 +08:00
.gitignore Add development and testing infrastructure 2025-12-02 10:00:00 +08:00
CHANGELOG.md Minor fixes 2025-11-24 16:07:00 +08:00
LICENSE Initial commit 2025-07-01 09:00:00 +08:00
Makefile Add development and testing infrastructure 2025-12-02 10:00:00 +08:00
README.md Replace telnet with SSH and fix full-screen display 2025-11-24 16:48:14 +08:00
test_basic.sh Add development and testing infrastructure 2025-12-02 10:00:00 +08:00
test_stress.sh Add development and testing infrastructure 2025-12-02 10:00:00 +08:00

TNT

TNT's Not Tunnel - A lightweight terminal chat server written in C

License Language

Features

  • Vim-style operations - INSERT/NORMAL/COMMAND modes
  • 📜 Message history - Browse with j/k keys
  • 🕐 Full timestamps - Year-month-day hour:minute with timezone
  • 📖 Bilingual help - Press ? for Chinese/English help
  • 🌏 UTF-8 support - Full support for Chinese, Japanese, Korean
  • 📦 Single binary - Lightweight executable
  • 🔒 SSH access - Secure encrypted connections
  • 🖥️ Auto terminal detection - Adapts to your terminal size
  • 💾 Message persistence - All messages saved to log file
  • Low resource usage - Minimal memory and CPU

Building

Dependencies:

  • libssh (required for SSH support)

Install dependencies:

# On macOS
brew install libssh

# On Ubuntu/Debian
sudo apt-get install libssh-dev

# On Fedora/RHEL
sudo dnf install libssh-devel

Build:

make

For debug build:

make debug

Running

./tnt

Connect from another terminal:

ssh -p 2222 localhost

The server will prompt for a password (any password is accepted) and then ask for your username.

Usage

Operating Modes

  • INSERT - Type and send messages (default)
  • NORMAL - Browse message history
  • COMMAND - Execute commands

Keyboard Shortcuts

INSERT Mode

  • ESC - Enter NORMAL mode
  • Enter - Send message
  • Backspace - Delete character
  • Ctrl+C - Exit

NORMAL Mode

  • i - Return to INSERT mode
  • : - Enter COMMAND mode
  • j - Scroll down (older messages)
  • k - Scroll up (newer messages)
  • g - Jump to top
  • G - Jump to bottom
  • ? - Show help
  • Ctrl+C - Exit

COMMAND Mode

  • Enter - Execute command
  • ESC - Cancel, return to NORMAL
  • Backspace - Delete character

Available Commands

  • list, users, who - Show online users
  • help, commands - Show available commands
  • clear, cls - Clear command output

Architecture

  • Network: Multi-threaded SSH server using libssh
  • TUI: ANSI escape sequences with automatic terminal size detection
  • Storage: Append-only log file
  • Concurrency: pthread + rwlock
  • Security: Encrypted SSH connections with host key authentication

Configuration

Set port via environment variable:

PORT=3333 ./tnt

Technical Details

  • Written in C11
  • POSIX-compliant
  • Thread-safe operations
  • Proper UTF-8 handling for CJK characters
  • Box-drawing characters for UI
  • SSH protocol with PTY support for terminal size detection
  • Dynamic window resize handling

Security

  • Encrypted connections: All traffic is encrypted via SSH
  • Host key authentication: RSA host key generated on first run
  • Password authentication: Currently accepts any password (customize for production)
  • Host key persistence: Stored in host_key file
  • No plaintext: Unlike telnet, all data is encrypted in transit

License

MIT License - see LICENSE file