Update to use MG_ESC()

This commit is contained in:
Sergio R. Caprile 2023-05-17 14:26:45 -03:00
parent f4cf40d38f
commit 1908d3200e
8 changed files with 46 additions and 56 deletions

View File

@ -115,8 +115,8 @@ static void send_notification(struct mg_mgr *mgr, const char *fmt, ...) {
// Send simulated metrics data to the dashboard, for chart rendering // Send simulated metrics data to the dashboard, for chart rendering
static void timer_metrics_fn(void *param) { static void timer_metrics_fn(void *param) {
send_notification(param, "{%m:%m,%m:[%lu, %d]}", mg_print_esc, 0, "name", send_notification(param, "{%m:%m,%m:[%lu, %d]}", MG_ESC("name"),
mg_print_esc, 0, "metrics", mg_print_esc, 0, "data", MG_ESC("metrics"), MG_ESC("data"),
(unsigned long) ourtime(NULL), (unsigned long) ourtime(NULL),
10 + (int) ((double) rand() * 10 / RAND_MAX)); 10 + (int) ((double) rand() * 10 / RAND_MAX));
} }
@ -136,19 +136,18 @@ static void mqtt_fn(struct mg_connection *c, int ev, void *ev_data, void *fnd) {
memset(&sub_opts, 0, sizeof(sub_opts)); memset(&sub_opts, 0, sizeof(sub_opts));
sub_opts.topic = mg_str(s_config.sub); sub_opts.topic = mg_str(s_config.sub);
sub_opts.qos = 2; sub_opts.qos = 2;
mg_mqtt_sub(s_mqtt, &sub_opts); mg_mqtt_sub(s_mqtt, &sub_opts);
send_notification(c->mgr, "{%m:%m,%m:null}", mg_print_esc, 0, "name", send_notification(c->mgr, "{%m:%m,%m:null}", MG_ESC("name"),
mg_print_esc, 0, "config", mg_print_esc, 0, "data"); MG_ESC("config"), MG_ESC("data"));
MG_INFO(("MQTT connected, server %s", MQTT_SERVER)); MG_INFO(("MQTT connected, server %s", MQTT_SERVER));
} else if (ev == MG_EV_MQTT_MSG) { } else if (ev == MG_EV_MQTT_MSG) {
struct mg_mqtt_message *mm = ev_data; struct mg_mqtt_message *mm = ev_data;
send_notification(c->mgr, "{%m:%m,%m:{%m: %m, %m: %m, %m: %d}}", send_notification(
mg_print_esc, 0, "name", mg_print_esc, 0, "message", c->mgr, "{%m:%m,%m:{%m: %m, %m: %m, %m: %d}}", MG_ESC("name"),
mg_print_esc, 0, "data", mg_print_esc, 0, "topic", MG_ESC("message"), MG_ESC("data"), MG_ESC("topic"), mg_print_esc,
mg_print_esc, (int) mm->topic.len, mm->topic.ptr, (int) mm->topic.len, mm->topic.ptr, MG_ESC("data"), mg_print_esc,
mg_print_esc, 0, "data", mg_print_esc, (int) mm->data.len, (int) mm->data.len, mm->data.ptr, MG_ESC("qos"), (int) mm->qos);
mm->data.ptr, mg_print_esc, 0, "qos", (int) mm->qos);
} else if (ev == MG_EV_MQTT_CMD) { } else if (ev == MG_EV_MQTT_CMD) {
struct mg_mqtt_message *mm = (struct mg_mqtt_message *) ev_data; struct mg_mqtt_message *mm = (struct mg_mqtt_message *) ev_data;
MG_DEBUG(("%lu cmd %d qos %d", c->id, mm->cmd, mm->qos)); MG_DEBUG(("%lu cmd %d qos %d", c->id, mm->cmd, mm->qos));
@ -156,8 +155,8 @@ static void mqtt_fn(struct mg_connection *c, int ev, void *ev_data, void *fnd) {
s_mqtt = NULL; s_mqtt = NULL;
if (s_connected) { if (s_connected) {
s_connected = false; s_connected = false;
send_notification(c->mgr, "{%m:%m,%m:null}", mg_print_esc, 0, "name", send_notification(c->mgr, "{%m:%m,%m:null}", MG_ESC("name"),
mg_print_esc, 0, "config", mg_print_esc, 0, "data"); MG_ESC("config"), MG_ESC("data"));
} }
} }
(void) fnd; (void) fnd;
@ -226,16 +225,14 @@ void device_dashboard_fn(struct mg_connection *c, int ev, void *ev_data,
mg_http_reply(c, 403, "", "Denied\n"); mg_http_reply(c, 403, "", "Denied\n");
} else if (mg_http_match_uri(hm, "/api/config/get")) { } else if (mg_http_match_uri(hm, "/api/config/get")) {
#ifdef DISABLE_ROUTING #ifdef DISABLE_ROUTING
mg_http_reply(c, 200, NULL, "{%m:%m,%m:%m,%m:%m}\n", mg_print_esc, 0, mg_http_reply(c, 200, NULL, "{%m:%m,%m:%m,%m:%m}\n", MG_ESC("url"),
"url", mg_print_esc, 0, s_config.url, mg_print_esc, 0, MG_ESC(s_config.url), MG_ESC("pub"), MG_ESC(s_config.pub),
"pub", mg_print_esc, 0, s_config.pub, mg_print_esc, 0, MG_ESC("sub"), MG_ESC(s_config.sub));
"sub", mg_print_esc, 0, s_config.sub);
#else #else
mg_http_reply(c, 200, NULL, "{%m:%m,%m:%m,%m:%m,%m:%s}\n", mg_print_esc, mg_http_reply(c, 200, NULL, "{%m:%m,%m:%m,%m:%m,%m:%s}\n", MG_ESC("url"),
0, "url", mg_print_esc, 0, s_config.url, mg_print_esc, 0, MG_ESC(s_config.url), MG_ESC("pub"), MG_ESC(s_config.pub),
"pub", mg_print_esc, 0, s_config.pub, mg_print_esc, 0, MG_ESC("sub"), MG_ESC(s_config.sub), MG_ESC("connected"),
"sub", mg_print_esc, 0, s_config.sub, mg_print_esc, 0, s_connected ? "true" : "false");
"connected", s_connected ? "true" : "false");
#endif #endif
} else if (mg_http_match_uri(hm, "/api/config/set")) { } else if (mg_http_match_uri(hm, "/api/config/set")) {
// Admins only // Admins only
@ -244,8 +241,8 @@ void device_dashboard_fn(struct mg_connection *c, int ev, void *ev_data,
update_config(&hm->body, "pub", &s_config.pub); update_config(&hm->body, "pub", &s_config.pub);
update_config(&hm->body, "sub", &s_config.sub); update_config(&hm->body, "sub", &s_config.sub);
if (s_mqtt) s_mqtt->is_closing = 1; // Ask to disconnect from MQTT if (s_mqtt) s_mqtt->is_closing = 1; // Ask to disconnect from MQTT
send_notification(c->mgr, "{%m:%m,%m:null}", mg_print_esc, 0, "name", send_notification(c->mgr, "{%m:%m,%m:null}", MG_ESC("name"),
mg_print_esc, 0, "config", mg_print_esc, 0, "data"); MG_ESC("config"), MG_ESC("data"));
mg_http_reply(c, 200, "", "ok\n"); mg_http_reply(c, 200, "", "ok\n");
} else { } else {
mg_http_reply(c, 403, "", "Denied\n"); mg_http_reply(c, 403, "", "Denied\n");
@ -267,9 +264,8 @@ void device_dashboard_fn(struct mg_connection *c, int ev, void *ev_data,
c->data[0] = 'W'; // Mark ourselves as a event listener c->data[0] = 'W'; // Mark ourselves as a event listener
mg_ws_upgrade(c, hm, NULL); mg_ws_upgrade(c, hm, NULL);
} else if (mg_http_match_uri(hm, "/api/login")) { } else if (mg_http_match_uri(hm, "/api/login")) {
mg_http_reply(c, 200, NULL, "{%m:%m,%m:%m}\n", mg_print_esc, 0, "user", mg_http_reply(c, 200, NULL, "{%m:%m,%m:%m}\n", MG_ESC("user"),
mg_print_esc, 0, u->name, mg_print_esc, 0, "token", MG_ESC(u->name), MG_ESC("token"), MG_ESC(u->token));
mg_print_esc, 0, u->token);
} else { } else {
struct mg_http_serve_opts opts; struct mg_http_serve_opts opts;
memset(&opts, 0, sizeof(opts)); memset(&opts, 0, sizeof(opts));

View File

@ -52,14 +52,13 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
if (version > 0 && version != s_version) { if (version > 0 && version != s_version) {
// Version mismatch: s_data has changed while client fetches it // Version mismatch: s_data has changed while client fetches it
// Tell client to restart // Tell client to restart
mg_http_reply(c, 200, headers, "{%m:%m, %m:%ld}", mg_print_esc, 0, mg_http_reply(c, 200, headers, "{%m:%m, %m:%ld}", MG_ESC("error"),
"error", mg_print_esc, 0, "wrong version", mg_print_esc, MG_ESC("wrong version"), MG_ESC("version"), version);
0, "version", version);
} else { } else {
// Return data, up to CHUNK_SIZE elements // Return data, up to CHUNK_SIZE elements
mg_http_reply(c, 200, headers, "{%m:%ld,%m:%ld,%m:[%M]}", mg_print_esc, mg_http_reply(c, 200, headers, "{%m:%ld,%m:%ld,%m:[%M]}",
0, "version", s_version, mg_print_esc, 0, "start", start, MG_ESC("version"), s_version, MG_ESC("start"), start,
mg_print_esc, 0, "data", printdata, start); MG_ESC("data"), printdata, start);
} }
} else { } else {
struct mg_http_serve_opts opts = {0}; struct mg_http_serve_opts opts = {0};

View File

@ -59,9 +59,9 @@ static void timer_fn(void *arg) {
// Broadcast message to all connected websocket clients. // Broadcast message to all connected websocket clients.
for (struct mg_connection *c = mgr->conns; c != NULL; c = c->next) { for (struct mg_connection *c = mgr->conns; c != NULL; c = c->next) {
if (c->data[0] != 'W') continue; if (c->data[0] != 'W') continue;
mg_ws_printf(c, WEBSOCKET_OP_TEXT, "{%m:%m,%m:[%d,%d,%d]}", mg_print_esc, 0, mg_ws_printf(c, WEBSOCKET_OP_TEXT, "{%m:%m,%m:[%d,%d,%d]}",
"method", mg_print_esc, 0, "notification1", mg_print_esc, 0, MG_ESC("method"), MG_ESC("notification1"), MG_ESC("params"), 1,
"params", 1, 2, 3); 2, 3);
} }
} }

View File

@ -52,14 +52,12 @@ void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
mg_http_reply(c, 403, "", "Denied\n"); mg_http_reply(c, 403, "", "Denied\n");
} else if (mg_http_match_uri(hm, "/api/data")) { } else if (mg_http_match_uri(hm, "/api/data")) {
mg_http_reply(c, 200, "Content-Type: application/json\r\n", mg_http_reply(c, 200, "Content-Type: application/json\r\n",
"{%m:%m,%m:%m}\n", mg_print_esc, 0, "text", mg_print_esc, 0, "{%m:%m,%m:%m}\n", MG_ESC("text"), MG_ESC("Hello!"),
"Hello!", mg_print_esc, 0, "data", mg_print_esc, 0, MG_ESC("data"), MG_ESC("somedata"));
"somedata");
} else if (mg_http_match_uri(hm, "/api/login")) { } else if (mg_http_match_uri(hm, "/api/login")) {
mg_http_reply(c, 200, "Content-Type: application/json\r\n", mg_http_reply(c, 200, "Content-Type: application/json\r\n",
"{%m:%m,%m:%m}\n", mg_print_esc, 0, "user", mg_print_esc, 0, "{%m:%m,%m:%m}\n", MG_ESC("user"), MG_ESC(u->name),
u->name, mg_print_esc, 0, "token", mg_print_esc, 0, MG_ESC("token"), MG_ESC(u->token));
u->token);
} else { } else {
struct mg_http_serve_opts opts = {.root_dir = "web_root"}; struct mg_http_serve_opts opts = {.root_dir = "web_root"};
mg_http_serve_dir(c, ev_data, &opts); mg_http_serve_dir(c, ev_data, &opts);

View File

@ -38,10 +38,9 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
struct mg_http_message *hm = (struct mg_http_message *) ev_data; struct mg_http_message *hm = (struct mg_http_message *) ev_data;
if (mg_http_match_uri(hm, "/api/config/get")) { if (mg_http_match_uri(hm, "/api/config/get")) {
mg_http_reply(c, 200, "Content-Type: application/json\r\n", mg_http_reply(c, 200, "Content-Type: application/json\r\n",
"{%m:%m,%m:%m,%m:%m}\n", mg_print_esc, 0, "url", "{%m:%m,%m:%m,%m:%m}\n", MG_ESC("url"),
mg_print_esc, 0, s_config.url, mg_print_esc, 0, "pub", MG_ESC(s_config.url), MG_ESC("pub"), MG_ESC(s_config.pub),
mg_print_esc, 0, s_config.pub, mg_print_esc, 0, "sub", MG_ESC("sub"), MG_ESC(s_config.sub));
mg_print_esc, 0, s_config.sub);
} else if (mg_http_match_uri(hm, "/api/config/set")) { } else if (mg_http_match_uri(hm, "/api/config/set")) {
struct mg_str json = hm->body; struct mg_str json = hm->body;
update_config(json, "$.url", &s_config.url); update_config(json, "$.url", &s_config.url);

View File

@ -45,14 +45,13 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
if (version > 0 && version == s_version) { if (version > 0 && version == s_version) {
// Version match: no changes // Version match: no changes
mg_http_reply(c, 200, "Content-Type: application/json\r\n", mg_http_reply(c, 200, "Content-Type: application/json\r\n",
"{%m:%m,%m:%ld}\n", mg_print_esc, 0, "status", "{%m:%m,%m:%ld}\n", MG_ESC("status"), MG_ESC("no change"),
mg_print_esc, 0, "no change", mg_print_esc, 0, "version", MG_ESC("version"), version);
version);
} else { } else {
// Version mismatch, return data // Version mismatch, return data
mg_http_reply(c, 200, "Content-Type: application/json\r\n", mg_http_reply(c, 200, "Content-Type: application/json\r\n",
"{%m:%ld,%m:[%M]}\n", mg_print_esc, 0, "version", "{%m:%ld,%m:[%M]}\n", MG_ESC("version"), s_version,
s_version, mg_print_esc, 0, "data", printdata); MG_ESC("data"), printdata);
} }
} else { } else {
struct mg_http_serve_opts opts = {.root_dir = s_root_dir}; struct mg_http_serve_opts opts = {.root_dir = s_root_dir};

View File

@ -29,9 +29,8 @@ static void push(struct mg_mgr *mgr, const char *name, const void *data) {
struct mg_connection *c; struct mg_connection *c;
for (c = mgr->conns; c != NULL; c = c->next) { for (c = mgr->conns; c != NULL; c = c->next) {
if (c->data[0] != 'W') continue; if (c->data[0] != 'W') continue;
mg_ws_printf(c, WEBSOCKET_OP_TEXT, "{%m:%m,%m:%m}", mg_print_esc, 0, "name", mg_ws_printf(c, WEBSOCKET_OP_TEXT, "{%m:%m,%m:%m}", MG_ESC("name"),
mg_print_esc, 0, name, mg_print_esc, 0, "data", mg_print_esc, MG_ESC(name), MG_ESC("data"), MG_ESC(data));
0, data);
} }
} }

View File

@ -18,7 +18,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
struct mg_http_message *hm = (struct mg_http_message *) ev_data; struct mg_http_message *hm = (struct mg_http_message *) ev_data;
if (mg_http_match_uri(hm, "/api/f1")) { if (mg_http_match_uri(hm, "/api/f1")) {
mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{%m:%d}\n", mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{%m:%d}\n",
mg_print_esc, 0, "result", 123); MG_ESC("result"), 123);
} else if (mg_http_match_uri(hm, "/api/sum")) { } else if (mg_http_match_uri(hm, "/api/sum")) {
// Attempt to fetch a JSON array from the body, hm->body // Attempt to fetch a JSON array from the body, hm->body
struct mg_str json = hm->body; struct mg_str json = hm->body;
@ -27,7 +27,7 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
mg_json_get_num(json, "$[1]", &num2)) { mg_json_get_num(json, "$[1]", &num2)) {
// Success! create a JSON response // Success! create a JSON response
mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{%m:%g}\n", mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{%m:%g}\n",
mg_print_esc, 0, "result", num1 + num2); MG_ESC("result"), num1 + num2);
} }
} else { } else {
struct mg_http_serve_opts opts = {.root_dir = s_root_dir}; struct mg_http_serve_opts opts = {.root_dir = s_root_dir};