diff options
| author | Your Name <you@example.com> | 2026-05-18 18:50:20 +0530 |
|---|---|---|
| committer | Your Name <you@example.com> | 2026-05-18 18:50:20 +0530 |
| commit | f6369f5b87f5dab17a03315d82454fdcdd668ec9 (patch) | |
| tree | bc16c22f87253eafa680a30da370b1822d855ca4 /main/tollgate_platform.c | |
| parent | d8c55d2a072433e16ae5c84b7b7c676587f6f2d9 (diff) | |
feat: extract tollgate_core ESP-IDF component
Extract shared TollGate business logic into a reusable ESP-IDF component
that can be consumed by esp-miner via the IDF Component Manager.
Component structure:
components/tollgate_core/
include/tollgate_core.h — public API
include/tollgate_platform.h — platform interface (config callbacks)
src/tollgate_core.c — orchestrator (init, payment, tick, owner)
src/tollgate_core_cashu.c/h — Cashu V3 token decode/verify
src/tollgate_core_dns.c/h — per-client DNS hijack/forward
src/tollgate_core_firewall.c/h — per-client NAT filter
src/tollgate_core_session.c/h — session lifecycle
Key design decisions:
- Platform interface pattern: consumers implement tollgate_platform_t
(config getters + optional spend_proofs wallet hook)
- Cross-module wiring (session→firewall→dns) stays internal
- No direct config.h dependency — all config via platform callbacks
- spend_proofs can be NULL (accepts payment without local wallet)
Standalone app updated:
- main/tollgate_platform.c implements platform via config singleton
- main/tollgate_main.c calls tollgate_core_init/tick/dns_start
- main/tollgate_api.c routes payment through tollgate_core_process_payment
- Removed cashu.c, dns_server.c, firewall.c, session.c from CMakeLists
Not yet build-verified — blocked on multi-mint, price-discovery,
cvm-integration, and display-fix branches merging to master.
Diffstat (limited to 'main/tollgate_platform.c')
| -rw-r--r-- | main/tollgate_platform.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/main/tollgate_platform.c b/main/tollgate_platform.c new file mode 100644 index 0000000..c992ea1 --- /dev/null +++ b/main/tollgate_platform.c | |||
| @@ -0,0 +1,64 @@ | |||
| 1 | #include "tollgate_platform.h" | ||
| 2 | #include "tollgate_core.h" | ||
| 3 | #include "config.h" | ||
| 4 | #include "esp_log.h" | ||
| 5 | #include "esp_timer.h" | ||
| 6 | #include "freertos/FreeRTOS.h" | ||
| 7 | #include "freertos/task.h" | ||
| 8 | |||
| 9 | static const char *TAG = "tollgate_platform"; | ||
| 10 | |||
| 11 | static uint16_t platform_get_price_sats(void) | ||
| 12 | { | ||
| 13 | const tollgate_config_t *cfg = tollgate_config_get(); | ||
| 14 | return cfg ? (uint16_t)cfg->price_per_step : 21; | ||
| 15 | } | ||
| 16 | |||
| 17 | static int32_t platform_get_step_ms(void) | ||
| 18 | { | ||
| 19 | const tollgate_config_t *cfg = tollgate_config_get(); | ||
| 20 | return cfg ? (int32_t)cfg->step_size_ms : 60000; | ||
| 21 | } | ||
| 22 | |||
| 23 | static const char *platform_get_mint_url(void) | ||
| 24 | { | ||
| 25 | const tollgate_config_t *cfg = tollgate_config_get(); | ||
| 26 | return cfg ? cfg->mint_url : "https://testnut.cashu.space"; | ||
| 27 | } | ||
| 28 | |||
| 29 | static const char *platform_get_metric(void) | ||
| 30 | { | ||
| 31 | const tollgate_config_t *cfg = tollgate_config_get(); | ||
| 32 | return cfg ? cfg->metric : "milliseconds"; | ||
| 33 | } | ||
| 34 | |||
| 35 | static int32_t platform_get_step_bytes(void) | ||
| 36 | { | ||
| 37 | const tollgate_config_t *cfg = tollgate_config_get(); | ||
| 38 | return cfg ? (int32_t)cfg->step_size_bytes : 22020096; | ||
| 39 | } | ||
| 40 | |||
| 41 | static int64_t platform_get_time_ms(void) | ||
| 42 | { | ||
| 43 | return (int64_t)xTaskGetTickCount() * portTICK_PERIOD_MS; | ||
| 44 | } | ||
| 45 | |||
| 46 | static bool platform_spend_proofs(const char *raw_token_json) | ||
| 47 | { | ||
| 48 | (void)raw_token_json; | ||
| 49 | return true; | ||
| 50 | } | ||
| 51 | |||
| 52 | const tollgate_platform_t *tollgate_get_platform(void) | ||
| 53 | { | ||
| 54 | static const tollgate_platform_t platform = { | ||
| 55 | .get_price_sats = platform_get_price_sats, | ||
| 56 | .get_step_ms = platform_get_step_ms, | ||
| 57 | .get_mint_url = platform_get_mint_url, | ||
| 58 | .get_metric = platform_get_metric, | ||
| 59 | .get_step_bytes = platform_get_step_bytes, | ||
| 60 | .get_time_ms = platform_get_time_ms, | ||
| 61 | .spend_proofs = platform_spend_proofs, | ||
| 62 | }; | ||
| 63 | return &platform; | ||
| 64 | } | ||