Skip to content

Commit f1aa538

Browse files
cpatuleafifieldt
authored andcommitted
/api/v1/fromradio: add OPTIONS handler for CORS.
This avoids hitting the 404 Not Found handler, which breaks connection keep-alive, so this change fixes a big performance regression for Web Client in Chrome: #5385 Tested on Heltec V3.
1 parent 70336f7 commit f1aa538

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

src/mesh/http/ContentHandler.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer)
7474

7575
ResourceNode *nodeAPIv1ToRadioOptions = new ResourceNode("/api/v1/toradio", "OPTIONS", &handleAPIv1ToRadio);
7676
ResourceNode *nodeAPIv1ToRadio = new ResourceNode("/api/v1/toradio", "PUT", &handleAPIv1ToRadio);
77+
ResourceNode *nodeAPIv1FromRadioOptions = new ResourceNode("/api/v1/fromradio", "OPTIONS", &handleAPIv1FromRadio);
7778
ResourceNode *nodeAPIv1FromRadio = new ResourceNode("/api/v1/fromradio", "GET", &handleAPIv1FromRadio);
7879

7980
// ResourceNode *nodeHotspotApple = new ResourceNode("/hotspot-detect.html", "GET", &handleHotspot);
@@ -100,6 +101,7 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer)
100101
// Secure nodes
101102
secureServer->registerNode(nodeAPIv1ToRadioOptions);
102103
secureServer->registerNode(nodeAPIv1ToRadio);
104+
secureServer->registerNode(nodeAPIv1FromRadioOptions);
103105
secureServer->registerNode(nodeAPIv1FromRadio);
104106
// secureServer->registerNode(nodeHotspotApple);
105107
// secureServer->registerNode(nodeHotspotAndroid);
@@ -121,6 +123,7 @@ void registerHandlers(HTTPServer *insecureServer, HTTPSServer *secureServer)
121123
// Insecure nodes
122124
insecureServer->registerNode(nodeAPIv1ToRadioOptions);
123125
insecureServer->registerNode(nodeAPIv1ToRadio);
126+
insecureServer->registerNode(nodeAPIv1FromRadioOptions);
124127
insecureServer->registerNode(nodeAPIv1FromRadio);
125128
// insecureServer->registerNode(nodeHotspotApple);
126129
// insecureServer->registerNode(nodeHotspotAndroid);
@@ -163,6 +166,12 @@ void handleAPIv1FromRadio(HTTPRequest *req, HTTPResponse *res)
163166
res->setHeader("Access-Control-Allow-Methods", "GET");
164167
res->setHeader("X-Protobuf-Schema", "https://raw.githubusercontent.com/meshtastic/protobufs/master/meshtastic/mesh.proto");
165168

169+
if (req->getMethod() == "OPTIONS") {
170+
res->setStatusCode(204); // Success with no content
171+
// res->print(""); @todo remove
172+
return;
173+
}
174+
166175
uint8_t txBuf[MAX_STREAM_BUF_SIZE];
167176
uint32_t len = 1;
168177

0 commit comments

Comments
 (0)