blob: b2b22cb5afa2745e94373526d13bddcfe986db66 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#pragma once
#include <QWebEngineUrlRequestJob>
#include <QWebEngineUrlSchemeHandler>
#include <QtCore>
#include <qurlquery.h>
struct NullRPCMessage {
QString name;
QUrlQuery params;
};
class NullRPCSchemeHandler : public QWebEngineUrlSchemeHandler {
Q_OBJECT
public:
static NullRPCSchemeHandler &instance() {
static NullRPCSchemeHandler handler;
return handler;
}
void requestStarted(QWebEngineUrlRequestJob *job) override {
auto url = job->requestUrl();
auto origin = job->initiator();
qDebug() << "REQ" << url << " | From: " << job->initiator();
if (origin.scheme() != "nullrpc" || url.host().isEmpty() || url.host() == "noop") {
job->reply("text/html", new QBuffer(job));
return;
}
if (url.host() == "log") {
qDebug() << url.query();
job->reply("text/plain", new QBuffer(job));
return;
}
NullRPCMessage message{
.name = url.host(),
.params = QUrlQuery(url.query()),
};
emit message_received(message);
// TODO: responses managed with request ids
QByteArray data = "{}";
QBuffer *buffer = new QBuffer(job);
buffer->setData(data);
buffer->open(QIODevice::ReadOnly);
job->reply("text/plain", buffer);
}
signals:
void message_received(NullRPCMessage message);
private:
NullRPCSchemeHandler() = default;
};
|