mirror of
https://github.com/coturn/coturn.git
synced 2026-05-05 10:46:10 +02:00
Create CLAUDE.md file (#1835)
Create a file that can be used with Claude and add some high level definitions
This commit is contained in:
parent
75f8133c40
commit
85ff6cd2fb
84
CLAUDE.md
Normal file
84
CLAUDE.md
Normal file
@ -0,0 +1,84 @@
|
||||
# AGENT.md — Coturn
|
||||
|
||||
Coturn is a TURN/STUN server written in C11, implementing RFC 5766, RFC 5389, and related NAT traversal protocols. It supports multiple database backends (SQLite, PostgreSQL, MySQL, Redis, MongoDB), multiple auth mechanisms, and a fuzzing harness for OSS-Fuzz.
|
||||
|
||||
## Build
|
||||
|
||||
```bash
|
||||
# Standard build
|
||||
mkdir build && cd build
|
||||
cmake ..
|
||||
make -j$(nproc)
|
||||
|
||||
# Debug build
|
||||
cmake -DCMAKE_BUILD_TYPE=Debug ..
|
||||
make -j$(nproc)
|
||||
|
||||
# Fuzzer build (requires clang or AppleClang)
|
||||
CC=clang CXX=clang++ cmake -S . -B build -DFUZZER=ON
|
||||
cmake --build build -j$(nproc)
|
||||
```
|
||||
|
||||
Key CMake options:
|
||||
- `-DFUZZER=ON` — build OSS-Fuzz targets (requires Clang or AppleClang)
|
||||
- `-DCMAKE_BUILD_TYPE=Debug|Release`
|
||||
- `-DWITH_MYSQL=ON/OFF`, `-DWITH_PGSQL=ON/OFF`, `-DWITH_MONGO=ON/OFF`, `-DWITH_REDIS=ON/OFF`
|
||||
|
||||
## Code style
|
||||
|
||||
All C source must be formatted with `clang-format` using the project's [.clang-format](.clang-format):
|
||||
|
||||
```bash
|
||||
find src -name '*.c' -o -name '*.h' | xargs clang-format -i
|
||||
```
|
||||
|
||||
Key style rules (LLVM-based):
|
||||
- Indent: 2 spaces, no tabs
|
||||
- Column limit: 120
|
||||
- Pointer alignment: right (`int *p`)
|
||||
- Brace style: attach (K&R)
|
||||
- Zero-initialize stack buffers at declaration: `uint8_t buf[N] = {0}` or `SomeStruct s = {0}`
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
# Protocol conformance (RFC 5769 test vectors)
|
||||
cd examples && ./scripts/rfc5769.sh
|
||||
|
||||
# Basic TURN relay test (run server first, then client)
|
||||
cd examples && ./scripts/basic/relay.sh
|
||||
cd examples && ./scripts/basic/udp_c2c_client.sh
|
||||
|
||||
# Full test suite
|
||||
cd examples && ./run_tests.sh
|
||||
```
|
||||
|
||||
See [docs/Testing.md](docs/Testing.md) for database setup and extended test scenarios.
|
||||
|
||||
## Source layout
|
||||
|
||||
```
|
||||
src/
|
||||
client/ # TURN client library (C)
|
||||
client++/ # TURN client library (C++)
|
||||
server/ # Core TURN/STUN server logic
|
||||
apps/
|
||||
relay/ # turnserver main process, listeners, netengine
|
||||
uclient/ # CLI test client
|
||||
include/turn/ # Public headers
|
||||
fuzzing/ # OSS-Fuzz targets and seed corpora
|
||||
examples/ # Test scripts and sample configs
|
||||
turndb/ # Database schema and setup scripts
|
||||
docs/ # Protocol notes and configuration docs
|
||||
```
|
||||
|
||||
## Common patterns
|
||||
|
||||
- **Port types**: use `uint16_t` for port fields and parameters (not `int`); port 0 means OS-assigned ephemeral
|
||||
- **Buffer initialization**: zero-initialize stack buffers at declaration (`= {0}`), not just before first use
|
||||
- **HMAC output buffers**: declare as `uint8_t buf[MAXSHASIZE] = {0}` — the buffer is written into the message before HMAC runs, so uninitialized bytes would be briefly present in the packet
|
||||
- **Uninitialized structs**: use `= {0}` for stack-allocated address structs (e.g., `ioa_addr`)
|
||||
- **Counter overflow in `turn_ports.c`**: `_turnports` uses `uint32_t low/high` counters; comparisons must be overflow-safe (use subtraction, not `>=`)
|
||||
- **Port bounds checks**: use `<= USHRT_MAX` (not `< USHRT_MAX`) when validating that an `int` holds a valid port — port 65535 is valid
|
||||
- **Error handling**: check return values of all OpenSSL/libevent calls; use `ERR_clear_error()` before HMAC operations
|
||||
- **Logging**: use `TURN_LOG_FUNC` macros, not `fprintf`/`perror`
|
||||
Loading…
x
Reference in New Issue
Block a user