upleb.uk

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

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYour Name <you@example.com>2026-05-18 14:02:55 +0530
committerYour Name <you@example.com>2026-05-18 14:02:55 +0530
commit36fa7451a3be1c49932e944859364fe4e9f9fcc4 (patch)
treee2d6bd781add57d44940137c6b6ef6c8aa35f5de
parent8a2f7a6c9423e0c00fae3c1233bee9e0bb3ae239 (diff)
fix: EVENT msg buffer underflow + WS write loop + WPA3 auth
- Fix buffer size for ["EVENT",...] wrapper: was 8+event_len+1, needed 10+event_len+2 (9 char prefix + ] + null). snprintf was truncating the closing bracket, causing relay JSON parse errors. - Add write loop in ws_send_text for large payloads that don't fit in a single esp_tls_conn_write call. - Change STA auth threshold from WPA2_PSK to WPA3_PSK for compatibility with WPA3 access points. - Announcements now successfully stored on relay.primal.net!
-rw-r--r--main/config.c4
-rw-r--r--main/cvm_server.c23
2 files changed, 21 insertions, 6 deletions
diff --git a/main/config.c b/main/config.c
index 7c8ebed..6753f40 100644
--- a/main/config.c
+++ b/main/config.c
@@ -54,7 +54,7 @@ esp_err_t tollgate_config_init(void)
54 const char *default_json = "{" 54 const char *default_json = "{"
55 "\"nsec\":\"a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2\"," 55 "\"nsec\":\"a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2\","
56 "\"wifi_networks\":[" 56 "\"wifi_networks\":["
57 "{\"ssid\":\"EnterSSID-2.4GHz\",\"password\":\"c03rad0r123!\"}" 57 "{\"ssid\":\"c03rad0r\",\"password\":\"c03rad0r123\"}"
58 "]," 58 "],"
59 "\"ap_password\":\"\"," 59 "\"ap_password\":\"\","
60 "\"mint_url\":\"https://testnut.cashu.space\"," 60 "\"mint_url\":\"https://testnut.cashu.space\","
@@ -288,7 +288,7 @@ esp_err_t tollgate_config_get_wifi(wifi_config_t *wifi_config)
288 memset(wifi_config, 0, sizeof(wifi_config_t)); 288 memset(wifi_config, 0, sizeof(wifi_config_t));
289 strncpy((char *)wifi_config->sta.ssid, g_config.networks[idx].ssid, sizeof(wifi_config->sta.ssid) - 1); 289 strncpy((char *)wifi_config->sta.ssid, g_config.networks[idx].ssid, sizeof(wifi_config->sta.ssid) - 1);
290 strncpy((char *)wifi_config->sta.password, g_config.networks[idx].password, sizeof(wifi_config->sta.password) - 1); 290 strncpy((char *)wifi_config->sta.password, g_config.networks[idx].password, sizeof(wifi_config->sta.password) - 1);
291 wifi_config->sta.threshold.authmode = WIFI_AUTH_WPA2_PSK; 291 wifi_config->sta.threshold.authmode = WIFI_AUTH_WPA3_PSK;
292 return ESP_OK; 292 return ESP_OK;
293} 293}
294 294
diff --git a/main/cvm_server.c b/main/cvm_server.c
index cf052df..dd04047 100644
--- a/main/cvm_server.c
+++ b/main/cvm_server.c
@@ -100,9 +100,24 @@ static int ws_send_text(esp_tls_t *tls, const char *msg)
100 frame[pos + i] = (uint8_t)msg[i] ^ mask[i & 3]; 100 frame[pos + i] = (uint8_t)msg[i] ^ mask[i & 3];
101 pos += len; 101 pos += len;
102 102
103 int w = esp_tls_conn_write(tls, frame, pos); 103 int total = pos;
104 int written = 0;
105 while (written < total) {
106 int w = esp_tls_conn_write(tls, frame + written, total - written);
107 if (w < 0) {
108 ESP_LOGE(TAG, "ws_send: write failed at %d/%d", written, total);
109 free(frame);
110 return -1;
111 }
112 if (w == 0) {
113 ESP_LOGW(TAG, "ws_send: write returned 0 at %d/%d", written, total);
114 vTaskDelay(pdMS_TO_TICKS(1));
115 }
116 written += w;
117 }
118 ESP_LOGD(TAG, "ws_send: sent %d bytes (payload %d)", total, (int)len);
104 free(frame); 119 free(frame);
105 return w > 0 ? 0 : -1; 120 return 0;
106} 121}
107 122
108static esp_err_t ws_connect(const char *relay_url, esp_tls_t **tls_out) 123static esp_err_t ws_connect(const char *relay_url, esp_tls_t **tls_out)
@@ -292,7 +307,7 @@ static esp_err_t publish_event_to_relay(const char *relay_url, const char *event
292 307
293 char *msg; 308 char *msg;
294 size_t event_len2 = strlen(event_json); 309 size_t event_len2 = strlen(event_json);
295 size_t msg_len2 = 8 + event_len2 + 1; 310 size_t msg_len2 = 10 + event_len2 + 2;
296 msg = malloc(msg_len2); 311 msg = malloc(msg_len2);
297 snprintf(msg, msg_len2, "[\"EVENT\",%s]", event_json); 312 snprintf(msg, msg_len2, "[\"EVENT\",%s]", event_json);
298 313
@@ -591,7 +606,7 @@ static esp_err_t publish_event_via_ws(esp_tls_t *tls, int kind,
591 606
592 char *msg; 607 char *msg;
593 size_t event_len = strlen(event_json); 608 size_t event_len = strlen(event_json);
594 size_t msg_len = 8 + event_len + 1; 609 size_t msg_len = 10 + event_len + 2;
595 msg = malloc(msg_len); 610 msg = malloc(msg_len);
596 snprintf(msg, msg_len, "[\"EVENT\",%s]", event_json); 611 snprintf(msg, msg_len, "[\"EVENT\",%s]", event_json);
597 612