MCPcopy Create free account
hub / github.com/MiniZinc/MiniZincIDE / handleHttpRequest

Method handleHttpRequest

MiniZincIDE/server.cpp:274–368  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

272}
273
274void Server::handleHttpRequest()
275{
276 auto* socket = qobject_cast<QTcpSocket*>(sender());
277 if (!socket->canReadLine()) {
278 return;
279 }
280
281 QTextStream ts(socket);
282 auto parts = ts.readLine().split(QRegularExpression("\\s+"));
283 if (parts.length() < 3 || parts[0] != "GET") {
284 return;
285 }
286
287 // Connector script
288 if (parts[1] == "/minizinc-ide.js") {
289 QFile f(":/server/server/connector.js");
290 f.open(QFile::ReadOnly | QFile::Text);
291 QTextStream c(&f);
292 ts << "HTTP/1.1 200 OK\r\n"
293 << "Content-Type: text/javascript\r\n"
294 << "\r\n"
295 << c.readAll();
296 socket->close();
297 return;
298 }
299
300 QRegularExpression re("^/?(\\d+)(/.*)?$");
301 auto p = QUrl::fromPercentEncoding(parts[1].toUtf8());
302 auto match = re.match(p);
303 if (!match.hasMatch()) {
304 ts << "HTTP/1.1 404 OK\r\n"
305 << "\r\n"
306 << "File not found.";
307 socket->close();
308 return;
309 }
310
311 auto index = match.captured(1).toInt();
312 if (index >= connectors.size()) {
313 ts << "HTTP/1.1 404 OK\r\n"
314 << "\r\n"
315 << "File not found.";
316 socket->close();
317 return;
318 }
319
320 auto path = match.captured(2);
321 // Window management page
322 if (path.isEmpty() || path == "index.html") {
323 QString title = connectors[index]->_label.toHtmlEscaped();
324 QFile f(":/server/server/index.html");
325 f.open(QFile::ReadOnly | QFile::Text);
326 QTextStream c(&f);
327 ts << "HTTP/1.1 200 OK\r\n"
328 << "Content-Type: text/html\r\n"
329 << "\r\n"
330 << c.readAll().arg(ws->serverUrl().toString()).arg(index).arg(title);
331 socket->close();

Callers

nothing calls this directly

Calls 4

isChildPathFunction · 0.85
sizeMethod · 0.45
toStringMethod · 0.45
nameMethod · 0.45

Tested by

no test coverage detected