UI: Exit when can't open the driver device.

This commit is contained in:
Nodir Temirkhodjaev 2017-09-11 08:54:19 +05:00
parent f591c0f80d
commit 7cf9847a21
8 changed files with 40 additions and 10 deletions

View File

@ -48,6 +48,11 @@ void DriverManager::setupWorker()
m_workerThread->start();
}
bool DriverManager::isDeviceOpened() const
{
return m_device->isOpened();
}
bool DriverManager::openDevice()
{
if (!m_device->open(FortCommon::deviceName())) {

View File

@ -21,6 +21,8 @@ public:
QString errorMessage() const { return m_errorMessage; }
bool isDeviceOpened() const;
signals:
void errorMessageChanged();

View File

@ -22,12 +22,13 @@
#include "util/netutil.h"
#include "util/osutil.h"
FortManager::FortManager(QObject *parent) :
FortManager::FortManager(FortSettings *fortSettings,
QObject *parent) :
QObject(parent),
m_trayIcon(new QSystemTrayIcon(this)),
m_engine(nullptr),
m_appWindow(nullptr),
m_fortSettings(new FortSettings(qApp->arguments(), this)),
m_fortSettings(fortSettings),
m_firewallConf(new FirewallConf(this)),
m_firewallConfToEdit(nullConf()),
m_driverManager(new DriverManager(this))
@ -69,7 +70,7 @@ void FortManager::registerQmlTypes()
bool FortManager::setupDriver()
{
if (!m_driverManager->openDevice()) {
showErrorBox(m_driverManager->errorMessage());
showErrorBox("Setup Driver: " + m_driverManager->errorMessage());
return false;
}
@ -197,7 +198,7 @@ void FortManager::setFirewallConfToEdit(FirewallConf *conf)
bool FortManager::loadSettings(FirewallConf *conf)
{
if (!m_fortSettings->readConf(*conf)) {
showErrorBox(m_fortSettings->errorMessage());
showErrorBox("Load Settings: " + m_fortSettings->errorMessage());
return false;
}
@ -208,7 +209,7 @@ bool FortManager::saveSettings(FirewallConf *newConf, bool onlyFlags)
{
if (!(onlyFlags ? m_fortSettings->writeConfFlags(*newConf)
: m_fortSettings->writeConf(*newConf))) {
showErrorBox(m_fortSettings->errorMessage());
showErrorBox("Save Settings: " + m_fortSettings->errorMessage());
return false;
}
@ -223,9 +224,12 @@ bool FortManager::saveSettings(FirewallConf *newConf, bool onlyFlags)
bool FortManager::updateDriverConf(FirewallConf *conf)
{
if (!m_driverManager->isDeviceOpened())
return false;
// Update driver
if (!m_driverManager->writeConf(*conf)) {
showErrorBox(m_driverManager->errorMessage());
showErrorBox("Update Driver Conf: " + m_driverManager->errorMessage());
return false;
}
@ -236,7 +240,7 @@ bool FortManager::updateDriverConfFlags(FirewallConf *conf)
{
// Update driver
if (!m_driverManager->writeConfFlags(*conf)) {
showErrorBox(m_driverManager->errorMessage());
showErrorBox("Update Driver Conf Flags: " + m_driverManager->errorMessage());
return false;
}

View File

@ -21,7 +21,8 @@ class FortManager : public QObject
Q_PROPERTY(DriverManager *driverManager READ driverManager CONSTANT)
public:
explicit FortManager(QObject *parent = nullptr);
explicit FortManager(FortSettings *fortSettings,
QObject *parent = nullptr);
FortSettings *fortSettings() const { return m_fortSettings; }

View File

@ -97,6 +97,10 @@ bool FortSettings::readConf(FirewallConf &conf)
const QString filePath = confFilePath();
const QString backupFilePath = confBackupFilePath();
if (!(FileUtil::fileExists(filePath)
|| FileUtil::fileExists(backupFilePath)))
return true;
return tryToReadConf(conf, filePath)
|| tryToReadConf(conf, backupFilePath);
}

View File

@ -1,6 +1,7 @@
#include <QApplication>
#include "../common/version.h"
#include "driver/drivermanager.h"
#include "fortcommon.h"
#include "fortmanager.h"
#include "fortsettings.h"
@ -14,14 +15,20 @@ int main(int argc, char *argv[])
app.setApplicationVersion(APP_VERSION_STR);
app.setApplicationDisplayName(APP_NAME " v" APP_VERSION_STR);
FortManager fortManager;
FortSettings fortSettings(qApp->arguments());
// Register booted provider and exit
if (fortManager.fortSettings()->boot()) {
if (fortSettings.boot()) {
FortCommon::provUnregister();
return FortCommon::provRegister(true);
}
FortManager fortManager(&fortSettings);
// Error: Cannot open the driver device
if (!fortManager.driverManager()->isDeviceOpened())
return 1;
fortManager.showTrayIcon();
return app.exec();

View File

@ -15,6 +15,11 @@ Device::~Device()
close();
}
bool Device::isOpened() const
{
return (m_handle != INVALID_HANDLE_VALUE);
}
bool Device::open(const QString &filePath)
{
const DWORD access = GENERIC_READ | GENERIC_WRITE;

View File

@ -11,6 +11,8 @@ public:
explicit Device(QObject *parent = nullptr);
virtual ~Device();
bool isOpened() const;
static QString lastErrorMessage();
signals: