mirror of
https://github.com/m1ngsama/TNT.git
synced 2025-12-24 10:51:41 +00:00
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.
This commit is contained in:
parent
6c9d243f9a
commit
5c11fb1b04
4 changed files with 164 additions and 0 deletions
24
CHANGELOG.md
24
CHANGELOG.md
|
|
@ -1,5 +1,29 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2025-12-02 - Stability & Testing Update
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Double colon bug in vim command mode (`:` key consumed properly)
|
||||||
|
- strtok data corruption in command output rendering
|
||||||
|
- Use-after-free race condition (added reference counting)
|
||||||
|
- SSH read blocking issues (added timeouts)
|
||||||
|
- PTY request infinite loop
|
||||||
|
- Message history memory waste (optimized loading)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Reference counting for thread-safe client cleanup
|
||||||
|
- SSH read timeout (30s) and error handling
|
||||||
|
- UTF-8 incomplete sequence detection
|
||||||
|
- AddressSanitizer build target (`make asan`)
|
||||||
|
- Basic functional tests (`test_basic.sh`)
|
||||||
|
- Stress testing script (`test_stress.sh`)
|
||||||
|
- Static analysis target (`make check`)
|
||||||
|
- Developer documentation (HACKING)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Improved error handling throughout
|
||||||
|
- Better memory management in message loading
|
||||||
|
|
||||||
## 2025
|
## 2025
|
||||||
- Ongoing development and improvements
|
- Ongoing development and improvements
|
||||||
- Bug fixes and optimizations
|
- Bug fixes and optimizations
|
||||||
|
|
|
||||||
91
HACKING
Normal file
91
HACKING
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
# HACKING
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make # normal build
|
||||||
|
make debug # with symbols
|
||||||
|
make asan # AddressSanitizer
|
||||||
|
make release # optimized
|
||||||
|
```
|
||||||
|
|
||||||
|
## Test
|
||||||
|
|
||||||
|
```sh
|
||||||
|
./test_basic.sh # functional tests
|
||||||
|
./test_stress.sh 20 60 # 20 clients, 60 seconds
|
||||||
|
```
|
||||||
|
|
||||||
|
## Debug
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Memory leaks
|
||||||
|
ASAN_OPTIONS=detect_leaks=1 ./tnt
|
||||||
|
|
||||||
|
# Or use valgrind
|
||||||
|
make valgrind
|
||||||
|
valgrind --leak-check=full ./tnt
|
||||||
|
|
||||||
|
# Static analysis
|
||||||
|
make check
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
main.c → entry point, signal handling
|
||||||
|
ssh_server.c → SSH protocol, client threads
|
||||||
|
chat_room.c → client list, message broadcast
|
||||||
|
message.c → persistent storage
|
||||||
|
tui.c → terminal rendering
|
||||||
|
utf8.c → UTF-8 string handling
|
||||||
|
```
|
||||||
|
|
||||||
|
## Thread Safety
|
||||||
|
|
||||||
|
- `g_room->lock`: RWlock for client list and messages
|
||||||
|
- `client->ref_lock`: Mutex for reference counting
|
||||||
|
- Each client runs in detached thread
|
||||||
|
- Reference counting prevents use-after-free
|
||||||
|
|
||||||
|
## Memory Management
|
||||||
|
|
||||||
|
- Clients: ref-counted, freed when ref==0
|
||||||
|
- Messages: fixed ring buffer (MAX_MESSAGES)
|
||||||
|
- No dynamic string allocation
|
||||||
|
|
||||||
|
## Known Limits
|
||||||
|
|
||||||
|
- Max 64 clients (MAX_CLIENTS)
|
||||||
|
- Max 100 messages in memory (MAX_MESSAGES)
|
||||||
|
- Max 1024 bytes per message (MAX_MESSAGE_LEN)
|
||||||
|
- Max 64 bytes username (MAX_USERNAME_LEN)
|
||||||
|
|
||||||
|
## Common Bugs to Avoid
|
||||||
|
|
||||||
|
1. Don't use `strtok()` on client data - use `strtok_r()` or copy first
|
||||||
|
2. Always increment ref_count before using client outside lock
|
||||||
|
3. Check SSH API return values (can be SSH_ERROR, SSH_AGAIN, or negative)
|
||||||
|
4. UTF-8 chars are multi-byte - use utf8_* functions
|
||||||
|
|
||||||
|
## Adding Features
|
||||||
|
|
||||||
|
1. Add new command in `execute_command()` (ssh_server.c:190)
|
||||||
|
2. Add new mode in `client_mode_t` enum (common.h:30)
|
||||||
|
3. Add new vim key in `handle_key()` (ssh_server.c:220)
|
||||||
|
|
||||||
|
## Debugging Tips
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Find memory issues
|
||||||
|
make asan
|
||||||
|
ASAN_OPTIONS=detect_leaks=1:abort_on_error=1 ./tnt
|
||||||
|
|
||||||
|
# Check thread issues
|
||||||
|
gcc -fsanitize=thread ...
|
||||||
|
|
||||||
|
# Profile
|
||||||
|
gcc -pg ...
|
||||||
|
./tnt
|
||||||
|
gprof tnt
|
||||||
|
```
|
||||||
37
QUICKREF
Normal file
37
QUICKREF
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
TNT Quick Reference
|
||||||
|
===================
|
||||||
|
|
||||||
|
BUILD
|
||||||
|
make production build
|
||||||
|
make debug debug symbols
|
||||||
|
make asan memory sanitizer
|
||||||
|
make release optimized + stripped
|
||||||
|
make clean remove artifacts
|
||||||
|
|
||||||
|
TEST
|
||||||
|
./test_basic.sh basic functionality
|
||||||
|
./test_stress.sh 20 60 stress test (20 clients, 60s)
|
||||||
|
|
||||||
|
DEBUG
|
||||||
|
ASAN_OPTIONS=detect_leaks=1 ./tnt
|
||||||
|
valgrind --leak-check=full ./tnt
|
||||||
|
make check
|
||||||
|
|
||||||
|
STRUCTURE
|
||||||
|
src/main.c entry, signals
|
||||||
|
src/ssh_server.c SSH, threads
|
||||||
|
src/chat_room.c broadcast
|
||||||
|
src/message.c persistence
|
||||||
|
src/tui.c rendering
|
||||||
|
src/utf8.c unicode
|
||||||
|
|
||||||
|
LIMITS
|
||||||
|
64 clients max
|
||||||
|
100 messages in RAM
|
||||||
|
1024 bytes/message
|
||||||
|
|
||||||
|
FILES
|
||||||
|
HACKING dev guide
|
||||||
|
CHANGELOG.md changes
|
||||||
|
messages.log chat log
|
||||||
|
host_key SSH key
|
||||||
12
README.md
12
README.md
|
|
@ -121,6 +121,18 @@ PORT=3333 ./tnt
|
||||||
- SSH protocol with PTY support for terminal size detection
|
- SSH protocol with PTY support for terminal size detection
|
||||||
- Dynamic window resize handling
|
- Dynamic window resize handling
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make debug # Build with debug symbols
|
||||||
|
make asan # Build with AddressSanitizer
|
||||||
|
make check # Run static analysis
|
||||||
|
./test_basic.sh # Run basic tests
|
||||||
|
./test_stress.sh # Run stress test
|
||||||
|
```
|
||||||
|
|
||||||
|
See [HACKING](HACKING) for development details.
|
||||||
|
|
||||||
## Security
|
## Security
|
||||||
|
|
||||||
- **Encrypted connections**: All traffic is encrypted via SSH
|
- **Encrypted connections**: All traffic is encrypted via SSH
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue