2024-03-25 05:33:57 -06:00
|
|
|
#include "configuration.h"
|
2024-03-21 05:34:34 -06:00
|
|
|
#if !MESHTASTIC_EXCLUDE_WEBSERVER
|
2020-09-18 18:29:16 -07:00
|
|
|
#include "NodeDB.h"
|
2021-12-26 15:46:23 -08:00
|
|
|
#include "graphics/Screen.h"
|
|
|
|
|
#include "main.h"
|
2024-03-25 05:33:57 -06:00
|
|
|
#include "mesh/http/WebServer.h"
|
2023-12-02 21:47:52 +01:00
|
|
|
#include "mesh/wifi/WiFiAPClient.h"
|
2021-12-26 15:46:23 -08:00
|
|
|
#include "sleep.h"
|
2020-10-21 20:57:44 -07:00
|
|
|
#include <HTTPBodyParser.hpp>
|
|
|
|
|
#include <HTTPMultipartBodyParser.hpp>
|
|
|
|
|
#include <HTTPURLEncodedBodyParser.hpp>
|
2020-09-18 18:29:16 -07:00
|
|
|
#include <WebServer.h>
|
|
|
|
|
#include <WiFi.h>
|
2020-09-13 16:58:36 -07:00
|
|
|
|
2025-03-15 14:15:35 +01:00
|
|
|
#if HAS_ETHERNET && defined(USE_WS5500)
|
|
|
|
|
#include <ETHClass2.h>
|
|
|
|
|
#define ETH ETH2
|
|
|
|
|
#endif // HAS_ETHERNET
|
|
|
|
|
|
2022-07-31 07:11:47 -05:00
|
|
|
#ifdef ARCH_ESP32
|
2021-01-09 13:47:10 -08:00
|
|
|
#include "esp_task_wdt.h"
|
|
|
|
|
#endif
|
2021-01-08 22:25:44 -08:00
|
|
|
|
2023-07-14 17:25:20 -04:00
|
|
|
// Persistent Data Storage
|
2020-10-07 22:02:53 -07:00
|
|
|
#include <Preferences.h>
|
|
|
|
|
Preferences prefs;
|
2020-09-13 16:58:36 -07:00
|
|
|
|
2020-10-07 22:02:53 -07:00
|
|
|
/*
|
|
|
|
|
Including the esp32_https_server library will trigger a compile time error. I've
|
|
|
|
|
tracked it down to a reoccurrance of this bug:
|
|
|
|
|
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57824
|
|
|
|
|
The work around is described here:
|
|
|
|
|
https://forums.xilinx.com/t5/Embedded-Development-Tools/Error-with-Standard-Libaries-in-Zynq/td-p/450032
|
|
|
|
|
|
|
|
|
|
Long story short is we need "#undef str" before including the esp32_https_server.
|
|
|
|
|
- Jm Casler (jm@casler.org) Oct 2020
|
|
|
|
|
*/
|
|
|
|
|
#undef str
|
|
|
|
|
|
|
|
|
|
// Includes for the https server
|
|
|
|
|
// https://github.com/fhessel/esp32_https_server
|
|
|
|
|
#include <HTTPRequest.hpp>
|
|
|
|
|
#include <HTTPResponse.hpp>
|
|
|
|
|
#include <HTTPSServer.hpp>
|
|
|
|
|
#include <HTTPServer.hpp>
|
|
|
|
|
#include <SSLCert.hpp>
|
2020-09-19 16:38:59 -07:00
|
|
|
|
2020-10-07 22:02:53 -07:00
|
|
|
// The HTTPS Server comes in a separate namespace. For easier use, include it here.
|
|
|
|
|
using namespace httpsserver;
|
2021-01-19 21:26:23 -08:00
|
|
|
#include "mesh/http/ContentHandler.h"
|
2020-09-19 12:50:43 -07:00
|
|
|
|
2021-08-17 20:40:46 -07:00
|
|
|
static SSLCert *cert;
|
|
|
|
|
static HTTPSServer *secureServer;
|
|
|
|
|
static HTTPServer *insecureServer;
|
2021-01-17 10:30:34 -08:00
|
|
|
|
2021-08-17 20:40:46 -07:00
|
|
|
volatile bool isWebServerReady;
|
|
|
|
|
volatile bool isCertReady;
|
2020-10-21 20:57:44 -07:00
|
|
|
|
2021-08-17 20:40:46 -07:00
|
|
|
static void handleWebResponse()
|
2020-09-18 18:29:16 -07:00
|
|
|
{
|
2021-08-17 20:40:46 -07:00
|
|
|
if (isWifiAvailable()) {
|
2020-09-16 20:15:00 -07:00
|
|
|
|
2021-08-17 20:40:46 -07:00
|
|
|
if (isWebServerReady) {
|
2021-12-26 15:46:23 -08:00
|
|
|
if (secureServer)
|
2021-08-17 20:40:46 -07:00
|
|
|
secureServer->loop();
|
|
|
|
|
insecureServer->loop();
|
|
|
|
|
}
|
2020-10-11 20:38:09 -07:00
|
|
|
}
|
2020-09-13 16:58:36 -07:00
|
|
|
}
|
|
|
|
|
|
2021-08-17 20:40:46 -07:00
|
|
|
static void taskCreateCert(void *parameter)
|
2020-09-18 18:29:16 -07:00
|
|
|
{
|
2020-10-07 22:02:53 -07:00
|
|
|
prefs.begin("MeshtasticHTTPS", false);
|
|
|
|
|
|
2021-12-14 23:50:49 -05:00
|
|
|
#if 0
|
2021-12-17 14:02:29 -05:00
|
|
|
// Delete the saved certs (used in debugging)
|
2024-11-04 19:15:59 -06:00
|
|
|
LOG_DEBUG("Delete any saved SSL keys");
|
2021-12-17 14:02:29 -05:00
|
|
|
// prefs.clear();
|
|
|
|
|
prefs.remove("PK");
|
|
|
|
|
prefs.remove("cert");
|
2021-12-14 23:50:49 -05:00
|
|
|
#endif
|
|
|
|
|
|
2024-11-04 20:09:23 +08:00
|
|
|
LOG_INFO("Checking if we have a saved SSL Certificate");
|
2021-08-17 20:40:46 -07:00
|
|
|
|
2020-10-07 22:02:53 -07:00
|
|
|
size_t pkLen = prefs.getBytesLength("PK");
|
|
|
|
|
size_t certLen = prefs.getBytesLength("cert");
|
|
|
|
|
|
|
|
|
|
if (pkLen && certLen) {
|
2024-10-14 06:11:43 +02:00
|
|
|
LOG_INFO("Existing SSL Certificate found!");
|
2021-08-17 20:40:46 -07:00
|
|
|
|
|
|
|
|
uint8_t *pkBuffer = new uint8_t[pkLen];
|
|
|
|
|
prefs.getBytes("PK", pkBuffer, pkLen);
|
|
|
|
|
|
|
|
|
|
uint8_t *certBuffer = new uint8_t[certLen];
|
|
|
|
|
prefs.getBytes("cert", certBuffer, certLen);
|
|
|
|
|
|
|
|
|
|
cert = new SSLCert(certBuffer, certLen, pkBuffer, pkLen);
|
|
|
|
|
|
2024-10-14 06:11:43 +02:00
|
|
|
LOG_DEBUG("Retrieved Private Key: %d Bytes", cert->getPKLength());
|
|
|
|
|
LOG_DEBUG("Retrieved Certificate: %d Bytes", cert->getCertLength());
|
2020-10-07 22:02:53 -07:00
|
|
|
} else {
|
2021-12-14 23:50:49 -05:00
|
|
|
|
2024-11-06 07:03:25 -06:00
|
|
|
LOG_INFO("Creating the certificate. This may take a while. Please wait");
|
2020-12-19 12:09:48 -08:00
|
|
|
yield();
|
2020-10-07 22:02:53 -07:00
|
|
|
cert = new SSLCert();
|
2020-12-19 12:09:48 -08:00
|
|
|
yield();
|
2020-10-07 22:02:53 -07:00
|
|
|
int createCertResult = createSelfSignedCert(*cert, KEYSIZE_2048, "CN=meshtastic.local,O=Meshtastic,C=US",
|
|
|
|
|
"20190101000000", "20300101000000");
|
2020-12-19 12:09:48 -08:00
|
|
|
yield();
|
2020-10-07 22:02:53 -07:00
|
|
|
|
|
|
|
|
if (createCertResult != 0) {
|
2024-10-14 06:11:43 +02:00
|
|
|
LOG_ERROR("Creating the certificate failed");
|
2020-10-07 22:02:53 -07:00
|
|
|
} else {
|
2024-10-14 06:11:43 +02:00
|
|
|
LOG_INFO("Creating the certificate was successful");
|
2020-10-07 22:02:53 -07:00
|
|
|
|
2024-10-14 06:11:43 +02:00
|
|
|
LOG_DEBUG("Created Private Key: %d Bytes", cert->getPKLength());
|
2020-10-07 22:02:53 -07:00
|
|
|
|
2024-10-14 06:11:43 +02:00
|
|
|
LOG_DEBUG("Created Certificate: %d Bytes", cert->getCertLength());
|
2020-10-07 22:02:53 -07:00
|
|
|
|
|
|
|
|
prefs.putBytes("PK", (uint8_t *)cert->getPKData(), cert->getPKLength());
|
|
|
|
|
prefs.putBytes("cert", (uint8_t *)cert->getCertData(), cert->getCertLength());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-17 20:40:46 -07:00
|
|
|
isCertReady = true;
|
|
|
|
|
|
|
|
|
|
// Must delete self, can't just fall out
|
2020-10-07 22:02:53 -07:00
|
|
|
vTaskDelete(NULL);
|
2020-09-13 16:58:36 -07:00
|
|
|
}
|
|
|
|
|
|
2020-10-07 22:02:53 -07:00
|
|
|
void createSSLCert()
|
2020-09-18 18:29:16 -07:00
|
|
|
{
|
2021-08-17 20:40:46 -07:00
|
|
|
if (isWifiAvailable() && !isCertReady) {
|
2022-01-24 18:39:17 +00:00
|
|
|
bool runLoop = false;
|
2021-08-17 20:40:46 -07:00
|
|
|
|
|
|
|
|
// Create a new process just to handle creating the cert.
|
|
|
|
|
// This is a workaround for Bug: https://github.com/fhessel/esp32_https_server/issues/48
|
|
|
|
|
// jm@casler.org (Oct 2020)
|
|
|
|
|
xTaskCreate(taskCreateCert, /* Task function. */
|
|
|
|
|
"createCert", /* String with name of task. */
|
2021-12-26 15:46:23 -08:00
|
|
|
// 16384, /* Stack size in bytes. */
|
|
|
|
|
8192, /* Stack size in bytes. */
|
|
|
|
|
NULL, /* Parameter passed as input of the task */
|
|
|
|
|
16, /* Priority of the task. */
|
|
|
|
|
NULL); /* Task handle. */
|
2021-08-17 20:40:46 -07:00
|
|
|
|
2024-11-04 20:09:23 +08:00
|
|
|
LOG_DEBUG("Waiting for SSL Cert to be generated");
|
2021-08-17 20:40:46 -07:00
|
|
|
while (!isCertReady) {
|
2021-12-17 14:02:29 -05:00
|
|
|
if ((millis() / 500) % 2) {
|
|
|
|
|
if (runLoop) {
|
2022-12-29 20:41:37 -06:00
|
|
|
LOG_DEBUG(".");
|
2021-12-17 14:02:29 -05:00
|
|
|
|
|
|
|
|
yield();
|
|
|
|
|
esp_task_wdt_reset();
|
2022-07-31 07:11:47 -05:00
|
|
|
#if HAS_SCREEN
|
2021-12-26 15:46:23 -08:00
|
|
|
if (millis() / 1000 >= 3) {
|
Unify the native display config between legacy display and MUI (#6838)
* Add missed include
* Another Warning fix
* Add another HAS_SCREEN
* Namespace fixes
* Removed depricated destination types and re-factored destination screen
* Get rid of Arduino Strings
* Clean up after Copilot
* SixthLine Def, Screen Rename
Added Sixth Line Definition Screen Rename, and Automatic Line Adjustment
* Consistency is hard - fixed "Sixth"
* System Frame Updates
Adjusted line construction to ensure we fit maximum content per screen.
* Fix up notifications
* Add a couple more ifdef HAS_SCREEN lines
* Add screen->isOverlayBannerShowing()
* Don't forget the invert!
* Adjust Nodelist Center Divider
Adjust Nodelist Center Divider
* Fix variable casting
* Fix entryText variable as empty before update to fix validation
* Altitude is int32_t
* Update PowerTelemetry to have correct data type
* Fix cppcheck warnings (#6945)
* Fix cppcheck warnings
* Adjust logic in Power.cpp for power sensor
---------
Co-authored-by: Jason P <applewiz@mac.com>
* More pixel wrangling so things line up NodeList edition
* Adjust NodeList alignments and plumb some background padding for a possible title fix
* Better alignment for banner notifications
* Move title into drawCommonHeader; initial screen tested
* Fonts make spacing items difficult
* Improved beeping booping and other buzzer based feedback (#6947)
* Improved beeping booping and other buzzer based feedback
* audible button feedback (#6949)
* Refactor
---------
Co-authored-by: todd-herbert <herbert.todd@gmail.com>
* Sandpapered the corners of the notification popup
* Finalize drawCommonHeader migration
* Update Title of Favorite Node Screens
* Update node metric alignment on LoRa screen
* Update the border for popups to separate it from background
* Update PaxcounterModule.cpp with CommonHeader
* Update WiFi screen with CommonHeader and related data reflow
* It was not, in fact, pointing up
* Fix build on wismeshtap
* T-deck trackball debounce
* Fix uptime on Device Focused page to actually detail
* Update Sys screen for new uptime, add label to Freq/Chan on LoRa
* Don't display DOP any longer, make Uptime consistent
* Revert Uptime change on Favorites, Apply to Device Focused
* Label the satelite number to avoid confusion
* Boop boop boop boop
* Correct GPS positioning and string consistency across strings for GPS
* Fix GPS text alignment
* Enable canned messages by default
* Don't wake screen on new nodes
* Cannedmessage list emote support added
* Fn+e emote picker for freetext screen
* Actually block CannedInput actions while display is shown
* Add selection menu to bannerOverlay
* Off by one
* Move to unified text layouts and spacing
* Still my Fav without an "e"
* Fully remove EVENT_NODEDB_UPDATED
* Simply LoRa screen
* Make some char pointers const to fix compilation on native targets
* Update drawCompassNorth to include radius
* Fix warning
* button thread cleanup
* Pull OneButton handling from PowerFSM and add MUI switch (#6973)
* Trunk
* Onebutton Menu Support
* Add temporary clock icon
* Add gps location to fsi
* Banner message state reset
* Cast to char to satisfy compiler
* Better fast handling of input during banner
* Fix warning
* Derp
* oops
* Update ref
* Wire buzzer_mode
* remove legacy string->print()
* Only init screen if one found
* Unsigned Char
* More buttonThread cleaning
* screen.cpp button handling cleanup
* The Great Event Rename of 2025
* Fix the Radiomaster
* Missed trackball type change
* Remove unused function
* Make ButtonThread an InputBroker
* Coffee hadn't kicked in yet
* Add clock icon for Navigation Bar
* Restore clock screen definition code - whoops
* ExternalNotifications now observe inputBroker
* Clock rework (#6992)
* Move Clock bits into ClockRenderer space
* Rework clock into all device navigation
* T-Watch Actually Builds Different
* Compile fix
---------
Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
* Add AM/PM to Digital Clock
* Flip Seconds and AM/PM on Clock Display
* Tik-tok pixels are hard
* Fix builds on Thinknode M1
* Check for GPS and don't crash
* Don't endif til the end
* Rework the OneButton thread to be much less of a mess. (#6997)
* Rework the OneButton thread to be much less of a mess. And break lots of targets temporarily
* Update src/input/ButtonThread.h
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix GPS toggle
* Send the shutdown event, not just the kbchar
* Honor the back button in a notificaiton popup
* Draw the right size box for popup with options
* Try to un-break all the things
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* 24-hour Clock Should have leading zero, but not 12-hour
* Fixup some compile errors
* Add intRoutine to ButtonThread init, to get more responsive user button back
* Add Timezone picker
* Fix Warning
* Optionally set the initial selection for the chooser popup
* Make back buttons work in canned messages
* Drop the wrapper classes
* LonPressTime now configurable
* Clock Frame can not longer be blank; just add valid time
* Back buttons everywhere!
* Key Verification confirm banner
* Make Elecrow M* top button a back button
* Add settings saves
* EInk responsiveness fixes
* Linux Input Fixes
* Add Native Trackball/Joystick support, and move UserButton to Input
* No Flight Stick Mode
* Send input event
* Add Channel Utilization to Device Focused frame
* Don't shift screens when we draw new ones
* Add showOverlayBanner arguments to no-op
* trunk
* Default Native trackball to NC
* Fix crash in simulator mode
* Add longLong button press
* Get the args right
* Adjust Bluetooth Pairing Screen to account for bottom navigation.
* Trackball everywhere, and unPhone buttons
* Remap visionmaster secondary button to TB_UP
* Kill ScanAndSelect
* trunk
* No longer need the canned messages input filter
* All Canned All the time
* Fix stm32 compile error regarding inputBroker
* Unify tft lineheights (#7033)
* Create variable line heights based upon SCREEN_HEIGHT
* Refactor textPositions into method -> getTextPositions
* Update SharedUIDisplay.h
---------
Co-authored-by: Jason P <applewiz@mac.com>
* Adjust top distance for larger displays
* Adjust icon sizes for larger displays
* Fix Paxcounter compile errors after code updates
* Pixel wrangling to make larger screens fit better
* Alert frame has precedence over banner -- for now
* Unify on ALT_BUTTON
* Align AM/PM to the digit, not the segment on larger displays
* Move some global pin defines into configuration.h
* Scaffolding for BMM150 9-axis gyro
* Alt button behavior
* Don't add the blank GPS frames without HAS_GPS
* EVENT_NODEDB_UPDATED has been retired
* Clean out LOG_WARN messages from debugging
* Add dismiss message function
* Minor buttonThread cleanup
* Add BMM150 support
* Clean up last warning from dev
* Simplify bmm150 init return logic
* Add option to reply to messages
* Add minimal menu upon selecting home screen
* Move Messages to slot 2, rename GPS to Position, move variables nearer functional usage in Screen.cpp
* Properly dismiss message
* T-Deck Trackball press is not user button
* Add select on favorite frame to launch cannedMessage DM
* Minor wording change
* Less capital letters
* Fix empty message check, time isn't reliable
* drop dead code
* Make UIRenderer a static class instead of namespace
* Fix the select on favorite
* Check if message is empty early and then 'return'
* Add kb_found, and show the option to launch freetype if appropriate
* Ignore impossible touchscreen touches
* Auto scroll fix
* Move linebreak after "from" for banners to maximize screen usage.
* Center "No messages to show" on Message frame
* Start consolidating buzzer behavior
* Fixed signed / unsigned warning
* Cast second parameter of max() to make some targets happy
* Cast kbchar to (char) to make arduino string happy
* Shorten the notice of "No messages"
* Add buzzer mode chooser
* Add regionPicker to Lora icon
* Reduce line spacing and reorder Position screen to resolve overlapping issues
* Update message titles, fix GPS icons, add Back options
* Leftover boops
* Remove chirp
* Make the region selection dismissable when a region is already set
* Add read-aloud functionality on messages w/ esp8266sam
* "Last Heard" is a better label
* tweak the beep
* 5 options
* properly tear down freetext upon cancel
* de-convelute canned messages just a bit
* Correct height of Mail icon in navigation bar
* Remove unused warning
* Consolidate time methods into TimeFormatters
* Oops
* Change LoRa Picker Cancel to Back
* Tweak selection characters on Banner
* Message render not scrolling on 5th line
* More fixes for message scrolling
* Remove the safety next on text overflow - we found that root cause
* Add pin definitions to fix compilation for obscure target
* Don't let the touchscreen send unitialized kbchar values
* Make virtual KB just a bit quicker
* No more double tap, swipe!
* Left is left, and Right is right
* Update horizontal lightning bolt design
* Move from solid to dashed separator for Message Frame
* Single emote feature fix
* Manually sort overlapping elements for now
* Freetext and clearer choices
* Fix ESP32 InkHUD builds on the unify-tft branch (#7087)
* Remove BaseUI branding
* Capitalization is fun
* Revert Meshtastic Boot Frame Changes
* Add ANZ_433 LoRa region to picker
* Update settings.json
---------
Co-authored-by: HarukiToreda <116696711+HarukiToreda@users.noreply.github.com>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: Jason P <applewiz@mac.com>
Co-authored-by: todd-herbert <herbert.todd@gmail.com>
Co-authored-by: Thomas Göttgens <tgoettgens@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-06-21 06:36:04 -05:00
|
|
|
if (screen)
|
|
|
|
|
screen->setSSLFrames();
|
2021-12-17 14:02:29 -05:00
|
|
|
}
|
2023-01-21 14:34:29 +01:00
|
|
|
#endif
|
2021-12-17 14:02:29 -05:00
|
|
|
}
|
|
|
|
|
runLoop = false;
|
|
|
|
|
} else {
|
|
|
|
|
runLoop = true;
|
2021-11-26 15:09:16 -05:00
|
|
|
}
|
2021-08-17 20:40:46 -07:00
|
|
|
}
|
2024-10-14 06:11:43 +02:00
|
|
|
LOG_INFO("SSL Cert Ready!");
|
2020-10-07 22:02:53 -07:00
|
|
|
}
|
2020-09-13 16:58:36 -07:00
|
|
|
}
|
|
|
|
|
|
2021-01-08 22:25:44 -08:00
|
|
|
WebServerThread *webServerThread;
|
|
|
|
|
|
2024-11-04 12:16:25 -06:00
|
|
|
WebServerThread::WebServerThread() : concurrency::OSThread("WebServer")
|
2023-01-21 14:34:29 +01:00
|
|
|
{
|
2025-03-15 14:15:35 +01:00
|
|
|
if (!config.network.wifi_enabled && !config.network.eth_enabled) {
|
2022-12-29 16:26:25 -06:00
|
|
|
disable();
|
2022-12-29 15:45:49 +01:00
|
|
|
}
|
|
|
|
|
}
|
2021-01-08 22:25:44 -08:00
|
|
|
|
|
|
|
|
int32_t WebServerThread::runOnce()
|
|
|
|
|
{
|
2025-03-15 14:15:35 +01:00
|
|
|
if (!config.network.wifi_enabled && !config.network.eth_enabled) {
|
2022-12-29 16:26:25 -06:00
|
|
|
disable();
|
2022-12-29 15:45:49 +01:00
|
|
|
}
|
|
|
|
|
|
2021-01-08 22:25:44 -08:00
|
|
|
handleWebResponse();
|
|
|
|
|
|
2022-01-05 22:12:32 -08:00
|
|
|
if (requestRestart && (millis() / 1000) > requestRestart) {
|
|
|
|
|
ESP.restart();
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-07 22:00:09 +11:00
|
|
|
// Loop every 5ms.
|
|
|
|
|
return (5);
|
2021-01-08 22:25:44 -08:00
|
|
|
}
|
|
|
|
|
|
2020-10-07 22:02:53 -07:00
|
|
|
void initWebServer()
|
2020-09-18 18:29:16 -07:00
|
|
|
{
|
2024-11-06 07:03:25 -06:00
|
|
|
LOG_DEBUG("Init Web Server");
|
2020-10-07 22:02:53 -07:00
|
|
|
|
|
|
|
|
// We can now use the new certificate to setup our server as usual.
|
|
|
|
|
secureServer = new HTTPSServer(cert);
|
|
|
|
|
insecureServer = new HTTPServer();
|
|
|
|
|
|
2021-01-19 21:26:23 -08:00
|
|
|
registerHandlers(insecureServer, secureServer);
|
2020-10-14 20:24:19 -07:00
|
|
|
|
2021-12-26 15:46:23 -08:00
|
|
|
if (secureServer) {
|
2024-11-06 07:03:25 -06:00
|
|
|
LOG_INFO("Start Secure Web Server");
|
2021-08-17 20:40:46 -07:00
|
|
|
secureServer->start();
|
|
|
|
|
}
|
2024-11-06 07:03:25 -06:00
|
|
|
LOG_INFO("Start Insecure Web Server");
|
2020-10-07 22:02:53 -07:00
|
|
|
insecureServer->start();
|
2021-08-17 20:40:46 -07:00
|
|
|
if (insecureServer->isRunning()) {
|
2024-10-14 06:11:43 +02:00
|
|
|
LOG_INFO("Web Servers Ready! :-) ");
|
2021-08-17 20:40:46 -07:00
|
|
|
isWebServerReady = true;
|
2020-10-18 18:44:08 -07:00
|
|
|
} else {
|
2024-10-14 06:11:43 +02:00
|
|
|
LOG_ERROR("Web Servers Failed! ;-( ");
|
2020-10-07 22:02:53 -07:00
|
|
|
}
|
2024-03-21 05:34:34 -06:00
|
|
|
}
|
2024-11-04 20:09:23 +08:00
|
|
|
#endif
|