diff --git a/src/commons.cpp b/src/commons.cpp index f4e4b8e..90d86da 100644 --- a/src/commons.cpp +++ b/src/commons.cpp @@ -16,10 +16,10 @@ extern "C" void _xovi_construct() { QSettings extensionConfig(configFile, QSettings::IniFormat); QString newRMFCHostNameQStr = extensionConfig.value("host").toString(); if (newRMFCHostNameQStr == "") { - std::cerr << "[" << NAME << "] No host defined in the config file!"; + std::cerr << "[" << NAME << "] No host defined in the config file!" << std::endl; abort(); } - std::cerr << "[" << NAME << "] New host set to: " << newRMFCHostNameQStr.toStdString(); + std::cerr << "[" << NAME << "] New host set to: " << newRMFCHostNameQStr.toStdString() << std::endl; newRMFCHostName = newRMFCHostNameQStr; bool ok; newRMFCPort = extensionConfig.value("port").toInt(&ok); @@ -38,8 +38,26 @@ extern "C" void _xovi_construct() { config.setCaCertificates(globalCerts); QSslConfiguration::setDefaultConfiguration(config); } else { - std::cerr << "[" << NAME << "] Failed to open CA file!"; + std::cerr << "[" << NAME << "] Failed to open CA file!" << std::endl; } free(configRoot); } + +static inline bool shouldPatchURL(const QString &host) { + return QString(R""""( + hwr-production-dot-remarkable-production.appspot.com + service-manager-production-dot-remarkable-production.appspot.com + local.appspot.com + my.remarkable.com + ping.remarkable.com + internal.cloud.remarkable.com + eu.tectonic.remarkable.com + backtrace-proxy.cloud.remarkable.engineering + dev.ping.remarkable.com + dev.tectonic.remarkable.com + dev.internal.cloud.remarkable.com + eu.internal.tctn.cloud.remarkable.com + webapp-prod.cloud.remarkable.engineering + )"""").contains(host); +} diff --git a/src/networkaccess-part.cpp b/src/networkaccess-part.cpp index 1c6844d..cd7cb84 100644 --- a/src/networkaccess-part.cpp +++ b/src/networkaccess-part.cpp @@ -12,24 +12,27 @@ extern "C" QNetworkReply* override$_ZN21QNetworkAccessManager13createRequestENS_ const QNetworkRequest& req, QIODevice* outgoingData ) { - // set new url - QUrl newUrl = req.url(); - newUrl.setHost(newRMFCHostName); - newUrl.setPort(newRMFCPort); - - // create a new request, so we don't have to modify the original request - QNetworkRequest newReq(req); - newReq.setUrl(newUrl); - - // get original function signature using CreateFn = QNetworkReply*(*)(QNetworkAccessManager*, - QNetworkAccessManager::Operation, - const QNetworkRequest&, - QIODevice*); + QNetworkAccessManager::Operation, + const QNetworkRequest&, + QIODevice*); CreateFn orig = reinterpret_cast( $_ZN21QNetworkAccessManager13createRequestENS_9OperationERK15QNetworkRequestP9QIODevice ); - // call original function, and return the result - return orig(self, op, newReq, outgoingData); + if(shouldPatchURL(req.url().host())) { + // set new url + QUrl newUrl = req.url(); + newUrl.setHost(newRMFCHostName); + newUrl.setPort(newRMFCPort); + + // create a new request, so we don't have to modify the original request + QNetworkRequest newReq(req); + newReq.setUrl(newUrl); + + // call original function, and return the result + return orig(self, op, newReq, outgoingData); + } else { + return orig(self, op, req, outgoingData); + } } diff --git a/src/websocket-part.cpp b/src/websocket-part.cpp index 49ce8e1..10e1008 100644 --- a/src/websocket-part.cpp +++ b/src/websocket-part.cpp @@ -11,22 +11,26 @@ extern "C" void override$_ZN10QWebSocket4openERK15QNetworkRequest( QWebSocket* self, const QNetworkRequest& req ) { - // set new url - QUrl newUrl = req.url(); - newUrl.setHost(newRMFCHostName); - newUrl.setPort(newRMFCPort); - - // create a new request, so we don't have to modify the original request - QNetworkRequest newReq(req); - newReq.setUrl(newUrl); - - // get original function signature using CreateFn = void*(*)(QWebSocket*, - const QNetworkRequest&); + const QNetworkRequest&); CreateFn orig = reinterpret_cast( $_ZN10QWebSocket4openERK15QNetworkRequest ); - // call original function, and return the result - orig(self, newReq); + if(shouldPatchURL(req.url().host())) { + // set new url + QUrl newUrl = req.url(); + newUrl.setHost(newRMFCHostName); + newUrl.setPort(newRMFCPort); + + // create a new request, so we don't have to modify the original request + QNetworkRequest newReq(req); + newReq.setUrl(newUrl); + + + // call original function, and return the result + orig(self, newReq); + } else { + orig(self, req); + } }