summaryrefslogtreecommitdiffstats
path: root/src/fbgui/fbgui.h
blob: 57f4a346a9990bedaad3b6352ba2274ba4acf10f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
 * 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 <QWSServer>
#include <QtGui>
#include <QtWebKit>

// 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<QSslError> & 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