coturn already targets OpenSSL 3.x (the DH-param migration in #1809
dropped 1.1.1 build support, and RFC 7250 raw public keys need 3.2.1),
but several docs still referenced OpenSSL 1.0.0a/1.0.1/1.0.2 and 0.9.8
as if they were supported or recommended baselines.
Make the requirement explicit and consistent: OpenSSL 3.0 or newer is
the supported target; older releases (1.x, 1.1.x, 0.9.x) and other
libraries are not supported and are not tested or validated against.
- docs/OpenSSL.md: lead with the 3.0+ requirement and the
unsupported/not- validated statement; note the RFC 7250 raw-public-keys
3.2.1 sub-requirement and the deprecated patches/openssl-1.1.1 bridge;
reframe the custom-prefix build guidance for "system ships < 3.0"
instead of the old 1.0.1 example.
- docs/Build.md: replace the "1.0.0a or better recommended" /
0.9.8-DTLS-over- IPv6 paragraph with the 3.0+ requirement.
- README.md: mark the openssl dependency as 3.0 or newer.
- README.turnserver: drop the pre-1.0.2 EC-curve and 1.0.2-ALPN version
caveats (both moot at 3.0+).
## Summary
The Prometheus exporter previously linked the
[digitalocean/prometheus-client-c](https://github.com/digitalocean/prometheus-client-c)
(`prom`) library, which is **no longer maintained**. This replaces it
with a minimal, self-contained Prometheus client under `src/prometheus/`
that is built straight from coturn's own sources and implements exactly
the slice of the API coturn uses: counters, gauges, a single default
registry, and the text-exposition serializer.
The vendored client is **drop-in API-compatible**, so `prom_server.c` is
unchanged. Histograms, summaries, custom registries and the upstream
`promhttp` handler are intentionally omitted (coturn serves `/metrics`
with its own libmicrohttpd handler).
The exporter is now **always compiled in**; the runtime `--prometheus`
flag still controls whether it starts. **libmicrohttpd** — actively
maintained — is the only remaining external dependency and is now
required by the build.
## Changes
- **`src/prometheus/{prom.h,prom.c}`** — vendored client. Thread-safe
(per-metric mutex on the increment path, read under lock in the bridge),
label-aware, with proper Prometheus value/label escaping and clean
integer formatting for counters. No deps beyond pthread/libc.
- **CMake** — replace `find_package(Prometheus)` with required
`find_package(MicroHTTPD)`; add `cmake/FindMicroHTTPD.cmake`; remove
dead `cmake/FindPrometheus.cmake` and the `WITH_PROMETHEUS` option.
- **`configure` / `Makefile.in`** — drop `-lprom`, compile the vendored
source.
- **Docker** (`debian`, `alpine`) and **CI** (`ubuntu-build-deps`,
`mingw`) — remove the `prometheus-client-c` build/install steps; keep
libmicrohttpd.
- **`docs/Prometheus.md`** rewritten.
- **`tests/test_prometheus.c`** — Unity tests for counter
accumulation/monotonicity, gauge inc/dec, and label-value escaping.
## Validation
- Full build green; all unit tests pass (incl. new `test_prometheus`);
`clang-format-15` clean.
- Live exporter scraped over HTTP — all `run_tests_prom.sh` scenarios
(default / custom address / port / path, plus the negative case) pass.
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This is not a long term documentation works - this is a temp proposal to
modernize existing documentation
- Create docs folder
- Move existing documentation files into docs
- Split one massive INSTALL files into smaller files (no text editing
was done except small markdown header formatting)
- Rename files to be markdowns for nicer rendering
- Bad md rendering is expected in many places