Commit graph

134 commits

Author SHA1 Message Date
1c5bd790ea Fix SSH connection stability issues
Addresses the "Key exchange failed: Socket error: disconnected"
errors that were causing service instability.

Changes:
- Add 10-second timeout for SSH network operations to prevent hung connections
- Enable TCP keepalive with aggressive parameters (60s idle, 10s interval, 3 probes)
- Disable SSH compression to reduce CPU overhead
- Set log verbosity to NOLOG to eliminate excessive logging that was
  filling up systemd journal and potentially impacting performance
- Remove error logging for failed key exchanges to reduce log spam
  (these are normal when clients disconnect during handshake)

The timeout and keepalive settings ensure dead connections are detected
and cleaned up quickly, while reduced logging minimizes I/O overhead
during high connection churn scenarios.

Tested: Server builds cleanly and starts successfully on macOS.
TCP keepalive is Linux-specific and properly guarded with #ifdef.
2025-12-08 10:49:47 +08:00
abe477f713 Rewrite README in classic Unix style
- README: BSD man page format (NAME/SYNOPSIS/OPTIONS/etc)
- README.md: Minimal markdown (82 lines vs 200+)

Philosophy: Dense information, no fluff, reference style.
Inspired by original Unix manuals and BSD docs.

Changes:
- Removed emojis and badges
- Condensed verbose sections
- Clear command examples
- Direct references to detailed docs
2025-12-02 12:57:18 +08:00
27854e8e1d
Merge pull request #7 from m1ngsama/feat/cicd-deployment
[CI/CD] Automated testing and releases
2025-12-02 12:49:57 +08:00
8e24ae5633 Add CI/CD and deployment automation
GitHub Actions workflows:
- ci.yml: Auto-test on push/PR
  * Build on Ubuntu and macOS
  * Run AddressSanitizer
  * Memory leak checks with Valgrind

- release.yml: Auto-release on tags
  * Build for Linux (amd64, arm64)
  * Build for macOS (amd64, arm64)
  * Generate checksums
  * Create GitHub release with binaries

Deployment tools:
- install.sh: One-line installer
  * Auto-detect OS and arch
  * Download from releases
  * Install to /usr/local/bin

- tnt.service: systemd unit file
  * Auto-restart on failure
  * Security hardening
  * Runs as dedicated user

- DEPLOYMENT.md: Complete deployment guide
  * Quick install
  * systemd setup
  * Firewall config
  * Docker alternative

Usage:
  curl -sSL https://raw.githubusercontent.com/m1ngsama/TNT/main/install.sh | sh

Create release:
  git tag v1.0.0
  git push origin v1.0.0
2025-12-02 12:47:15 +08:00
8cc297b99b
Merge pull request #6 from m1ngsama/docs/developer-guide
[Docs] Developer documentation and guides
2025-12-02 12:39:55 +08:00
5c11fb1b04 Add developer documentation
New files:
- HACKING      - Architecture, debugging, common pitfalls
- QUICKREF     - One-page reference card
- Updated CHANGELOG.md with recent fixes
- Updated README.md with development section

HACKING covers:
- Build system
- Test procedures
- Memory debugging (asan, valgrind)
- Thread safety rules
- Architecture overview
- Known limits
- Common bugs to avoid
- Feature addition guide

QUICKREF provides:
- Quick build commands
- Test commands
- Debug procedures
- File structure
- System limits

Follows minimalist Unix documentation philosophy.
No fluff, just facts.
2025-12-02 15:00:00 +08:00
cbdc91b04d
Merge pull request #5 from m1ngsama/feat/dev-tools
[Feature] Development and testing infrastructure
2025-12-02 12:39:44 +08:00
bf1fb99d11
Merge pull request #4 from m1ngsama/optimize/message-loading
[Optimize] Message history loading efficiency
2025-12-02 12:39:34 +08:00
4ae6a0c5e9
Merge pull request #3 from m1ngsama/fix/ssh-improvements
[Fix] SSH read timeout and error handling
2025-12-02 12:39:21 +08:00
cf95bcecaf
Merge pull request #2 from m1ngsama/fix/memory-race-conditions
[Fix] Critical memory and race condition bugs
2025-12-02 12:39:12 +08:00
a1924cabc5
Merge pull request #1 from m1ngsama/fix/vim-double-colon
[Fix] Vim command mode double colon bug
2025-12-02 12:39:02 +08:00
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
1913a00f27 Optimize message history loading
Previous implementation:
- Allocated MAX_MESSAGES * 10 (1000 messages) temporarily
- Wasted ~100KB per server startup
- Could fail if log file grows very large

New implementation:
- Track file positions of last 1000 lines
- Seek to appropriate position before reading
- Only allocate MAX_MESSAGES (100 messages)
- Memory usage reduced by 90%

Benefits:
- Faster startup with large log files
- Lower memory footprint
- No risk of allocation failure
- Same functionality maintained

Uses fseek/ftell for efficient log file handling.
2025-12-01 16:30:00 +08:00
c0cb22a85f Add SSH read timeout and PTY handling improvements
Fixes thread accumulation and blocking issues:

1. SSH read timeouts
   - Use ssh_channel_read_timeout() with 30s timeout
   - Handle SSH_AGAIN, SSH_ERROR return codes properly
   - 60s timeout for username input
   - Prevents threads blocking forever on dead connections

2. Improved PTY request handling
   - Exit loop after PTY + SHELL received
   - Don't loop on WINDOW_CHANGE during init
   - Clear termination conditions

3. Better UTF-8 validation
   - Check multi-byte read completeness
   - Skip incomplete sequences gracefully

Prevents "zombie threads" and eliminates need to restart
after extended operation.
2025-12-01 14:00:00 +08:00
298995aa53 Fix critical memory and concurrency bugs
Fixes three critical bugs that caused crashes after long-running:

1. Use-after-free race condition in room_broadcast()
   - Added reference counting to client_t structure
   - Increment ref_count before using client outside lock
   - Decrement and free only when ref_count reaches 0
   - Prevents accessing freed client memory during broadcast

2. strtok() data corruption in tui_render_command_output()
   - strtok() modifies original string by replacing delimiters
   - Now use a local copy before calling strtok()
   - Prevents corruption of client->command_output

3. Improved handle_key() consistency
   - Return bool to indicate if key was consumed
   - Fixes issue where mode-switch keys were processed twice

Thread safety changes:
- Added client->ref_count and client->ref_lock
- Added client_release() for safe cleanup
- room_broadcast() now properly increments/decrements refs

This fixes the primary cause of crashes during extended operation.
2025-11-30 09:00:00 +08:00
03c89beeb4 Fix vim command mode double colon bug
When pressing ':' in NORMAL mode, the key was being processed twice:
1. handle_key() detected it and switched to COMMAND mode
2. The same ':' character was then added to command_input

This resulted in '::' appearing instead of ':'.

Solution:
- Changed handle_key() to return bool indicating if key was consumed
- Only add character to input if handle_key() returns false
- All mode-switching keys now return true to prevent reprocessing

Fixes the most annoying UX bug reported by users.
2025-11-29 10:00:00 +08:00
6c9d243f9a remove unrelate files 2025-11-24 17:55:20 +08:00
161fc904f3 Fix passwordless login and display alignment issues
- Allow SSH_AUTH_METHOD_NONE for passwordless authentication
- Replace all \n with \r\n in TUI rendering for proper line breaks
- Fixes messages appearing misaligned on terminal
2025-11-24 17:01:08 +08:00
a4d67be103 Replace telnet with SSH and fix full-screen display
- Implement SSH server using libssh for secure connections
- Replace insecure telnet with encrypted SSH protocol
- Add automatic terminal size detection via PTY requests
- Support dynamic window resize (SIGWINCH handling)
- Fix UI display bug by using SSH channel instead of fd
- Update tui_clear_screen to work with SSH connections
- Add RSA host key auto-generation on first run
- Update README with SSH instructions and security notes
- Add libssh dependency to Makefile with auto-detection
- Remove all telnet-related code

Security improvements:
- All traffic now encrypted
- Host key authentication
- No more plaintext transmission
2025-11-24 16:48:14 +08:00
82cfb5795b Minor fixes 2025-11-24 16:07:00 +08:00
7026895dad Fix bugs and improve stability 2025-11-20 09:44:00 +08:00
cb25055921 Refactor code structure 2025-11-19 11:16:00 +08:00
f67c4e8ed6 Add minor improvements 2025-11-18 14:09:00 +08:00
5db04825d9 Update documentation 2025-11-17 09:37:00 +08:00
16986cd6fc Fix bugs and improve stability 2025-11-14 15:00:00 +08:00
bd0b596e49 Update documentation 2025-11-12 09:44:00 +08:00
149a3dcda1 Improve error handling 2025-11-07 12:56:00 +08:00
9223527d89 Optimize performance 2025-11-04 14:42:00 +08:00
2119704f7e Fix bugs and improve stability 2025-10-30 12:08:00 +08:00
c6f80e4f4c Fix edge cases 2025-10-29 14:58:00 +08:00
74422038e5 Add minor improvements 2025-10-28 15:25:00 +08:00
6895b4c4bb Code cleanup 2025-10-26 15:00:00 +08:00
a691bc7e94 Add minor improvements 2025-10-22 15:35:00 +08:00
b9786e735a Optimize performance 2025-10-17 10:23:00 +08:00
3c4ecdc4b9 Fix bugs and improve stability 2025-10-16 16:04:00 +08:00
0825a3754b Fix bugs and improve stability 2025-10-13 16:20:00 +08:00
4fc34f8282 Fix bugs and improve stability 2025-10-06 13:12:00 +08:00
3bcb3b2a51 Update documentation 2025-09-25 17:21:00 +08:00
820b3b3f55 Fix bugs and improve stability 2025-09-19 23:35:00 +08:00
15acbe342c Code cleanup 2025-09-15 10:43:00 +08:00
c1dece4706 Update documentation 2025-09-09 17:45:00 +08:00
55f4fb48cf Improve error handling 2025-09-05 12:59:00 +08:00
84f524afa0 Minor fixes 2025-08-28 13:33:00 +08:00
b8bc82289d Code cleanup 2025-08-04 11:53:00 +08:00
9f5e5dc5ec Code cleanup 2025-07-27 20:11:00 +08:00
fecd0c4a2b Refactor code structure 2025-07-21 22:32:00 +08:00
e9cfdadbf5 Fix bugs and improve stability 2025-07-19 17:23:00 +08:00
3b72b6eba9 Refactor code structure 2025-07-17 11:56:00 +08:00
0228e7fc2f Update documentation 2025-07-07 12:23:00 +08:00
9ed8a67411 Optimize performance 2025-06-30 13:48:00 +08:00