/* * Copyright (c) 2010,2011 - RZ Uni Freiburg * Copyright (c) 2010,2011 - OpenSLX Project * * This program/file is free software distributed under the GPL version 2. * See http://openslx.org/COPYING * * If you have any feedback please consult http://openslx.org/feedback and * send your feedback to feedback@openslx.org * * General information about OpenSLX can be found under http://openslx.org * * * Main class of the fbgui: * - Manages display of components and their communications * */ #ifndef FBGUI_H #define FBGUI_H #include #include #include // Internal default settings #define DEFAULT_URL "http://www.google.com" #define DEFAULT_DOWNLOAD_DIR "/tmp/fbgui" #define DEFAULT_CONFIG_PATH "/etc/fbgui.conf" #define DEFAULT_LOG_FILE_PATH "/tmp/fbgui.log" #define DEFAULT_UPDATE_INTERVAL 1; #define DEFAULT_QRC_HTML_DIR ":/html" #define DEFAULT_FILE_TRIGGER "/tmp/fbgui/trigger" #define DEFAULT_SSL_SUPPORT false; // Global settings variables extern QString logFilePath; extern QString ipConfigFilePath; extern QThread dmThread; extern QString serialLocation; extern QString fileToTriggerURL; extern QString sessionID; extern QString binPath; extern QString downloadPath; extern QUrl baseURL; extern int debugMode; extern int updateInterval; extern bool sslSupport; class fbgui: public QMainWindow { Q_OBJECT public: fbgui(); ~fbgui(); public slots: void init(); private: //------------------- // layout setup: //------------------- // Sets the layout depending on the debug mode: // no debug or debugMode = 0 -> only browser shown. // debugMode = 1 -> split main window in browser and debug console. void setupLayout(); // Create all actions for the GUI. (Currently only quit.) void createActions(); // Create a debug console widget as QTextEdit in order to print debug messages // directly within the GUI. This was needed since ttys can't really be used // for debugging purposes in the preboot environment. void createDebugConsole(); //---------------------------------------- // control the display of components: //---------------------------------------- // watches for the file triggering the loading of the URL. // the file can be specified by the corresponding option. void watchForTrigger(); bool checkHost() const; void loadURL(); QByteArray generatePOSTData(); //---------------------------------- // widgets constituing the gui: //---------------------------------- // QWebView for displaying internet content QWebView* _webView; // QNetworkRequest for the Network Request QNetworkRequest* _qnr; // QSplitter to split the main window in two resizable frames. QSplitter* _splitter; // QTextEdit implementing a minimalistic debug console. QTextEdit* _debugConsole; //------------------ // action list: //------------------ // closes the main window provoking the application to quit. QAction* _quit; // triggers toggleDebugConsole() QAction* _toggleDebugConsole; // watcher to detect changes in the observed directory. QFileSystemWatcher* _watcher; QFile* _logFile; QTextStream* _logFileIn; private slots: // toggles debug console when action _toggleDebugConsole happens. void toggleDebugConsole(); void refreshDebugConsole(const QString&); // This function is triggered by fileChanged Signal of _watcher. // It deletes _watcher, since we don't need it anymore and tries to load URL. void prepareURLLoad(const QString&); void loadURLDone(bool success); //SSL Error Handler for SSL Requests void sslErrorHandler(QNetworkReply* reply, const QList & errlist); //Error Handler for http Requests void httpErrorHandler(QNetworkReply* reply); //Sets CaCertificate in QSslConfiguration void registerCACertificate(QSslCertificate& cert); // shut off the system void performShutDown(); // reboot the system void performReboot(); // shows "loading system" page void loadSystem(); // prepares kexec by loading downloaded initramfs, kernel into kexec void prepareKexec(); // executes: kexec -e void runKexec(); }; #endif // FBGUI_H