upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/main/session.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/session.c')
-rw-r--r--main/session.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/main/session.c b/main/session.c
index 521b74a..4854163 100644
--- a/main/session.c
+++ b/main/session.c
@@ -1,6 +1,7 @@
1#include "session.h" 1#include "session.h"
2#include "firewall.h" 2#include "firewall.h"
3#include "dns_server.h" 3#include "dns_server.h"
4#include "config.h"
4#include "esp_log.h" 5#include "esp_log.h"
5#include "freertos/FreeRTOS.h" 6#include "freertos/FreeRTOS.h"
6#include "freertos/task.h" 7#include "freertos/task.h"
@@ -103,6 +104,29 @@ session_t *session_create(uint32_t client_ip, uint64_t allotment_ms,
103 return NULL; 104 return NULL;
104} 105}
105 106
107session_t *session_create_bytes(uint32_t client_ip, uint64_t allotment_bytes,
108 const char *spent_secrets[], int secret_count)
109{
110 session_t *s = session_create(client_ip, 0, spent_secrets, secret_count);
111 if (s) {
112 s->allotment_bytes = allotment_bytes;
113 s->bytes_consumed = 0;
114 s->allotment_ms = INT64_MAX;
115 esp_ip4_addr_t ip = { .addr = client_ip };
116 ESP_LOGI(TAG, "Bytes session created: " IPSTR " allotment=%llu bytes", IP2STR(&ip),
117 (unsigned long long)allotment_bytes);
118 }
119 return s;
120}
121
122void session_add_bytes(uint32_t client_ip, uint64_t bytes)
123{
124 session_t *s = session_find_by_ip(client_ip);
125 if (s && s->active) {
126 s->bytes_consumed += bytes;
127 }
128}
129
106session_t *session_find_by_ip(uint32_t client_ip) 130session_t *session_find_by_ip(uint32_t client_ip)
107{ 131{
108 for (int i = 0; i < SESSION_MAX_CLIENTS; i++) { 132 for (int i = 0; i < SESSION_MAX_CLIENTS; i++) {
@@ -136,6 +160,12 @@ void session_extend(session_t *session, uint64_t additional_ms)
136bool session_is_expired(const session_t *session) 160bool session_is_expired(const session_t *session)
137{ 161{
138 if (!session || !session->active) return true; 162 if (!session || !session->active) return true;
163
164 const tollgate_config_t *cfg = tollgate_config_get();
165 if (cfg && strcmp(cfg->metric, "bytes") == 0) {
166 return session->bytes_consumed >= session->allotment_bytes;
167 }
168
139 int64_t elapsed = get_time_ms() - session->start_time_ms; 169 int64_t elapsed = get_time_ms() - session->start_time_ms;
140 return elapsed >= (int64_t)session->allotment_ms; 170 return elapsed >= (int64_t)session->allotment_ms;
141} 171}