HomeWaterLeaksDetection
WebServer.h
Go to the documentation of this file.
1 #ifndef WEB_SERVER_H
2 #define WEB_SERVER_H
3 
4 #include "Arduino.h"
5 #include "Ethernet.h"
6 #include "SPI.h"
7 #include "SD.h"
8 #include "vector"
9 #include "Setup.h"
10 #include "HTMLDataSource.h"
11 #include "IControllable.h"
12 #include "LeaksController.h"
13 #include "EmailSender.h"
14 
15 #define DATA_PREF "%*"
16 #define DATA_POST "*%"
17 
18 #define INDEX_FILE_NAME "INDEX~1.HTM"
19 #define OUT_OF_RANGE_ERR 4294967295UL
20 #define MAX_HTTP_RQ_LENGTH 160
21 #define HTTP_RQ_GET_START "GET "
22 #define HTTP_RQ_SETTINGS "/?settings="
23 #define HTTP_RQ_NOTIFICATION "/?notification="
24 #define HTTP_RQ_SEPARATOR ';'
25 
26 //==================WebServer class=====================
27 
34 class WebServer : public IControllable {
35 
36 //====================private data======================
37 private:
38  static WebServer* instance;
39  std::vector<HTMLDataSource*> htmlDataSources;
40  byte mac[6] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
41  EthernetServer server = 80;
42  File webFile;
43  String buff;
45  bool online;
46 
47 //==================private methods=====================
48 private:
50  WebServer();
51 
53  WebServer(WebServer const&){};
54 
56  WebServer& operator=(WebServer const&) { return *this; }
57 
66  const String replaceHTMLWithData(String html) const;
67 
70  int setEthernet();
71 
76  void saveSettings();
77 
78 // these methods must be public when unit testing
79 #ifdef UNIT_TEST
80 public:
81 #else
82 private:
83 #endif
84  int processHTTPRequest(String &httpRequest);
93 
100  int processHTTPRequestSettings(int startPos, String &httpRequest, int numberOfValues);
101 
102 #ifdef EMAIL_NOTIFICATION
103  int processHTTPRequestNotification(int startPos, String &httpRequest, int numberOfValues);
110 #endif
111 
112 //==================public methods======================
113 public:
120  static WebServer* getInstance();
121 
130 
132  void update() override;
133 
136  void addHTMLSource(HTMLDataSource* source);
137 };
138 
139 #endif
WebServer::saveSettings
void saveSettings()
Saves settings on the SD card.
Definition: WebServer.cpp:236
WebServer::webFile
File webFile
file
Definition: WebServer.h:42
WebServer::buff
String buff
buffer for parsing an HTTP request
Definition: WebServer.h:43
WebServer::processHTTPRequest
int processHTTPRequest(String &httpRequest)
Processes an HTTP request.
Definition: WebServer.cpp:197
HTMLDataSource.h
EmailSender.h
Setup.h
WebServer::htmlDataSources
std::vector< HTMLDataSource * > htmlDataSources
collection of classing providing data for the HTML content
Definition: WebServer.h:39
LeaksController.h
WebServer::leaksController
LeaksController * leaksController
instance of LeaksController so it can be updated with each line read off the file
Definition: WebServer.h:44
WebServer::server
EthernetServer server
instance of EthernetServer listening on port 80
Definition: WebServer.h:41
WebServer::setEthernet
int setEthernet()
Sets up the ethernet shield.
Definition: WebServer.cpp:15
WebServer::addHTMLSource
void addHTMLSource(HTMLDataSource *source)
Adds another source of data for the HTML content.
Definition: WebServer.cpp:90
WebServer::update
void update() override
Updates the class.
Definition: WebServer.cpp:94
WebServer
Definition: WebServer.h:34
WebServer::online
bool online
flag if the server is up and running
Definition: WebServer.h:45
WebServer::processHTTPRequestSettings
int processHTTPRequestSettings(int startPos, String &httpRequest, int numberOfValues)
Processes an HTTP request for changing settings of the water leak detection algorithms.
Definition: WebServer.cpp:309
WebServer::operator=
WebServer & operator=(WebServer const &)
Assignment operator of the class.
Definition: WebServer.h:56
WebServer::WebServer
WebServer(WebServer const &)
Copy constructor of the class.
Definition: WebServer.h:53
HTMLDataSource
Definition: HTMLDataSource.h:15
IControllable.h
WebServer::getInstance
static WebServer * getInstance()
Returns the instance of the class.
Definition: WebServer.cpp:9
LeaksController
Definition: LeaksController.h:67
IControllable
Definition: IControllable.h:13
WebServer::instance
static WebServer * instance
the instance of the class
Definition: WebServer.h:38
WebServer::replaceHTMLWithData
const String replaceHTMLWithData(String html) const
Inserts a piece of data into a line of the HTML content.
Definition: WebServer.cpp:359
WebServer::mac
byte mac[6]
MAC address of the Ethernet shield.
Definition: WebServer.h:40
WebServer::WebServer
WebServer()
Constructor of the class.
Definition: WebServer.cpp:5
WebServer::setup
void setup(LeaksController *leaksController)
Sets the pointer to an instance of LeaksController.
Definition: WebServer.cpp:41