From 8e640722c62692818ab840d50b3758f89a41a54e Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Wed, 25 Nov 2015 16:48:41 -0500 Subject: Imported Upstream version 3.0.7 --- Plugins/DbAndroid/dbandroidurl.cpp | 217 +++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 Plugins/DbAndroid/dbandroidurl.cpp (limited to 'Plugins/DbAndroid/dbandroidurl.cpp') diff --git a/Plugins/DbAndroid/dbandroidurl.cpp b/Plugins/DbAndroid/dbandroidurl.cpp new file mode 100644 index 0000000..766d810 --- /dev/null +++ b/Plugins/DbAndroid/dbandroidurl.cpp @@ -0,0 +1,217 @@ +#include "dbandroidurl.h" +#include "common/ipvalidator.h" +#include + +DbAndroidUrl::DbAndroidUrl() +{ +} + +DbAndroidUrl::DbAndroidUrl(DbAndroidMode enforcedMode) : + enforcedMode(enforcedMode) +{ +} + +DbAndroidUrl::DbAndroidUrl(const DbAndroidUrl& other) : + enforcedMode(other.enforcedMode), host(other.host), device(other.device), port(other.port), dbName(other.dbName), password(other.password), + application(other.application) +{ +} + +DbAndroidUrl::DbAndroidUrl(const QString& path, bool obfuscatedPassword) +{ + parse(path, obfuscatedPassword); +} + +DbAndroidUrl::~DbAndroidUrl() +{ +} + +QString DbAndroidUrl::toUrlString(bool obfuscatedPassword) const +{ + return toUrl(obfuscatedPassword).toString(); +} + +QUrl DbAndroidUrl::toUrl(bool obfuscatedPassword) const +{ + QUrl url; + url.setScheme(SCHEME); + url.setHost(host); + url.setUserName(device); + url.setPort(port); + url.setPassword(getPassword(obfuscatedPassword)); + url.setPath("/" + (application.isEmpty() ? "!" : application) + "/" + dbName); + return url; +} + +QString DbAndroidUrl::getDisplayName() const +{ + if (!device.isNull()) + return device; + + return host; +} + +void DbAndroidUrl::parse(const QString& path, bool obfuscatedPassword) +{ + QUrl url(path); + if (url.scheme() != SCHEME) + return; + + host = url.host(); + device = url.userName(); + port = url.port(); + + QString urlPath = url.path(); + if (urlPath.startsWith("/")) + urlPath = urlPath.mid(1); + + QStringList pathParts = urlPath.split("/"); + + application = QString(); + if (pathParts.first() != "!") + application = pathParts.first(); + + dbName = QStringList(pathParts.mid(1)).join("/"); + if (!url.password().isEmpty()) + setPassword(url.password(), obfuscatedPassword); + else + setPassword(QString()); +} + +QString DbAndroidUrl::getApplication() const +{ + return application; +} + +void DbAndroidUrl::setApplication(const QString& value) +{ + application = value; +} + +QString DbAndroidUrl::getDevice() const +{ + return device; +} + +void DbAndroidUrl::setDevice(const QString& value) +{ + device = value; +} + +QString DbAndroidUrl::getHost() const +{ + return host; +} + +void DbAndroidUrl::setHost(const QString& value) +{ + host = value; +} + + +QString DbAndroidUrl::getPassword(bool obfuscated) const +{ + if (obfuscated) + return QString::fromLatin1(password.toUtf8().toHex().toBase64()); + + return password; +} + +void DbAndroidUrl::setPassword(const QString& value, bool obfuscated) +{ + if (obfuscated) + { + password = QString::fromUtf8(QByteArray::fromHex(QByteArray::fromBase64(value.toLatin1()))); + return; + } + + password = value; +} + + +QString DbAndroidUrl::getDbName() const +{ + return dbName; +} + +void DbAndroidUrl::setDbName(const QString& value) +{ + dbName = value; +} + +DbAndroidMode DbAndroidUrl::getMode() const +{ + if (enforcedMode != DbAndroidMode::null) + return enforcedMode; + + if (!application.isEmpty()) + return DbAndroidMode::SHELL; + + return host.isEmpty() ? DbAndroidMode::USB : DbAndroidMode::NETWORK; +} + +void DbAndroidUrl::setEnforcedMode(DbAndroidMode mode) +{ + enforcedMode = mode; +} + +bool DbAndroidUrl::isValid(bool validateConnectionIrrelevantParts) const +{ + if (isNull()) + return false; + + if (validateConnectionIrrelevantParts && dbName.isEmpty()) + return false; + + switch (getMode()) + { + case DbAndroidMode::NETWORK: + { + if (!isHostValid()) + return false; + + if (port <= 0) + return false; + + break; + } + case DbAndroidMode::USB: + { + if (port <= 0) + return false; + + break; + } + case DbAndroidMode::SHELL: + { + if (validateConnectionIrrelevantParts && application.isEmpty()) + return false; + + break; + } + case DbAndroidMode::null: + return false; + } + + return true; +} + +bool DbAndroidUrl::isHostValid() const +{ + return IpValidator::check(host); +} + +bool DbAndroidUrl::isNull() const +{ + return host.isEmpty() && device.isEmpty(); +} + +int DbAndroidUrl::getPort() const +{ + return port; +} + +void DbAndroidUrl::setPort(int value) +{ + port = value; +} -- cgit v1.2.3