diff options
Diffstat (limited to 'main/session.c')
| -rw-r--r-- | main/session.c | 30 |
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 | ||
| 107 | session_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 | |||
| 122 | void 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 | |||
| 106 | session_t *session_find_by_ip(uint32_t client_ip) | 130 | session_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) | |||
| 136 | bool session_is_expired(const session_t *session) | 160 | bool 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 | } |