summaryrefslogtreecommitdiffstats
path: root/src/nam.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/nam.cpp')
-rw-r--r--src/nam.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/nam.cpp b/src/nam.cpp
new file mode 100644
index 0000000..2f3fdd1
--- /dev/null
+++ b/src/nam.cpp
@@ -0,0 +1,42 @@
+#include "nam.h"
+
+#include <QCoreApplication>
+#include <QDebug>
+
+SlxDisabledNetworkReply::SlxDisabledNetworkReply(QObject *parent, const QNetworkRequest &req,
+ QNetworkAccessManager::Operation op)
+ : QNetworkReply(parent)
+{
+ setRequest(req);
+ setUrl(req.url());
+ setOperation(op);
+ setFinished(true);
+ qRegisterMetaType<QNetworkReply::NetworkError>();
+ QString msg = QCoreApplication::translate("QNetworkAccessManager",
+ "Network access is disabled.");
+ setError(UnknownNetworkError, msg);
+ QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
+ Q_ARG(QNetworkReply::NetworkError, UnknownNetworkError));
+ QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection);
+}
+
+QNetworkReply* SlxNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op,
+ const QNetworkRequest &req, QIODevice *outgoingData)
+{
+ const QUrl url(req.url());
+ //qDebug() << url;
+ bool ok;
+ if (url.isLocalFile()) {
+ ok = true;
+ } else if (url.scheme() == QLatin1String("qrc") || url.scheme() == QLatin1String("data")) {
+ ok = true;
+ } else if (url.host().isEmpty()) {
+ ok = true;
+ } else {
+ ok = (_list.match(url.toDisplayString(QUrl::NormalizePathSegments)).hasMatch() == _isWhitelist);
+ }
+ if (!ok) {
+ return new SlxDisabledNetworkReply(this, req, op);
+ }
+ return QNetworkAccessManager::createRequest(op, req, outgoingData);
+}